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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。4 f6 |3 X: L# @1 V; ^# D
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593. ?) V, Q2 a* f/ t1 j# ^* R4 [; b
/*
8 t. B& o* O7 H利用操作系统提供的API编写防火墙.2 F4 }' n8 a0 X  M7 V$ E0 U
该程序涉及到的API说明请访问微软的MSDN Library
  B4 g( k; T" |  r" D# C: \9 W8 b代码在C++ Builder 5编译通过
& G5 [0 E) N% l! N0 q! Q2 V& n如果您想和我交流请email:zzwinner@163.com
" I  K; l. r+ R/ L/ Z5 l: ]7 H*/
6 W8 n7 U- p2 o4 a6 E#pragma hdrstop
$ O& i# x2 O0 s- f#include "windows.h": b& j4 H6 L5 N2 \3 k
#include "Fltdefs.h", {3 |! p0 T) w8 W+ s1 s4 m
// 需要加载"iphlpapi.lib". I- Y) Z: s# L4 M% E6 S$ j
//---------------------------------------------------------------------------2 P1 j3 e# U6 l' Y' P, u
2 z2 P4 i5 r6 w
#pragma argsused6 x" |  R- v0 V
int main(int argc, char* argv[])
) u/ J! G: v- ]& V% K; m; R6 T{
# z# F& n% H- O& Y/ ]    // 一个创建网络包过滤接口
2 u( j% i+ x* s  F0 A% i    INTERFACE_HANDLE hInterface;
; x' J9 Q; l# D# v  ~5 B! v* g    PfCreateInterface(0, : l6 J; `& u5 P/ t
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
! {2 E4 y% e, Q: v" z                     PF_ACTION_DROP,//PF_ACTION_FORWARD, . Q$ E. f5 \; @4 N8 |
                     FALSE,
" [8 z7 k  c5 [" z                     TRUE,
7 y# B( B6 m- t4 U* T4 E                     &hInterface);8 Q2 j2 `! w- A; \
; J$ T# r# Q7 n6 L3 M8 _& n) p
    // 绑定需要网络包过滤的IP地址) Z5 A) ?" ^$ r/ c; p) s9 R
    BYTE localIp[] = {192,168,0,2};3 T* J2 _0 t7 x& q1 F$ `" D
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);* A$ G+ v! P+ C; G0 o
    // 现在我们开始过滤HTTP协议的的接口
6 a7 u  o. @$ w1 @( n4 D  H2 K( g% h    FILTER_HANDLE fHandle;
4 ?1 c% }! c6 @1 @  ^! A. B    // 填充过滤包的规则结构
; g4 y8 J* B: Y# w" f    PF_FILTER_DESCRIPTOR inFilter;
" K& ~4 T5 s9 J& E    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值7 |5 o; j* I4 e; c  x' ~
    inFilter.dwRule = 0; //一直添这个值
) K$ }$ S/ u4 c6 y    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
7 N: I/ V6 V0 u  L& x' d* x: ]    inFilter.SrcAddr = localIp; //设置本地IP地址
& }& o* H! r$ {2 `9 m/ N    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码0 K, \; W6 }* a' t; d' p
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
' \2 x2 x" x' C7 ~- ?. U4 [# g    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;' I4 x% g3 N* W4 u+ N. s
    inFilter.DstAddr = 0; //任意目标地址9 \: z# K# @; \0 R5 }7 l$ M3 x9 ~" O
    inFilter.DstMask = 0;9 K3 u( k% U9 k  a$ Q0 N
    inFilter.wDstPort = 80; //目标端口 80(http 服务)( i+ ~, S0 l3 T2 G3 Y; ]
    inFilter.wDstPortHighRange = 80;+ Y; L: N* n. \% ]  L3 l' U
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
0 [5 h& q- h% J  m6 Z  M$ V    // 加入一个过滤接口/ _% }  m0 h. ?" p
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);% h% ]' w+ l6 M8 t
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)/ {1 B% |4 M& H2 E/ j9 n; `* N3 l
    // 移除过滤接口$ c& u  I; f/ F% `0 m
    PfRemoveFilterHandles(hInterface, 1, &fHandle);5 o5 m& l1 I1 u) B
    PfUnBindInterface(hInterface);
% j9 ~' o1 f* T+ `; G6 _    PfDeleteInterface(hInterface);
0 Q: D" m' o; S3 J: Q5 {- \0 t    return 0;* P+ F% b+ a  E
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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