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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
2 x/ E0 ]7 |3 L$ F" J欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593
- S9 s+ F6 C, f7 ^/*
4 s5 p7 B. y2 {/ _3 v1 r利用操作系统提供的API编写防火墙.
7 S$ g2 h+ T8 m( C该程序涉及到的API说明请访问微软的MSDN Library* e" Q3 Q' n, S5 I( X
代码在C++ Builder 5编译通过
$ ^+ ?& z; ]2 x0 j8 h如果您想和我交流请email:zzwinner@163.com
1 o+ B8 d, u! E3 k+ x; n*/
( E" |2 Y/ g; }' d5 J* T#pragma hdrstop
3 A! N7 O% R5 `+ L#include "windows.h"& }! f6 C2 J9 m! a/ \
#include "Fltdefs.h"
4 x+ M- U5 q7 {// 需要加载"iphlpapi.lib"8 y! B/ T! o; E# d
//---------------------------------------------------------------------------
' s" R7 y6 f' E# R& P3 M+ }% Q6 z' j8 C, G+ z( A9 e! ~: q# G
#pragma argsused; E+ E2 c, J! {
int main(int argc, char* argv[])  ?8 q$ O6 ^+ T+ l1 `3 |
{
! ?3 ^, s0 d, J9 N3 ]6 I    // 一个创建网络包过滤接口
% O2 F1 _+ O% B4 M; ?# g    INTERFACE_HANDLE hInterface;
5 @0 S' B+ d* j3 g    PfCreateInterface(0,
# B* T8 R) ~! p                     PF_ACTION_DROP,//PF_ACTION_FORWARD,% Y$ d( ^' Z# o) V5 T" Z/ t, @
                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
  [$ K8 T  @+ c* e                     FALSE,
# ]1 M: g( L: }+ `/ N- ~1 E                     TRUE, $ g3 A: k4 b. J6 g3 c5 `: g
                     &hInterface);4 ?. V& }; H/ L" X; W& S& u

. O: X& j- ?  }$ s0 w2 E7 u: b    // 绑定需要网络包过滤的IP地址3 x. |" n  C' {2 `9 y! o
    BYTE localIp[] = {192,168,0,2};# y+ Q5 {- x- X2 Z' x% f
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
' z9 Z3 P( @- S0 Z( Y9 Q    // 现在我们开始过滤HTTP协议的的接口" A% O& C& S1 P6 c2 T% M
    FILTER_HANDLE fHandle;
, e0 T7 a* Q. |7 k" d    // 填充过滤包的规则结构
6 y1 i& h) W8 C3 A7 @! z: H    PF_FILTER_DESCRIPTOR inFilter;8 v3 t* i! r% Z
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值# J5 ], @9 W0 I: F/ @" E
    inFilter.dwRule = 0; //一直添这个值  T2 l* Z# q$ y0 i, i
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
0 \" |/ Q3 d6 x' w- B) b    inFilter.SrcAddr = localIp; //设置本地IP地址; X! t$ P% G+ A* Y- P* f
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码- J/ Q0 H2 X( D- ]0 b4 Q
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
! G" F  z2 x+ P  b/ |    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;( R6 [; q- x2 m* F9 N% a( `
    inFilter.DstAddr = 0; //任意目标地址) L/ q" z6 N2 T7 M2 N7 Q4 z( A
    inFilter.DstMask = 0;$ \8 C/ m% x2 ]3 ~- O
    inFilter.wDstPort = 80; //目标端口 80(http 服务)  z, m9 q% [9 b
    inFilter.wDstPortHighRange = 80;3 O# A* d# _+ Y, S1 J2 o! R) t
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议8 G& ]9 B2 s4 C/ p  X) \
    // 加入一个过滤接口5 s' }8 p; @+ m
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);( {7 C" m% Q  H' c& H7 X7 ~
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)! V/ D, T, V0 H0 x
    // 移除过滤接口
+ D  v. @' k" H% P$ [    PfRemoveFilterHandles(hInterface, 1, &fHandle);4 j7 G0 \  ?6 M: H8 r  X
    PfUnBindInterface(hInterface);
# o$ ^, V/ q& V5 n5 y    PfDeleteInterface(hInterface);
2 M2 E9 X. ?, Y. n$ F2 T8 ?4 `    return 0;
% }( y1 t1 x! M2 k}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 17:05 , Processed in 0.036513 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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