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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
4 |6 y% }' A, {欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=5932 X/ j* ^5 x2 x4 t5 ?& g( ~
/*, U# y, U% G: ~0 ^
利用操作系统提供的API编写防火墙., q8 L/ m- N7 [5 t. s( O
该程序涉及到的API说明请访问微软的MSDN Library
; `2 h. [% b/ g8 `代码在C++ Builder 5编译通过
- a9 y  J& A! U5 A# ?- `如果您想和我交流请email:zzwinner@163.com
! G' D: n4 I3 [+ |; w*/
( k1 x) H( _3 a) ]) \; A8 w#pragma hdrstop8 Z; V$ L! {7 L( H2 r( g
#include "windows.h"
6 Q7 F2 V2 d# [0 n* C! h. h; v#include "Fltdefs.h"; S# S- s% J% V. }5 i* x, f
// 需要加载"iphlpapi.lib"( z9 ^# y/ J1 m9 v
//---------------------------------------------------------------------------) \* v" ~- q$ u% t- {2 l6 d

6 L% r% \$ m2 T& c#pragma argsused
7 t' q! h0 \/ Y" q, c7 Uint main(int argc, char* argv[])' p( I9 @# |0 D6 ]
{2 J5 V/ B- T" T( N% o
    // 一个创建网络包过滤接口
9 Y9 W) z3 o3 t3 T    INTERFACE_HANDLE hInterface;# I  z0 Q- P! g3 a8 a0 @3 _
    PfCreateInterface(0, ' O5 c. r2 O" _9 z
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
: ?# M6 T, P! o+ x                     PF_ACTION_DROP,//PF_ACTION_FORWARD, . }: J6 O- c# n' C! q% y+ k
                     FALSE,
7 Y1 i/ N0 f: V* ]; A8 ]* J                     TRUE,
2 r; B$ ]3 [; S  N5 j7 @3 g5 W5 y, c+ [                     &hInterface);
5 E# J, N& m9 a1 S/ a" Y! f$ B$ p9 O2 V
    // 绑定需要网络包过滤的IP地址
/ }. C- w6 t. s/ Y3 q3 R    BYTE localIp[] = {192,168,0,2};5 H* B' t6 w9 n8 y
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
5 Q0 N  y8 A& Q, ?& i- e1 i    // 现在我们开始过滤HTTP协议的的接口
( v$ r: j7 d! X! E    FILTER_HANDLE fHandle;
2 r* E4 D* P+ u% q+ ^    // 填充过滤包的规则结构  r! v- P5 z  v  C2 @9 i/ T! d
    PF_FILTER_DESCRIPTOR inFilter;$ H  y7 Z. c4 e  A/ i+ \8 q
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
0 _! k4 u5 O/ t6 ]5 ~    inFilter.dwRule = 0; //一直添这个值
3 ]& h9 V6 h* R' Q1 z, H* R- O7 S    inFilter.pfatType = PF_IPV4; //用 ipV4 地址) }4 C) @, h# Y$ |
    inFilter.SrcAddr = localIp; //设置本地IP地址
  {. U) F! H. `3 s3 F9 c    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码7 R" P. e. T- y
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口# C& O6 ?4 N4 b+ c  M1 f7 U! N
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;' _# \, e8 z" _/ {% x
    inFilter.DstAddr = 0; //任意目标地址4 u, Q; Y5 q% {3 l, i
    inFilter.DstMask = 0;
4 [) |  P0 u4 K4 R* u& E    inFilter.wDstPort = 80; //目标端口 80(http 服务)
! m: Q4 e1 X- u: m    inFilter.wDstPortHighRange = 80;+ g5 W) }- x0 J
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
7 W- M6 r7 ?  p% i    // 加入一个过滤接口6 u6 I- u2 F% p) Q+ b
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
) V# o& }2 |, n3 ]    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
7 s/ V6 z9 ?; P    // 移除过滤接口
) ?' U/ |% \0 v    PfRemoveFilterHandles(hInterface, 1, &fHandle);& b2 d2 k& n# w5 q9 @6 ]' g- }# o
    PfUnBindInterface(hInterface);
) g) g3 r$ l$ M, Y+ M9 n    PfDeleteInterface(hInterface);! N2 c& R9 F4 @; E7 ?2 g6 ^* L) D* a
    return 0;
+ C% N# \6 ~: c+ [+ g/ ?}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 09:01 , Processed in 0.017352 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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