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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。5 x# C, u2 s4 O" K% R) @
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=5934 Z3 Q3 V7 o6 E* a
/*% Z, R: A" i$ ~- e! M6 _/ n' R
利用操作系统提供的API编写防火墙.: Z: Y0 U0 M) E/ @% @
该程序涉及到的API说明请访问微软的MSDN Library* E# x" `% l% A& F. p+ i
代码在C++ Builder 5编译通过
* g* x: b4 U0 L( O如果您想和我交流请email:zzwinner@163.com. o! `) u+ {; p" J
*/
# ?* C- Y5 W3 S! o& G1 u#pragma hdrstop* H7 W' @- X: ^# E$ x
#include "windows.h"7 Q0 _9 _7 S% L' f/ B) L
#include "Fltdefs.h"- J/ v9 d3 R) |8 E
// 需要加载"iphlpapi.lib"
" x/ T4 I- q0 H' G, ^7 Q# H( ?//---------------------------------------------------------------------------; ]7 f9 c$ W% i; N1 E+ b
- _1 t' ^6 L+ L
#pragma argsused
+ ?" m7 ^; a& [0 iint main(int argc, char* argv[])/ O" J0 X2 ^& H, G
{
1 \$ X+ |$ c: G$ |$ `5 t    // 一个创建网络包过滤接口5 R% ^8 T. v  A9 e2 e! \& D  o+ z8 N! s
    INTERFACE_HANDLE hInterface;
! z" l$ M" C* w) a( g    PfCreateInterface(0,
1 M* a! F. S& u. |: H                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
* A0 @+ \/ v+ n% Y                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
" {7 d5 Q* W6 g9 x1 \/ U4 N  z! w                     FALSE,
# l) d8 h2 s8 H- J                     TRUE,
* M& x* `+ {  z) ]/ E* s                     &hInterface);2 k' q* T6 n3 u: k1 Y

" y! P+ i, q- r' {; s    // 绑定需要网络包过滤的IP地址- Y8 N5 o  ?1 I3 J/ d3 ?: g
    BYTE localIp[] = {192,168,0,2};' o+ T: z1 j, f- B2 Y7 D$ p8 L
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
& n" {$ q% D1 k# ~" y9 O" Q    // 现在我们开始过滤HTTP协议的的接口0 o% M5 N2 O/ K/ M4 J3 I$ F  H' _1 L
    FILTER_HANDLE fHandle;0 d  S8 d. u8 |
    // 填充过滤包的规则结构
; K; U! N" ]  }. }  h$ o    PF_FILTER_DESCRIPTOR inFilter;
" W2 z& P# z0 u    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
0 v' o# ~# Q+ f( K    inFilter.dwRule = 0; //一直添这个值# I: N; b& E/ H. M. ]
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址/ ?* g8 l# n  G. C8 J) U
    inFilter.SrcAddr = localIp; //设置本地IP地址
6 D9 T& G  v; Q6 O; p( F$ g7 w    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
) v1 n9 V- q- W  O6 q0 Y    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口% g8 M' V5 D% x( t
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
0 }- g* t# G: u- p    inFilter.DstAddr = 0; //任意目标地址5 L. Q' x/ d5 ^. Z
    inFilter.DstMask = 0;# L  p! b! y: c) S2 V) m
    inFilter.wDstPort = 80; //目标端口 80(http 服务)! t! p1 {* {  |6 E
    inFilter.wDstPortHighRange = 80;
/ a+ }, @9 S) z" l) M4 d  k    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
2 ]: a- j1 h' F    // 加入一个过滤接口% D( ], q* ^3 e- u3 u
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
/ w* r" z- L/ u& Y    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
  ^# V% o0 B6 p- }    // 移除过滤接口) |! I% h0 |* E0 t2 o/ B+ i$ c
    PfRemoveFilterHandles(hInterface, 1, &fHandle);9 r7 ~2 q& w  M; j6 C/ U" N9 t$ w
    PfUnBindInterface(hInterface);% d' V( h0 ?( m" p5 S7 X; s
    PfDeleteInterface(hInterface);
7 v6 [. M- g' V  J( h( }  s    return 0;
6 ^8 c: e- Q  u% q}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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