找回密码
 注册
查看: 4464|回复: 0

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。& d$ _% ^0 F# c. j7 u: M, `
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593. g9 k! y# |0 U7 N- S9 x
/*: ]4 o- B7 z- k' `2 A
利用操作系统提供的API编写防火墙.
$ q3 b# G) E! }4 `, P该程序涉及到的API说明请访问微软的MSDN Library; {* l6 c* g# U" Q% p9 y) h
代码在C++ Builder 5编译通过
' G, L/ d" o& g; z如果您想和我交流请email:zzwinner@163.com
% i3 j& k7 D/ S) x' f; i# }& A*/# k; e' b7 [/ A# N8 B5 H; {" C
#pragma hdrstop
, l1 r* r0 h2 w( G3 i6 x9 N& `#include "windows.h"2 J. n2 O# E' h& ?- C8 E
#include "Fltdefs.h"
; f$ }5 J( Z0 @; L// 需要加载"iphlpapi.lib"0 u+ Y0 `) A4 o+ c% C4 q8 ~
//---------------------------------------------------------------------------6 F6 s5 J4 j; n
) x3 e: d; E( A) w% E
#pragma argsused9 ^& M! J' c7 T" _0 T
int main(int argc, char* argv[])
6 D( B" K8 C1 H) O8 _" k{* d- w6 c" w3 m$ z" x# W% R
    // 一个创建网络包过滤接口- b0 E% Z# h, O
    INTERFACE_HANDLE hInterface;
2 j. I# Y" B% b9 h# e    PfCreateInterface(0,
$ p0 g% B. [* E7 m                     PF_ACTION_DROP,//PF_ACTION_FORWARD,' _# A# h  z) V# v- f. j
                     PF_ACTION_DROP,//PF_ACTION_FORWARD, + f- o0 c% D0 l2 }6 @4 X2 I" i
                     FALSE,
4 E/ ]# _; @+ i. N6 {                     TRUE,
6 b) ~. n% v3 ~: x! Q& Q                     &hInterface);
  ^1 G8 b7 m& p
& ]1 a0 W3 N6 |% w4 z    // 绑定需要网络包过滤的IP地址
4 s' i; R+ {9 n/ Y6 r    BYTE localIp[] = {192,168,0,2};$ q5 d# o9 n* t' w$ `' A
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
. P& ^  S+ j" H+ ?+ {% D/ C4 v) B: }    // 现在我们开始过滤HTTP协议的的接口
9 B1 B& G6 o, F) U    FILTER_HANDLE fHandle;
$ ]) r- l6 ^3 g: v& p8 S; W0 a    // 填充过滤包的规则结构3 X0 x0 c$ B; p
    PF_FILTER_DESCRIPTOR inFilter;
2 o$ N6 w( N/ H& d* |- G7 }2 K    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值3 r$ ?7 m9 K  h# v& X3 Y% D* F! w1 U
    inFilter.dwRule = 0; //一直添这个值9 S! p& ~. u$ ]+ g
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址$ q! l7 `# u2 o2 S
    inFilter.SrcAddr = localIp; //设置本地IP地址
& J/ W8 L9 P, h  A1 p4 n0 ~. c/ @    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
( o( p$ q/ O& z" n) v    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
% O  K& P6 k0 E3 |  I    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
! s! Y" L2 y" h5 B& U5 s% V( v5 b    inFilter.DstAddr = 0; //任意目标地址
" w/ w7 X& i1 ]    inFilter.DstMask = 0;+ U& }5 Y7 a% ]9 I. \3 Y) _
    inFilter.wDstPort = 80; //目标端口 80(http 服务)* ^# f9 J0 ^- z: L; R1 M
    inFilter.wDstPortHighRange = 80;
6 p5 z" B7 U4 }: z: T    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议& @  w4 X/ a" b0 N9 i5 ^) `' H
    // 加入一个过滤接口
2 A: T* Q4 r  E: x    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);, ^5 L# [( L5 H! z" m
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)% d! N/ |6 T; U
    // 移除过滤接口
4 a6 t2 [$ l, }* G5 g: b  H5 {    PfRemoveFilterHandles(hInterface, 1, &fHandle);
' `* L# f; K0 ]6 c    PfUnBindInterface(hInterface);6 V9 _" m+ L' s0 J* F
    PfDeleteInterface(hInterface);3 r0 B% _% r' d9 w4 P% Z* Y- i5 K
    return 0;: l& M/ E$ W4 A; O7 ^3 Z6 i
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 04:24 , Processed in 0.017363 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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