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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
. {4 F2 ~4 f1 `, z( q& X% n! {欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593" _+ r# p, q2 M* l; J
/*
* S9 o, j$ Z# M! X4 S利用操作系统提供的API编写防火墙.' t9 v) A' u, k) j" e
该程序涉及到的API说明请访问微软的MSDN Library
5 B" j8 K6 S$ z8 x/ `( B% p代码在C++ Builder 5编译通过
* Z8 w% X5 h! ^( Y如果您想和我交流请email:zzwinner@163.com! V( Z; _" T6 S7 l: \, ~6 }
*/
1 M8 s# ?( |+ _2 O2 N#pragma hdrstop3 ~$ a) B& N. u# r2 c" ~1 K& f0 T
#include "windows.h"4 z- X) A; f4 ~. [. H4 i
#include "Fltdefs.h"
5 b% I* j) _. C$ J) l// 需要加载"iphlpapi.lib"
% H# d& W3 X% f6 B$ T0 g) H* l* e# \; K//---------------------------------------------------------------------------- `9 ?6 F7 C7 f  x2 o
; M, C' ~7 o9 c: H4 X
#pragma argsused2 N) i) }+ `+ x* p) l- i
int main(int argc, char* argv[])
3 q* v9 W' c4 c% x% j: f" |{6 f/ N0 M& `* n7 P+ i8 g
    // 一个创建网络包过滤接口4 ~1 J0 y% }/ J
    INTERFACE_HANDLE hInterface;
1 D) `0 H6 E3 ]+ C2 |    PfCreateInterface(0,
* K6 V# O2 w* C' l/ r                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
( F! f% w0 `! J, I/ R' C5 V                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
& x% E4 c' l: {1 d; n3 H: l                     FALSE, 0 v5 O, P; Q4 K( d# @3 }
                     TRUE,
4 A8 J3 Q: x6 c( G) V! P3 S                     &hInterface);. w9 X( p$ n, p% o
" z( G$ T9 f1 v# n
    // 绑定需要网络包过滤的IP地址9 Q( ^2 \  u$ S; o6 Y
    BYTE localIp[] = {192,168,0,2};' t/ }- ?: L; k  @
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
: q7 d5 p6 V9 Y2 T! n1 M3 I2 {( u    // 现在我们开始过滤HTTP协议的的接口& F+ w1 x* ^; _% y  j- }8 o5 J
    FILTER_HANDLE fHandle;1 V, `+ T& m' H3 s
    // 填充过滤包的规则结构- d* u* f; j" |6 N( q. G
    PF_FILTER_DESCRIPTOR inFilter;& O$ T3 l$ ~( H2 M7 m1 y; t4 Y! {
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
& I& ^% I3 u% w/ c' m4 N9 }    inFilter.dwRule = 0; //一直添这个值
8 x5 X. C- x9 j  i* H2 e    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
9 G. D+ |4 O5 A    inFilter.SrcAddr = localIp; //设置本地IP地址
. a; E7 w! D! h1 R/ o9 {- S( T" w) q; `. T    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
8 k! O9 U  T' }( @$ ?    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口# m3 l& X3 r! _. @: X" Y) z
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;4 S* S) u; W/ i; g4 C
    inFilter.DstAddr = 0; //任意目标地址
, G5 f' k& g5 u( ^2 b  x    inFilter.DstMask = 0;
" P4 l+ i9 V1 F    inFilter.wDstPort = 80; //目标端口 80(http 服务)
" b4 o4 F1 o' H    inFilter.wDstPortHighRange = 80;
/ b  D+ l/ u1 h+ w/ L    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
9 \& ~0 Y6 y3 x  B3 A1 K    // 加入一个过滤接口% j0 O( |, d' \3 z* X
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);# q% I  B! c# |
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
9 C9 ?& F( Q: U1 @! j; f    // 移除过滤接口- S" ]$ S. A) z
    PfRemoveFilterHandles(hInterface, 1, &fHandle);
* g- P  z3 g4 |    PfUnBindInterface(hInterface);
: U) E# L) y  X8 \3 t6 R    PfDeleteInterface(hInterface);- d8 x& v+ l2 Q% A* h3 D
    return 0;
- o6 R" w: d4 ^) i}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-13 10:29 , Processed in 0.018286 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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