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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。7 I" l, R* W  |2 j" t5 x
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593" f9 ]7 T! L$ C: B4 x
/*
8 a. T5 @" X& V" ~6 Y! u利用操作系统提供的API编写防火墙.: _0 _7 a2 n" N
该程序涉及到的API说明请访问微软的MSDN Library  m- d& x2 W' a& o
代码在C++ Builder 5编译通过3 q' G4 h! p, E" F; M: N1 p$ G" d. R
如果您想和我交流请email:zzwinner@163.com
9 O2 h* e0 E6 @" g# I, X7 ]9 u*/: v0 S9 `! `  u8 h( A
#pragma hdrstop& V6 x- w( \/ l9 s
#include "windows.h"
" k6 M3 f9 b4 f9 {; f#include "Fltdefs.h"& F4 T- S' Q! ~+ U7 u4 n! h
// 需要加载"iphlpapi.lib"
' }- l& z, Q+ y! |6 a//---------------------------------------------------------------------------1 ]- J# E/ E; x+ w$ @9 I

) B, @- H  k/ K) L* ~#pragma argsused
5 |& @7 \; V  g+ y7 O+ Dint main(int argc, char* argv[])3 v: }. U% E9 ^8 M
{( \2 B0 U# l. \2 z! R
    // 一个创建网络包过滤接口
) G* H( m% l. @3 O- S    INTERFACE_HANDLE hInterface;% p2 Q% z+ s! \- J! A! d
    PfCreateInterface(0, 2 ^' T: o3 Q* e! B3 j
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
0 x1 G+ f. K  o1 q2 {6 M                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
+ M' o. G! c  H, H) @% h7 \0 p                     FALSE,
4 M+ n4 U& U1 y, q4 H; f6 k                     TRUE, , {9 _$ _% k! z
                     &hInterface);
3 \5 Q+ _# k1 b7 y
* ]. \" c) z5 W7 H7 j    // 绑定需要网络包过滤的IP地址
, e5 C" h* I) V1 _/ J    BYTE localIp[] = {192,168,0,2};
- h8 x- O% x0 y" ~: R* T4 a( ]    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
+ L7 a3 R/ e# u    // 现在我们开始过滤HTTP协议的的接口
# n9 t7 l" M5 P    FILTER_HANDLE fHandle;1 B% ^5 L' q3 d! I& F9 w9 Q, W
    // 填充过滤包的规则结构
! Y! n1 D# S: S! h    PF_FILTER_DESCRIPTOR inFilter;
' S, S1 w3 v1 S* c5 ~: \; m; Y    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
2 \6 i; H0 B& A5 A    inFilter.dwRule = 0; //一直添这个值" L5 L: s1 q3 Y- ^
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址, \: I3 ]9 S/ b: H; D( ^
    inFilter.SrcAddr = localIp; //设置本地IP地址# Z. g+ Y/ h  j. i
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码+ U3 `4 H( f2 }& W5 c9 }
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口6 i3 ]( X4 {$ X5 ^, p- {) B
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;9 |* w8 J8 p1 E) U
    inFilter.DstAddr = 0; //任意目标地址7 a9 T% f0 T2 m; f! q% ^9 k
    inFilter.DstMask = 0;. C8 K" g, [' m( I8 y/ K
    inFilter.wDstPort = 80; //目标端口 80(http 服务): @: c3 j; R5 K  W
    inFilter.wDstPortHighRange = 80;
$ G/ }- E& C4 a    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
, S% S) ^5 U! R/ _7 `    // 加入一个过滤接口
5 N! `' }( m" [    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);6 G8 D6 b% U  o6 L* T7 o  J
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
3 C3 N6 d8 Z) `    // 移除过滤接口* A: X2 D( ?1 Z  v4 S9 P. u3 M
    PfRemoveFilterHandles(hInterface, 1, &fHandle);
' F) |" v8 O) @2 N; e5 }( D4 `    PfUnBindInterface(hInterface);4 p- p& {' U% f, t. h4 C/ M
    PfDeleteInterface(hInterface);
9 X5 R- i$ @/ a4 H8 m    return 0;
) p+ O/ h, D3 M1 e0 H}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 08:57 , Processed in 0.019306 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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