找回密码
 注册
搜索
查看: 4184|回复: 0

利用操作系统提供的API编写防火墙

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
7 G1 t; x, }0 V; i# A8 |欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593& D  B' |- i1 A, N  y! ]
/*
* k& W  W, e8 T4 Y  G利用操作系统提供的API编写防火墙.
: B4 C) o4 C- {- }0 A3 f. v9 w该程序涉及到的API说明请访问微软的MSDN Library
6 e7 i2 N/ Y" i' g7 j$ `代码在C++ Builder 5编译通过
- a3 [- @" p9 h, x( j# h如果您想和我交流请email:zzwinner@163.com
; |4 |% I8 K. J* N' \) n*/# ?# l1 G& K) s: @& b# Q
#pragma hdrstop
, @* h: t8 Z' U1 E* [9 |1 B#include "windows.h"/ x! f  {4 [6 ]8 h9 y9 E! N: Q* z
#include "Fltdefs.h"2 u. j: M3 H5 h1 d/ f
// 需要加载"iphlpapi.lib"' S/ {' ^, Y& f+ A
//---------------------------------------------------------------------------
3 ?' r8 x7 R% ]
/ I/ B; D9 v* j* \' s#pragma argsused0 X5 V3 b- d+ m! n
int main(int argc, char* argv[])
1 ~+ Y  D4 l2 r+ d( u# l' ]{
9 b& g. ~5 v4 I! m% E0 u    // 一个创建网络包过滤接口
2 M! \2 z# H9 D. ^. v    INTERFACE_HANDLE hInterface;5 c3 n/ x0 j% X0 g+ O+ h  W
    PfCreateInterface(0,
0 N& f/ M) F+ Q8 t: J+ i+ C                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
% X8 V* K( K" f+ \& _2 x. q                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
! W  r' g6 o+ k1 \# ?                     FALSE, 4 ]9 X4 W& T8 O, x7 |# I5 e
                     TRUE,
  R) `& a% D$ U4 ]                     &hInterface);
4 x+ o' y2 [6 X& w! Z% M& V1 l) {# s0 e
    // 绑定需要网络包过滤的IP地址/ s5 f8 ~% a6 C; T
    BYTE localIp[] = {192,168,0,2};$ B" x: s$ v& |; J% Y5 t7 M
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
& A% L8 e+ Y8 S* d7 w* S/ H) V    // 现在我们开始过滤HTTP协议的的接口
; p& R/ \7 v0 m! O5 x    FILTER_HANDLE fHandle;
2 o4 U/ s2 \" R+ L5 u& `/ j  {( t    // 填充过滤包的规则结构# ?( ~$ y7 y' ^6 i7 j
    PF_FILTER_DESCRIPTOR inFilter;/ z! }/ F# T; ]$ Y
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
  q9 D: u; ~' o6 H    inFilter.dwRule = 0; //一直添这个值
! j% o1 ^7 u+ Y( H# X    inFilter.pfatType = PF_IPV4; //用 ipV4 地址+ v- v! |$ F+ R  N" Z, l$ V) o
    inFilter.SrcAddr = localIp; //设置本地IP地址
1 d% D& q+ M( P) z    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码2 F6 o: T# D4 c
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
6 Q* A2 z; ^# N    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
) K& d) m$ p' J1 R8 n+ Q    inFilter.DstAddr = 0; //任意目标地址2 |3 Z2 F% N9 K
    inFilter.DstMask = 0;
4 P6 R/ u; j5 f+ @, G( u: v    inFilter.wDstPort = 80; //目标端口 80(http 服务)4 y2 Q9 C, q/ p9 A# k8 ~. m, _
    inFilter.wDstPortHighRange = 80;' a" F5 E8 a2 @/ _5 N0 ~  C7 \$ c* }
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议2 h9 z  l7 c+ ^  t8 A9 d
    // 加入一个过滤接口
5 L  A7 B' Q; W2 C7 r2 E    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
, J( L" `  B4 i5 f6 u4 ^    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)& {1 r( g5 X7 w- n
    // 移除过滤接口9 V+ u6 Y5 M; Q7 ~
    PfRemoveFilterHandles(hInterface, 1, &fHandle);
( d, W# M) D, }# Y* H% h6 |- [    PfUnBindInterface(hInterface);7 }1 n, W- m$ p  I- P4 y
    PfDeleteInterface(hInterface);
- |. n9 u! z/ C4 A: X: U    return 0;. h7 T+ G+ G/ d
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-12-15 15:10 , Processed in 0.018768 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表