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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。$ R7 I9 a" x! J: p; p1 }0 i) k
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593% O" p- L9 F+ ~5 @/ K" }) B9 l
/*
& m+ x7 d+ k* K5 X8 O8 ~; Z5 \. z利用操作系统提供的API编写防火墙.
/ u. L+ h8 v7 n/ q/ w. M* A9 J该程序涉及到的API说明请访问微软的MSDN Library
9 l2 X" m# Y" w- V$ m代码在C++ Builder 5编译通过
1 Q& H/ Y5 \6 X如果您想和我交流请email:zzwinner@163.com
1 D' w+ v) r1 e0 _*/* c$ K9 d6 M. c! E$ A
#pragma hdrstop
; i6 d' i! v! q7 o# e4 h6 g#include "windows.h"( K% q3 B, l9 }  e- E
#include "Fltdefs.h"
( b4 M$ a$ y4 x9 q! n// 需要加载"iphlpapi.lib", S' D! d$ I2 d0 w2 b6 z2 a* o
//---------------------------------------------------------------------------" ~; v+ N8 X! A6 u/ ~
! Z" Z8 C* ^+ V: @2 N3 k: Z) F
#pragma argsused# ?3 i# l9 G4 W- [- j* t
int main(int argc, char* argv[])
+ p9 _  }$ J, D' s" J9 D& h{2 N. \% H! N: G1 T
    // 一个创建网络包过滤接口) @" {6 c6 _3 Y% U. c
    INTERFACE_HANDLE hInterface;2 ^. P7 \; E4 i  R3 n
    PfCreateInterface(0,
+ e+ z6 c$ K% A- Y: |' J' k% e                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
( q8 L! d3 ^! N" }/ l; [- [2 x                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
2 C+ I: q0 X# T, m% R. J+ i4 }9 O                     FALSE, - }6 M" O! n+ z
                     TRUE, * {  ~& k, I- ?% X7 _/ u3 Z& p
                     &hInterface);
9 x: W) X" L6 T5 ?* M
, I) x; Q" G1 b+ ?    // 绑定需要网络包过滤的IP地址! Y+ s. y( x& }
    BYTE localIp[] = {192,168,0,2};
9 J0 t5 ^* O/ O2 k; z7 B    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
  K% |& r0 h& y3 i1 E    // 现在我们开始过滤HTTP协议的的接口
  d  R0 i# c! _9 l1 q2 [5 y9 n    FILTER_HANDLE fHandle;0 N0 ]; u) g* V/ V$ u6 J! }: I
    // 填充过滤包的规则结构
8 J7 ~: d# l& Z' |" }  j    PF_FILTER_DESCRIPTOR inFilter;5 P8 \) P" l1 p$ Q+ w% Q& Y1 y
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值" c! ?4 q2 j% V5 r5 `
    inFilter.dwRule = 0; //一直添这个值
8 L) C) F: h  N! t7 A0 m2 z    inFilter.pfatType = PF_IPV4; //用 ipV4 地址0 C# N+ ]9 V+ A3 P2 v2 i1 d& u
    inFilter.SrcAddr = localIp; //设置本地IP地址2 r( k! K  \/ \- C
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码9 x" l4 J0 w: A9 U9 V
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
, ~4 M+ d# `( a    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
5 t( G; K! ?* J7 Z- S) l    inFilter.DstAddr = 0; //任意目标地址) O- d( E7 ~0 W  Y2 R1 M
    inFilter.DstMask = 0;9 h! C: E; H( M8 V9 N
    inFilter.wDstPort = 80; //目标端口 80(http 服务)
+ \1 q! D3 u# ?# c" l    inFilter.wDstPortHighRange = 80;' t8 X( r$ `! u; l
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议: z* S2 M% p! ^1 }2 a/ F
    // 加入一个过滤接口7 s8 W: l0 H1 J
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);" q$ U6 ~4 _- r8 \5 Q0 h+ G7 W
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)& E( _  M% x5 ]- g( K3 j
    // 移除过滤接口9 ?6 w* N6 W, P
    PfRemoveFilterHandles(hInterface, 1, &fHandle);$ y& o* Q$ w: T4 k; u. _  Z
    PfUnBindInterface(hInterface);: a( R+ C$ \- V8 C
    PfDeleteInterface(hInterface);  j2 C5 w+ i6 f' O0 u+ y# J
    return 0;0 p( B/ B0 b% W, ^0 c$ ^# `( W
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 09:10 , Processed in 0.018642 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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