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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
7 g. P+ ^6 B' w; N' J欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593; z. W  }# p6 ?) u8 V
/*5 f' X7 q+ B- G7 O( E, m% E
利用操作系统提供的API编写防火墙.! S) T$ Q' F' ~
该程序涉及到的API说明请访问微软的MSDN Library
& E4 M* T- O2 l0 `6 u1 B! l代码在C++ Builder 5编译通过% W0 j6 G, ~- A
如果您想和我交流请email:zzwinner@163.com
6 z# U! n$ H1 E/ R! \  V*/
5 l+ L* M% Q2 r7 t+ R0 t#pragma hdrstop
) ]0 y; ~2 U- P. a#include "windows.h"
, l9 o% z+ N( R( d/ E4 |4 g9 X! x$ h#include "Fltdefs.h": c# C/ R+ I5 S- j# e, Z7 o
// 需要加载"iphlpapi.lib"
  R& D6 X1 N/ c. z//---------------------------------------------------------------------------
, [9 ?$ ?) D' h' _  g5 Y& G/ p$ ^) g0 A0 y
#pragma argsused2 f) r$ T' E  |" L
int main(int argc, char* argv[])- `; _: i3 G0 L6 K8 A% G* ?
{5 r/ ~( |! F1 R9 X
    // 一个创建网络包过滤接口
  E+ v* w" F; m  _7 u  z3 `    INTERFACE_HANDLE hInterface;& _) a2 U; J0 }' u* o
    PfCreateInterface(0, 4 A) v4 X8 b  G6 ]4 f, g
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
6 @) ^. N( `! Z7 w                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
8 G' U/ l, ]  R# U) L. i7 \8 I) o                     FALSE,
" s  q2 P6 }3 ]/ R: \                     TRUE,
4 x+ m" S4 P* g0 I6 _* o4 G2 q                     &hInterface);
/ _0 W& x/ m/ V. _- {
# v- b/ e4 M  [- ]2 F0 t    // 绑定需要网络包过滤的IP地址# }6 R( W: u" ~# Q
    BYTE localIp[] = {192,168,0,2};3 _* W) d2 a& r+ z
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
8 O0 d8 ]  F9 l2 v    // 现在我们开始过滤HTTP协议的的接口: f1 ^+ H* z/ l9 m
    FILTER_HANDLE fHandle;
1 h1 L) V! |) o    // 填充过滤包的规则结构$ k7 ?' j9 Z/ K3 R0 t
    PF_FILTER_DESCRIPTOR inFilter;
: }8 s: U  a6 z8 p3 f6 j, {$ M    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
4 R9 M7 k+ m7 O' _$ s! V    inFilter.dwRule = 0; //一直添这个值3 B# m" D8 E, l5 B( c; ^1 P
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址. o* {& h! w9 f8 X
    inFilter.SrcAddr = localIp; //设置本地IP地址
3 \& V1 a# L+ k1 _8 z0 x    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
4 Y$ Y9 @6 X# F9 g" t    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口5 a9 F+ \- F/ o
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
: v# @, j9 K3 |. o    inFilter.DstAddr = 0; //任意目标地址
/ o3 [4 A9 a3 w/ y    inFilter.DstMask = 0;5 m- `/ G+ |) n
    inFilter.wDstPort = 80; //目标端口 80(http 服务)  B- d1 x2 e4 f# Y" ]( U) ?% M
    inFilter.wDstPortHighRange = 80;
7 z% j6 q. Y0 q: P    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议0 j6 P, ?' p/ B* b( a" [- D
    // 加入一个过滤接口
) Y! B/ N+ ~  ?( J9 a. k    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
' `3 y+ l* T7 ?, @2 D    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)" Y; P: j; H" D1 M7 z8 Q6 j0 n9 J
    // 移除过滤接口- T' Q: \2 q9 L) n  ]
    PfRemoveFilterHandles(hInterface, 1, &fHandle);: p9 z4 U* t5 f4 b3 J, g
    PfUnBindInterface(hInterface);# t* ?/ F$ n  g- [* g: m3 b' p
    PfDeleteInterface(hInterface);9 A, a- H# I+ F3 [9 @/ ?
    return 0;, |, o7 O: C% Y
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 09:18 , Processed in 0.016849 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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