请问如何用VC编程来屏蔽掉某一个端口,多谢

时间:2022-07-03 17:16:51
一定要用DDK吗?
如果不用,那么用什么方法来实现
如果一定要用,如何实现?
那里有这种方法的文档?谢谢

22 个解决方案

#1


关注!!

#2


就我了解要用DDK,通过过滤驱动屏蔽掉对指定端口的访问。

#3


学习一下,突然发现很佩服月儿mm

#4


防火墙开发技术。
需要使用驱动,可以使用tdi,ndis.ddk中有passthru的例子参考,更多的去驱动开发网上问吧

#5


PfAddFiltersToInterface及相关函数,自己查MSDN。

#6


驱动开发

#7


SPI也行吧!

#8


谢谢各位的关注,解决了可以另开贴加分!]

 to danyueer(淡月儿:清水上的足音) 
   能说说如何实现的吗?
 to kingzai() 
   能介绍一下tdi,ndis吗?还有哪个驱动网站比较好呢?
 to Hendy_So() 
   PfAddFiltersToInterface是哪里的函数?用它自己就可以吗?
 to oyljerry(☆勇敢的心☆-要开始写论文了)
   能不能具体说说呢
 to keios(C->C++->java->C 循环中)
   SPI是一种方法?它和DDK有关嘛?实现的方法是什么?

#9


用Packet Filtering Functions对于不是很复杂的控制(比如你所说的屏蔽端口)应该是非常容易的方法了。它们是SDK中的函数。

#pragma hdrstop
#include "windows.h"
#include "Fltdefs.h"
// 需要加载"iphlpapi.lib"
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
    // 一个创建网络包过滤接口
    INTERFACE_HANDLE hInterface;
    PfCreateInterface(0, 
PF_ACTION_DROP,//PF_ACTION_FORWARD,
PF_ACTION_DROP,//PF_ACTION_FORWARD, 
FALSE, 
TRUE, 
&hInterface);

    // 绑定需要网络包过滤的IP地址
    BYTE localIp[] = {192,168,0,2};
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
    // 现在我们开始过滤HTTP协议的的接口
    FILTER_HANDLE fHandle;
    // 填充过滤包的规则结构
    PF_FILTER_DESCRIPTOR inFilter;
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
    inFilter.dwRule = 0; //一直添这个值
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
    inFilter.SrcAddr = localIp; //设置本地IP地址
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
    inFilter.DstAddr = 0; //任意目标地址
    inFilter.DstMask = 0;
    inFilter.wDstPort = 80; //目标端口 80(http 服务)
    inFilter.wDstPortHighRange = 80;
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
    // 加入一个过滤接口
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
    // 移除过滤接口
    PfRemoveFilterHandles(hInterface, 1, &fHandle);
    PfUnBindInterface(hInterface);
    PfDeleteInterface(hInterface);
    return 0;
}

#10


gz

#11


to Hendy_So() 你这个程序如何屏蔽两个以上的端口?

#12


ding

#13


那就多添加几个filter

#14


to Hendy_So() 
谢谢,但是为什么我用你的程序之后不但不能上网,其他的程序比如ftp,qq都上不去,
改成23也上不去网?为什么?

#15


这个参数很复杂,我也就用上面例子试过,其它情况要靠自己试了。
用完后记着把过滤器删除。

#16


学习

#17


SPI也应该可以的。

#18


to Hendy_So() 
 你的程序可以屏蔽掉所有的端口,但是不能只屏蔽掉一个端口

to kugou123(酷狗)(http://www.mzkp.com/cooldog)
 也谢谢你的关注。是的,keios(C->C++->java->C 循环中) 说过SPI可以
 但是你们都惜字如金,而我又做这个不久,
 所以我也不太明白,能不能指导我一下如何SPI编程?
 亦或有没有有关文档?

to 其它好心人
 你们能不能提供一些有关文档或者连接?谢谢
 分不成问题,我还有600多分

#19


高手们,帮帮我吧,谢谢你们

#20


SPI是一种应用层的技术,位于ws2_32.dll之下,
参看MSDN: data transport [Winsock]
sample: lsp (Platform SDK)

#21


我顶

#22


我的那种方法可能半年前试过,当时好像是可以,不过现在试起来好像如你所说所有包都被丢弃了。不过看这个函数的参数,应该可以实现特定端口的屏蔽,可以自已多试试各种参数组合,也可以到网上查一查有没有此函数的用法。
另外,要写一个具有简单端口屏蔽功能的驱动也非常简单,把下面这个例子拿过来稍微修改一下就可以了:http://www.codeproject.com/internet/drvfltip.asp

#1


关注!!

#2


就我了解要用DDK,通过过滤驱动屏蔽掉对指定端口的访问。

#3


学习一下,突然发现很佩服月儿mm

#4


防火墙开发技术。
需要使用驱动,可以使用tdi,ndis.ddk中有passthru的例子参考,更多的去驱动开发网上问吧

#5


PfAddFiltersToInterface及相关函数,自己查MSDN。

#6


驱动开发

#7


SPI也行吧!

#8


谢谢各位的关注,解决了可以另开贴加分!]

 to danyueer(淡月儿:清水上的足音) 
   能说说如何实现的吗?
 to kingzai() 
   能介绍一下tdi,ndis吗?还有哪个驱动网站比较好呢?
 to Hendy_So() 
   PfAddFiltersToInterface是哪里的函数?用它自己就可以吗?
 to oyljerry(☆勇敢的心☆-要开始写论文了)
   能不能具体说说呢
 to keios(C->C++->java->C 循环中)
   SPI是一种方法?它和DDK有关嘛?实现的方法是什么?

