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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。) Y6 v; k5 X* H8 O/ W. p
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593
' ?3 G; L, ^& {6 u, \0 Q" c/ j* M9 O/*( ~5 k7 P" H( H+ H% {
利用操作系统提供的API编写防火墙.
9 K9 e# j2 }3 }  d  I该程序涉及到的API说明请访问微软的MSDN Library
+ F/ o" d5 N, g& u! S% {, e" S: p代码在C++ Builder 5编译通过1 g1 K! u0 D6 d/ z
如果您想和我交流请email:zzwinner@163.com
4 c3 F& {4 M7 J5 A! A! S*/) Z0 ?% O2 [# r3 Y" c; P5 s
#pragma hdrstop
3 p4 O7 C' ]4 A4 `#include "windows.h"
% s: c& q" P8 k4 e3 H; [9 ^- T#include "Fltdefs.h"
  L  W# t7 b3 V4 d" c6 J& A// 需要加载"iphlpapi.lib"6 C8 _  s* R& A! S8 |- w0 w
//---------------------------------------------------------------------------
$ @# O* Z/ y1 ~
8 N, i- ?; H5 h+ x#pragma argsused/ o: C9 y) f' O; [# ^0 h% l
int main(int argc, char* argv[])( y3 b8 E8 j) x9 V8 N' n1 M. Z
{
7 g6 R% e/ ?" ]' _4 ^* {5 T    // 一个创建网络包过滤接口" P- c0 i0 p: g( Q) O0 v; v
    INTERFACE_HANDLE hInterface;
0 |7 ?; `* \: M$ s    PfCreateInterface(0, ' q) A5 N7 @! m) L$ Q
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
" Z; V+ I" r: p+ ]4 \  u) Z                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
- n9 s$ ^3 o, _                     FALSE, " a2 y0 g1 A! \7 }
                     TRUE, 6 `6 _+ P2 [% ^( R3 r
                     &hInterface);; n/ h( m, H/ ^* _. X, m/ C& Q6 C+ l
- Z4 h( w, _; o* n
    // 绑定需要网络包过滤的IP地址& n4 t* |/ M$ e+ y8 k6 c/ N
    BYTE localIp[] = {192,168,0,2};6 h! ], h) q: N
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
7 d5 P3 r; c7 T8 ?5 H" C' ^, v    // 现在我们开始过滤HTTP协议的的接口
2 F0 {8 Y( d7 ~) v    FILTER_HANDLE fHandle;: r* g8 J+ J' \& r. V7 @  ]
    // 填充过滤包的规则结构
$ C. a( V$ W! g& G8 X    PF_FILTER_DESCRIPTOR inFilter;
6 R2 z" Z$ |- F3 T& D- w, e    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
' ^' s! z3 X- X. R' x; V3 a; K    inFilter.dwRule = 0; //一直添这个值
6 [3 Y; R* X$ R% X$ u    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
3 ~. b  ?; X0 N+ K% _    inFilter.SrcAddr = localIp; //设置本地IP地址
1 Y) B; C4 _0 R. z    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码& _  w( s1 I$ h) F# C
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
1 Z" p8 L: F  V, n    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
. B7 j( r2 L5 U3 `3 L) G! i# _( n) C    inFilter.DstAddr = 0; //任意目标地址
$ m* W8 R: m! z& ~6 M) H    inFilter.DstMask = 0;
# f+ S* q; O6 z9 j% w2 E& G; m+ Y    inFilter.wDstPort = 80; //目标端口 80(http 服务)0 f  y  y% _; v2 b. Y' q  }7 ?
    inFilter.wDstPortHighRange = 80;" O0 m3 N2 C; E# s% i
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
5 y/ {5 Z$ t: Z- [/ O- D4 d    // 加入一个过滤接口5 q9 p2 i  w% j# O8 A
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);: \( w! v' S2 W  i/ N& b) H
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
) P' c: f* M) g% _; F    // 移除过滤接口) P$ `, F2 }3 Z$ o" g+ O, K
    PfRemoveFilterHandles(hInterface, 1, &fHandle);  l$ e2 T$ N' A9 X, b! G
    PfUnBindInterface(hInterface);
$ B8 T9 j; `& E$ d  P) Q    PfDeleteInterface(hInterface);
; _$ r: y/ T; @0 g    return 0;
9 C9 ]# A0 m; s8 S+ m& K}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 01:43 , Processed in 0.036414 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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