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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。8 T7 B/ g2 _1 Q" w3 B: n% T
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593
1 N8 i4 U& ~$ u3 I1 F/*2 k+ o$ g! ?( v/ ^
利用操作系统提供的API编写防火墙.9 R4 I" e% E3 J$ z1 U( P% L. H
该程序涉及到的API说明请访问微软的MSDN Library
8 p2 y- v- o- f2 k! C! n代码在C++ Builder 5编译通过
$ w+ s5 C5 }0 }& `如果您想和我交流请email:zzwinner@163.com
( T( h% @; c. X( ^/ }+ U. w" E*/( |: i; Q0 X/ f- d' c
#pragma hdrstop/ m9 Y5 q2 A! `" I6 v1 p1 r( K; c
#include "windows.h"# L) W4 p( L1 S8 L" A& t
#include "Fltdefs.h"
$ Q) e( F, P( W// 需要加载"iphlpapi.lib"" P- I; j' v( o; ?
//---------------------------------------------------------------------------/ X/ O* J  d- g0 F( z

. w, I5 D% a3 y: O0 A# S#pragma argsused
: ?* o: C0 K3 T) g" y9 Oint main(int argc, char* argv[])
2 ?" t$ S7 F- l. R: s! e; B& w1 B{
, g/ Q" r: O/ }/ F) r    // 一个创建网络包过滤接口+ e( ^! {6 @# \! H9 Q
    INTERFACE_HANDLE hInterface;
/ O# [2 |4 L# P, }, V) Z& G    PfCreateInterface(0, . \5 U( U/ ^" c: L- ~1 Y
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,- P- E5 r4 Y% I2 p# n. N% U
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
1 g* l( O+ k3 k7 q% F                     FALSE,
9 D) @7 s4 _4 W2 c8 g- |                     TRUE,
( }$ Z1 ^% R, K                     &hInterface);1 G5 j8 `$ ?4 N0 V* k

, p5 _! }) ?2 d    // 绑定需要网络包过滤的IP地址
' Z, Q8 F2 U: o/ P    BYTE localIp[] = {192,168,0,2};0 D2 i7 G: h2 @  T
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
0 r  O" V; ~. j) x    // 现在我们开始过滤HTTP协议的的接口: E3 A( g# S+ Z) q: V3 G! ^& J
    FILTER_HANDLE fHandle;
+ Y! [/ _* i& w) `1 r( j    // 填充过滤包的规则结构
2 y; v' p3 ?$ j2 ]; C    PF_FILTER_DESCRIPTOR inFilter;
) `" F3 z9 Y  `* X( D    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
! A$ k& d/ A. ]# q3 b2 @, m2 h    inFilter.dwRule = 0; //一直添这个值
7 f6 Z2 `2 ]" D4 a4 W# G    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
  E) P* i! E( D: `5 g( R& `    inFilter.SrcAddr = localIp; //设置本地IP地址
8 y0 ~- \7 |9 e& ?    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
2 ^4 ]7 f1 N) b    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
/ [# A% H. ?& L; g9 V+ b    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;' j  a/ R( a9 e- I" z6 q; }
    inFilter.DstAddr = 0; //任意目标地址$ i5 K$ a) E$ w5 x/ H8 P8 t7 V
    inFilter.DstMask = 0;1 `5 O4 b, k( F
    inFilter.wDstPort = 80; //目标端口 80(http 服务)4 A# T& S" Q# c+ M
    inFilter.wDstPortHighRange = 80;% z7 E0 z! s' B  ^' h9 t
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
& g+ m. X5 `8 K/ w8 C    // 加入一个过滤接口
; S& X# c- l/ H/ y    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
% ~- W! n2 i5 i) R6 q$ k    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
7 i% X# L; G3 G: _' @6 X    // 移除过滤接口
5 a3 x* u: I5 ]  l. B6 W4 z$ S    PfRemoveFilterHandles(hInterface, 1, &fHandle);* c- J8 o, ^/ q" c
    PfUnBindInterface(hInterface);% p1 b. B' y; m1 p
    PfDeleteInterface(hInterface);
% I- B$ ?$ L' z( z1 ~    return 0;) [- e! u( D8 V* q2 F( I( e! g
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-20 11:23 , Processed in 0.035444 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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