#9


用Packet Filtering Functions对于不是很复杂的控制(比如你所说的屏蔽端口)应该是非常容易的方法了。它们是SDK中的函数。

#pragma hdrstop
#include "windows.h"
#include "Fltdefs.h"
// 需要加载"iphlpapi.lib"
//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
    // 一个创建网络包过滤接口
    INTERFACE_HANDLE hInterface;
    PfCreateInterface(0, 
PF_ACTION_DROP,//PF_ACTION_FORWARD,
PF_ACTION_DROP,//PF_ACTION_FORWARD, 
FALSE, 
TRUE, 
&hInterface);

    // 绑定需要网络包过滤的IP地址
    BYTE localIp[] = {192,168,0,2};
    PfBindInterfaceToIPAddress(hInterface, PF_IPV4, localIp);
    // 现在我们开始过滤HTTP协议的的接口
    FILTER_HANDLE fHandle;
    // 填充过滤包的规则结构
    PF_FILTER_DESCRIPTOR inFilter;
    inFilter.dwFilterFlags = FD_FLAGS_NOSYN; //一直添这个值
    inFilter.dwRule = 0; //一直添这个值
    inFilter.pfatType = PF_IPV4; //用 ipV4 地址
    inFilter.SrcAddr = localIp; //设置本地IP地址
    inFilter.SrcMask = "\xff\xff\xff\xff"; //设置本地子网掩码
    inFilter.wSrcPort = FILTER_TCPUDP_PORT_ANY; //任意来源端口
    inFilter.wSrcPortHighRange = FILTER_TCPUDP_PORT_ANY;
    inFilter.DstAddr = 0; //任意目标地址
    inFilter.DstMask = 0;
    inFilter.wDstPort = 80; //目标端口 80(http 服务)
    inFilter.wDstPortHighRange = 80;
    inFilter.dwProtocol = FILTER_PROTO_TCP; // 过滤的协议
    // 加入一个过滤接口
    PfAddFiltersToInterface(hInterface, 1, &inFilter, 0, NULL, &fHandle);
    // 请在这设置一个调试断点,然后看看你的IE是否不能访问WEB页. :)
    // 移除过滤接口
    PfRemoveFilterHandles(hInterface, 1, &fHandle);
    PfUnBindInterface(hInterface);
    PfDeleteInterface(hInterface);
    return 0;
}

#10


gz

#11


to Hendy_So() 你这个程序如何屏蔽两个以上的端口?

#12


ding

#13


那就多添加几个filter

#14


to Hendy_So() 
谢谢,但是为什么我用你的程序之后不但不能上网,其他的程序比如ftp,qq都上不去,
改成23也上不去网?为什么?

#15


这个参数很复杂,我也就用上面例子试过,其它情况要靠自己试了。
用完后记着把过滤器删除。

#16


学习

#17


SPI也应该可以的。

#18


to Hendy_So() 
 你的程序可以屏蔽掉所有的端口,但是不能只屏蔽掉一个端口

to kugou123(酷狗)(http://www.mzkp.com/cooldog)
 也谢谢你的关注。是的,keios(C->C++->java->C 循环中) 说过SPI可以
 但是你们都惜字如金,而我又做这个不久,
 所以我也不太明白,能不能指导我一下如何SPI编程?
 亦或有没有有关文档?

to 其它好心人
 你们能不能提供一些有关文档或者连接?谢谢
 分不成问题,我还有600多分

#19


高手们,帮帮我吧,谢谢你们

#20


SPI是一种应用层的技术,位于ws2_32.dll之下,
参看MSDN: data transport [Winsock]
sample: lsp (Platform SDK)

#21


我顶

#22


我的那种方法可能半年前试过,当时好像是可以,不过现在试起来好像如你所说所有包都被丢弃了。不过看这个函数的参数,应该可以实现特定端口的屏蔽,可以自已多试试各种参数组合,也可以到网上查一查有没有此函数的用法。
另外,要写一个具有简单端口屏蔽功能的驱动也非常简单,把下面这个例子拿过来稍微修改一下就可以了:http://www.codeproject.com/internet/drvfltip.asp