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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。6 X. r3 M  B: q" u' Q/ ]
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593  {6 {8 n4 J9 y8 t- t
/*
- B+ x3 @! y/ ^3 ]6 z利用操作系统提供的API编写防火墙.) O9 T& r3 R" s% G
该程序涉及到的API说明请访问微软的MSDN Library) ^( a' H* B. L9 }  ?) R$ Q/ w: w
代码在C++ Builder 5编译通过8 U$ T( J+ R1 ~6 S2 A* o
如果您想和我交流请email:zzwinner@163.com
' g" {+ e1 w( L) F' J8 Y*/
2 z" l3 a* `" k( L6 D#pragma hdrstop
6 _7 h1 o( ~2 N  L2 T! C#include "windows.h"
8 D, }. V8 ?8 N' f#include "Fltdefs.h"7 x' t2 f5 O+ y8 q& N
// 需要加载"iphlpapi.lib"( D  C/ r$ v1 s0 V/ O) r$ N: ~* i
//---------------------------------------------------------------------------% s# A8 P- o& \3 _. [5 k7 m4 d
  M) x4 }3 j1 Y* i5 D( {
#pragma argsused
3 u+ V" y/ S4 `$ t8 y/ mint main(int argc, char* argv[])
+ b; W  a8 t) k& x6 Q% b+ T{
5 ~- Z( n6 `# C    // 一个创建网络包过滤接口; d+ o, I4 q7 S1 G; Y
    INTERFACE_HANDLE hInterface;6 N- n5 X) d" ?6 ~6 t
    PfCreateInterface(0,
) L" `3 K: R4 T, }' `4 d                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
7 `' g# p3 h! B( f! t  H0 ?. x                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
$ r4 q8 B5 p# e  P/ d% i                     FALSE,
( i5 G7 r' r. \( D                     TRUE,
* Q  J. E% r9 f+ ?                     &hInterface);$ X5 s+ z0 C( K6 x" A2 i6 L' Z

( m/ w  D/ d3 N: ?8 Y    // 绑定需要网络包过滤的IP地址) R/ {7 @3 g6 T2 R
    BYTE localIp[] = {192,168,0,2};( ]/ e6 [: o* ^* b# A2 N
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);: B8 f% [) k. Q/ Y8 K7 V% g
    // 现在我们开始过滤HTTP协议的的接口- m$ {% b2 m- b" a' c$ B% j
    FILTER_HANDLE fHandle;+ b" f8 K2 ~4 Q; r3 s
    // 填充过滤包的规则结构1 q% c; U( c" \0 w- x5 u
    PF_FILTER_DESCRIPTOR inFilter;
9 K. z7 Z0 V' J) w4 m4 {/ v    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
) @8 ~$ S+ \1 @$ g, W1 ?! b    inFilter.dwRule = 0; //一直添这个值1 M, P) F+ b% s% \; \: s( F
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址) ]1 ~. n- p* A6 u; o
    inFilter.SrcAddr = localIp; //设置本地IP地址! l7 ]* {1 p. x/ k6 d# P
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码$ f0 c, z" S( v* _/ }9 {
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
, H1 c  e8 k/ \* T1 C    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
/ H6 M7 {* @) h7 {    inFilter.DstAddr = 0; //任意目标地址
, m4 i: m0 k, k7 {    inFilter.DstMask = 0;
! @4 b6 A  R( N    inFilter.wDstPort = 80; //目标端口 80(http 服务)
+ \3 o% j! t% M: H1 i" w    inFilter.wDstPortHighRange = 80;
% d9 b+ `4 J8 q7 P2 a% O    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议3 A+ k' P+ C' A( V. l+ C; Z
    // 加入一个过滤接口0 c* V' @) N6 i
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);# p! h2 m2 K$ Q6 a4 z/ ]
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)6 {! G! ]) u" k9 L; ]: R$ p' p
    // 移除过滤接口- z+ W" T" p1 o( ~" l
    PfRemoveFilterHandles(hInterface, 1, &fHandle);& u0 B. U! o% X# S6 l- A
    PfUnBindInterface(hInterface);) b" ]6 |: |4 c" I5 \
    PfDeleteInterface(hInterface);% {5 I( Y4 D4 w2 ^  \. i
    return 0;
# ~2 m0 k! m$ W/ f* n) O$ [8 y9 h}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 06:52 , Processed in 0.015250 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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