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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。( v% l0 ]9 J# b- u9 V
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593
; m; m# z  \$ u# M/*
. j6 ^, _$ L0 ^. T利用操作系统提供的API编写防火墙.' R, ~1 j' g6 a% O+ [7 A
该程序涉及到的API说明请访问微软的MSDN Library# q/ I3 g" r( @1 b
代码在C++ Builder 5编译通过
1 y' W. ]1 h# M. I( U6 _如果您想和我交流请email:zzwinner@163.com
0 q; u# t5 T0 c% @! Y; A9 q6 n! u*/
: g6 q" a7 p& n1 J+ T% y#pragma hdrstop
3 c. Y+ P- T$ ]$ R( A( x5 ]1 V#include "windows.h"
2 H! h( f1 ^2 m+ V- a9 q; u#include "Fltdefs.h"$ k# Y3 c; u* J. a5 C
// 需要加载"iphlpapi.lib"
, q5 p9 x8 J# m//---------------------------------------------------------------------------
# E( |: ~' U) y9 }/ q
/ ^* R) d0 K3 X4 J* Y1 l; W# _#pragma argsused
5 H5 s* a) n8 d1 r: ]2 d, [- p* \int main(int argc, char* argv[])5 v1 B4 r+ t5 ]. d2 r
{# a9 I. B8 T7 d. K' A& j* @/ f3 u
    // 一个创建网络包过滤接口. _7 t6 y/ e7 V9 A. x& i
    INTERFACE_HANDLE hInterface;6 F$ R8 i9 S# B6 l6 R# S* H
    PfCreateInterface(0, ; ~, P' {% C8 Q' i6 C" c2 M
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,3 k2 b9 p# C; Z* S
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
+ m+ z' y  E- K, e                     FALSE,   ^% o3 _/ J8 I
                     TRUE, 0 J3 X$ n; J9 a
                     &hInterface);
/ ~9 P: g4 \4 k- n( u4 g$ s/ J. q8 Z1 H" _# ]
    // 绑定需要网络包过滤的IP地址  [8 d" N) y0 _
    BYTE localIp[] = {192,168,0,2};/ g2 [: Q9 F& R
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);% m  V$ s- o9 R: y
    // 现在我们开始过滤HTTP协议的的接口2 p5 |! M( M# O
    FILTER_HANDLE fHandle;( t3 I% n0 p, ^8 X  B( I5 E1 Z
    // 填充过滤包的规则结构
$ U2 g6 B/ i3 P$ j    PF_FILTER_DESCRIPTOR inFilter;# ~- I" Z! K# d$ q
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
- J6 Q& V4 M% J. R8 Z: B3 Q+ K    inFilter.dwRule = 0; //一直添这个值0 {# o. I7 a1 k5 N+ u6 a: }. T* N
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
( Q$ w4 ?3 Y  v/ R$ W* A    inFilter.SrcAddr = localIp; //设置本地IP地址
5 _  P+ y, T7 a# p5 h7 x: U    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
! L+ K3 r2 a& R0 \. ~    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
) h! {8 r1 E) m9 G3 q    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
( Q9 W5 ?% `; ^! W" ~0 n( k% M    inFilter.DstAddr = 0; //任意目标地址
; H9 F, w6 b- Y3 M- A. f. p4 H2 Q    inFilter.DstMask = 0;3 O4 s% b: v6 Z& V
    inFilter.wDstPort = 80; //目标端口 80(http 服务)& K3 V( G' L5 h; K4 f+ a1 ?+ ?
    inFilter.wDstPortHighRange = 80;- t0 Q* g# x1 F
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
  G# C& q* S; c- f    // 加入一个过滤接口* ~9 I- T8 m( \$ x
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);" R* S; B3 d$ E  z( F2 e
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)% [5 x. {6 B/ L& H1 g9 I
    // 移除过滤接口
- \3 D3 _& O* [% T    PfRemoveFilterHandles(hInterface, 1, &fHandle);& s: p# \1 d# T' A
    PfUnBindInterface(hInterface);
( i- {- k2 b& R3 G4 U& j/ c    PfDeleteInterface(hInterface);
+ {2 _6 V( }9 T0 O    return 0;9 L+ Q' h" t3 A0 ~9 \
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 08:03 , Processed in 0.016892 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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