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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。3 J9 H9 J! Q  \. p! [
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593) a. E  E' @2 N3 k' b, \5 {$ ^' {
/*
8 b' B2 w7 B) f( n7 g- s8 \# ?利用操作系统提供的API编写防火墙.
5 ~, B1 ?7 L4 P" i* }! Z1 D该程序涉及到的API说明请访问微软的MSDN Library9 n; }$ ]/ |2 i  g3 p+ m7 J
代码在C++ Builder 5编译通过! Z1 m0 b8 i+ ?6 l
如果您想和我交流请email:zzwinner@163.com( }& V6 f0 {9 a3 D5 R" {
*/
7 G, M* ~% l/ k+ m0 V3 J#pragma hdrstop' i$ C+ e: n0 y3 X2 Z
#include "windows.h"
. h: Y+ d! y* l& Q  a#include "Fltdefs.h"
. l: o$ z2 r. F// 需要加载"iphlpapi.lib"
/ K" e$ W  o: ^: z+ }//---------------------------------------------------------------------------/ o, E6 A. e- d' u6 Z$ C1 s- w

7 p! l) M& U% [5 l4 ^#pragma argsused
6 |7 _8 p+ D- w" T" @% Qint main(int argc, char* argv[])
% {! T" u2 W, m: r# b{1 m& J8 ^( @1 R
    // 一个创建网络包过滤接口# d( c; s- o6 K
    INTERFACE_HANDLE hInterface;) q: r$ c! w$ R) y
    PfCreateInterface(0,
1 {& v# ]% l( q9 t- o                     PF_ACTION_DROP,//PF_ACTION_FORWARD,: Z2 G7 j, }; W6 |% r" N
                     PF_ACTION_DROP,//PF_ACTION_FORWARD, 2 @; _6 @' Z! E' o4 J' B
                     FALSE, ; W* f2 |( W4 S
                     TRUE, ) T6 H" `7 Q1 b$ B- w  ]' z
                     &hInterface);
0 t- c0 a& R  k/ }$ i
$ k" H8 ~  L7 M    // 绑定需要网络包过滤的IP地址. @$ U, z: P) Z6 r4 X
    BYTE localIp[] = {192,168,0,2};" N/ s- t+ p3 {6 L
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
2 ~, A5 O% O+ c    // 现在我们开始过滤HTTP协议的的接口" c6 \6 K# ]* m% H! `7 m% S. x
    FILTER_HANDLE fHandle;
$ g; O. v0 [$ V& b- }  c    // 填充过滤包的规则结构
. f8 S! l& U8 `, V    PF_FILTER_DESCRIPTOR inFilter;7 e2 ?9 Z* C8 J* H$ J; M$ Q
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值( R. S& B3 a: x8 E" o
    inFilter.dwRule = 0; //一直添这个值
+ N- a0 h3 O1 W3 x" ?, c( L9 Y    inFilter.pfatType = PF_IPV4; //用 ipV4 地址7 s) r9 c* I" P
    inFilter.SrcAddr = localIp; //设置本地IP地址
2 N6 p- X' j9 K6 y" j; c8 `( G    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码% x' ~) @. i5 d
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口, a9 Z( X) U( s. @
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;5 `5 S& t' s3 c+ ^: l7 I( D
    inFilter.DstAddr = 0; //任意目标地址
' ^& N, g% Y& J$ H. ?: u    inFilter.DstMask = 0;% i# o' B1 V% K5 {
    inFilter.wDstPort = 80; //目标端口 80(http 服务)0 W7 ~  T1 f2 a5 T8 G) ?( R
    inFilter.wDstPortHighRange = 80;
$ _5 v! F5 X' d  z    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议* z8 Q& t# t* g3 W+ h8 `' C
    // 加入一个过滤接口
+ X, e. e7 n% {    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
( Q9 v. n+ r& [    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
5 M. T8 i: }2 l( S9 l; K* Y5 n    // 移除过滤接口
, j% i0 O& C& G3 i! `! s. f    PfRemoveFilterHandles(hInterface, 1, &fHandle);
+ |3 k/ h. Z) ]; z    PfUnBindInterface(hInterface);
& T! n: |8 u" G- K8 f2 M    PfDeleteInterface(hInterface);& B% M5 l1 i) j) D* u6 q+ R5 r9 Z4 n
    return 0;
' I: h1 B  l. A3 \2 B: t}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 04:27 , Processed in 0.033659 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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