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

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

[复制链接]
发表于 2004-2-15 13:24:35 | 显示全部楼层 |阅读模式
作者: zzwinner ,如转载请保证本文档的完整性,并注明出处。
7 F1 y5 ^$ W$ Z欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=593
& ~; {; J  v& p! ]8 t/*
- b( l$ @# [' X" l利用操作系统提供的API编写防火墙.
& k/ ~9 W. J2 G" t/ E该程序涉及到的API说明请访问微软的MSDN Library) @0 P0 S9 E0 S
代码在C++ Builder 5编译通过
. [+ c; F. @/ v* ^& F如果您想和我交流请email:zzwinner@163.com3 \: z  @( y: {. C* b/ _+ N
*/
& }6 Q3 M# m) {( ]# I#pragma hdrstop
* U" A, }& b. ]: A) c! J#include "windows.h"
9 k9 z1 h1 ?" V2 t5 f0 @* i0 `#include "Fltdefs.h"
2 Q/ M$ Y+ |) l5 y7 X5 F// 需要加载"iphlpapi.lib"# s' u7 j! ^! R/ V" n2 V
//---------------------------------------------------------------------------
# G; P4 ^8 C% c8 b' q
0 w7 i# v5 {2 N% Z$ y$ D7 X#pragma argsused* E0 H+ v+ l4 n
int main(int argc, char* argv[])9 F$ `' e1 I, R, e
{+ U, Y$ f/ R* C
    // 一个创建网络包过滤接口
6 N; A7 f+ W0 \9 K    INTERFACE_HANDLE hInterface;
5 G  ]& a% ?( Y! J$ a; L    PfCreateInterface(0,
. R0 W' k9 {4 T% h* E6 ~0 u                     PF_ACTION_DROP,//PF_ACTION_FORWARD,
1 x+ Z) T+ Q2 ^  L& T( g                     PF_ACTION_DROP,//PF_ACTION_FORWARD, 8 @) O0 `( I& l  H! o% B7 c
                     FALSE, ' q  V- A4 {0 I3 A" j9 T. Q
                     TRUE, + q) B4 Q. K# Z( y
                     &hInterface);
* i: Q! [4 d' B( W& `2 D% V# k
$ u5 d& g" A1 C    // 绑定需要网络包过滤的IP地址
. u% J4 T: V9 I7 V' d! d    BYTE localIp[] = {192,168,0,2};
" C8 K" {- R$ o+ M8 T2 x    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);! J! f7 o$ Y* F& G$ P
    // 现在我们开始过滤HTTP协议的的接口
3 U2 b8 w$ a0 S# R7 e& N    FILTER_HANDLE fHandle;
1 x/ K* t: Z0 G% `- C1 a# p    // 填充过滤包的规则结构. V2 C$ F9 d$ ~* t0 j1 K3 M
    PF_FILTER_DESCRIPTOR inFilter;
+ G) v; }9 S0 y: `% I4 O    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值7 v4 B! `1 w# _
    inFilter.dwRule = 0; //一直添这个值2 Q* X5 F6 t/ }1 E2 F; N: R
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址1 U2 c- V; U6 N, d9 I; q
    inFilter.SrcAddr = localIp; //设置本地IP地址2 K- P& U! L4 w* H+ r6 j! ^
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码+ J  B2 r) Q$ \% r7 `, M
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口! Z; g$ k, {; `7 H' l  [9 B! ~) q4 l
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
) ]" }* U' @- g2 o" e    inFilter.DstAddr = 0; //任意目标地址& j+ y: w( K( \- t1 z0 B
    inFilter.DstMask = 0;
+ f3 f/ W4 I) X* O    inFilter.wDstPort = 80; //目标端口 80(http 服务)* H: W$ ~# z) J7 C8 \
    inFilter.wDstPortHighRange = 80;# X1 G0 q5 e& \# U9 [
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
: l2 ]! `' X5 K1 Z    // 加入一个过滤接口. q/ g% I) q; i& h
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);& m! C2 U! v* k- g" q0 d
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
' h- X& p8 \' i* T    // 移除过滤接口
+ G* }9 _4 }2 t0 ~% f7 h4 Y) @& t! M, u    PfRemoveFilterHandles(hInterface, 1, &fHandle);1 n% a5 G7 g( Z
    PfUnBindInterface(hInterface);
4 p( U; h7 C5 r- b! i' D$ Z% S% L( C    PfDeleteInterface(hInterface);. h# X6 ^2 t) Z) k, ?
    return 0;
! Q( ^1 I' J$ B# ~0 |- X$ B3 j" r}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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