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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
3 r6 b5 E$ k* \& {) s欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=5934 U1 a' P$ L! M- o  v! q
/** G" K$ [- k0 E
利用操作系统提供的API编写防火墙.
! c% T% s: ~- H- Z2 r, H# S该程序涉及到的API说明请访问微软的MSDN Library
7 v. ~) Q" V' u. O0 @代码在C++ Builder 5编译通过+ T6 g2 v- I: M+ ~* z! \+ J
如果您想和我交流请email:zzwinner@163.com
- V% Q* W+ p8 C; P/ L+ x*/
0 O6 q* r5 f7 V6 {+ _( F( \#pragma hdrstop
& [+ A: Z( E0 J0 L& |3 b#include "windows.h"- H, }4 x3 X7 p$ e
#include "Fltdefs.h"$ x7 @; a- _; R  ?  ?: c
// 需要加载"iphlpapi.lib"
9 d5 `# M  {0 w( D( [//---------------------------------------------------------------------------. B: W* {/ U" @$ V& ^, v: ?
5 }" c5 L2 \8 P
#pragma argsused  `) R6 J+ K: o3 |$ f: b) t
int main(int argc, char* argv[])) V& A+ j2 ]7 K) H
{
4 k, a* e  v  s, ?8 G! T    // 一个创建网络包过滤接口
7 T3 s6 B8 }, {3 R. C5 X$ I    INTERFACE_HANDLE hInterface;
3 s* Y5 P9 W% K& |* X9 P) |" x+ l9 j    PfCreateInterface(0, , Z. g- l% V! }: j5 R0 ^
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,$ S' [9 Q' a& X
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
$ }4 i$ t+ y4 i& L7 V                     FALSE, " C4 l# T6 _3 N1 T7 _
                     TRUE, & B& U5 v: f0 g! Z( e
                     &hInterface);
( [  U" K2 S! H% J3 _0 f
& w8 m: N. L+ g" B# i* @    // 绑定需要网络包过滤的IP地址
1 |; H3 ^# a4 a6 p' s# w  W3 f    BYTE localIp[] = {192,168,0,2};
& }% u# p2 [9 p2 L    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
, E% H% c2 p2 F3 x/ f+ Y; I9 j    // 现在我们开始过滤HTTP协议的的接口+ k5 b- {5 W9 A9 |  P( w5 Q! o
    FILTER_HANDLE fHandle;
8 U0 L% U1 j+ U: \    // 填充过滤包的规则结构" C+ S3 @+ O& z% h) k$ K
    PF_FILTER_DESCRIPTOR inFilter;9 V, `: Z! b6 T) J% v9 H
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值2 `; @* \+ Z; f( E
    inFilter.dwRule = 0; //一直添这个值
! f( e0 Q6 `9 I  J    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
% ^  t2 X9 F# E; M* t    inFilter.SrcAddr = localIp; //设置本地IP地址
" G" ^: \% u. c# K( X    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
- m/ Y* D& q# l1 ^' b    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口9 w; T" V. b& [( y" S4 Q
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
- ~1 g0 `% s3 ?& Q5 Q9 b' a    inFilter.DstAddr = 0; //任意目标地址4 c7 e5 x  A( t) ?; r
    inFilter.DstMask = 0;
! \" B, q* @6 L( g* m! O) d    inFilter.wDstPort = 80; //目标端口 80(http 服务)
0 V/ _2 n' H& j0 X    inFilter.wDstPortHighRange = 80;: N8 P% {* N0 k3 ?! M3 M" W- a0 w
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
/ ~) Z/ q: }' F    // 加入一个过滤接口9 z; k2 r3 T. J4 ?1 O' J
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
( H+ a5 M- m3 C: K0 U6 H    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
3 [# U/ x- v' _" {0 F7 m    // 移除过滤接口
/ z$ ^0 M+ W8 b1 C5 b( u    PfRemoveFilterHandles(hInterface, 1, &fHandle);+ |8 d" Z) N: T$ |5 s8 V/ x" _
    PfUnBindInterface(hInterface);& ~0 N& d# C$ i' P. w' |( y0 I
    PfDeleteInterface(hInterface);
" H  B  j. l7 u2 B3 S5 G    return 0;  F5 ~+ S- M! {) {7 i, ~% H  y
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-29 20:06 , Processed in 0.020622 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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