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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。1 w5 d& ]6 i/ q0 x
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593
/ A, v. u1 ?; N7 H/*/ ^# `, f8 Z! z. J
利用操作系统提供的API编写防火墙.  l! M- {2 N1 p  u9 G9 m
该程序涉及到的API说明请访问微软的MSDN Library4 B: H* y# w% z9 T- l
代码在C++ Builder 5编译通过* K2 i0 B6 N5 v' f- u$ k. p3 E1 h/ U
如果您想和我交流请email:zzwinner@163.com
: e. k; |  w- ]3 H3 u& R*/4 D+ D' }! ~0 T7 Y8 i
#pragma hdrstop3 {+ _1 ?* D% U& u
#include "windows.h") f1 x: a5 o) Y& R
#include "Fltdefs.h"
! e2 h, N; [6 J1 w7 Z4 _; g; [. `5 P// 需要加载"iphlpapi.lib"
0 X( F8 j! s# l3 @# b8 d7 c4 Q//---------------------------------------------------------------------------
1 O: P+ T9 `1 V: p+ d, j3 M2 y& t
0 o  p+ j% q& ~, I# F; g/ K#pragma argsused
; Z4 l4 K$ C; \; X6 ~int main(int argc, char* argv[])
( K: C6 V; a, V7 x$ h4 p1 }{! d$ {  d6 |+ [7 h* k
    // 一个创建网络包过滤接口
8 v: B* n% x7 a1 T    INTERFACE_HANDLE hInterface;! e8 ^! r+ ^+ N, b" D; R& j
    PfCreateInterface(0,
* u% V0 j+ l  o3 s! k& ~                     PF_ACTION_DROP,//PF_ACTION_FORWARD,: F! M! |. `# X8 C% G- U( A1 N
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
/ I" Y( S, ^! b, e: q2 j! a2 N                     FALSE,
4 D9 z9 V9 ?! _% Y                     TRUE,
' w$ O. d4 `- R0 g! u                     &hInterface);
9 A7 i* ]( T4 U' j" Z2 J0 j: k( y" R% P4 D
    // 绑定需要网络包过滤的IP地址
- b+ Z% i. {4 b: c9 T7 K# r) U$ ~3 g    BYTE localIp[] = {192,168,0,2};
1 t3 S" V; d8 J    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
  L, I* u  v9 }- |( J8 u    // 现在我们开始过滤HTTP协议的的接口. G5 U8 x, A5 i
    FILTER_HANDLE fHandle;
* d* V0 `/ w( I    // 填充过滤包的规则结构  D1 o$ ?" a$ D8 g# f
    PF_FILTER_DESCRIPTOR inFilter;
# k, m. ~. k2 L0 U    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值3 b4 b, h9 b# H2 S' B0 P. `6 q
    inFilter.dwRule = 0; //一直添这个值, s1 \  ~3 O! F. X0 E, r; ]5 T
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址+ n/ y2 [% P: r+ h/ Q3 @
    inFilter.SrcAddr = localIp; //设置本地IP地址- U4 A0 H/ m! u) v" q) U9 n3 F
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码2 L  t( U& `& D5 |) z# D
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
& h- |  `6 h& }8 N  |    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;3 z0 v# X! M  \( {& X5 w
    inFilter.DstAddr = 0; //任意目标地址. n- a+ u: Y& y' `/ \, q: \2 A* b
    inFilter.DstMask = 0;) O+ h# l0 r, }. D7 |
    inFilter.wDstPort = 80; //目标端口 80(http 服务)
, [. y8 u" W6 P% H% @    inFilter.wDstPortHighRange = 80;1 G/ G- B- ?4 Y- q1 {
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
5 z& S9 Y0 ]; c* l, ^% G& l    // 加入一个过滤接口/ `2 f  h2 V4 O6 ~# _; Q
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);2 `( O( C2 c  ^" j: Q
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
6 E& Q0 h- e  S7 S! F4 p    // 移除过滤接口
& q' E, N4 n8 P    PfRemoveFilterHandles(hInterface, 1, &fHandle);: ]+ X; G# ~' \# q6 [  d) s  a
    PfUnBindInterface(hInterface);
$ h* ^7 z( {) c) k    PfDeleteInterface(hInterface);% I6 p5 I3 }: i/ @
    return 0;0 a! m8 u, P: r" R# v9 ?
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:19 , Processed in 0.020181 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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