如何使用winsock 1.1版实现icmp数据包处理程序?

时间:2009-12-14 20:52:17

标签: c++ windows network-programming winsock network-protocols

我正在处理一个非常古老的应用程序。我需要在此应用程序中进行更改以侦听即将发生的icmp请求并决定回复或丢弃数据包(ICMP上的访问控制类型)。该应用程序是基于Winsock 1.1版的。我尝试了不同的方法来创建套接字并使用套接字捕获icmp数据包。但我的努力都没有奏效。

任何人都可以帮助我吗?还是完全不可能?

非常感谢您的回答。

2 个答案:

答案 0 :(得分:0)

我认为您无法在应用程序(Winsock)级别拦截ICMP数据包,因为这不是应用程序功能。您可能需要为运行应用程序的任何版本的Windows编写网络筛选器驱动程序。

答案 1 :(得分:0)

你说应用程序是旧的,但没有关于你运行它的操作系统。除非你在16位Windows或NT 3.x上运行它,否则你没有理由不能只迁移到Winsock 2.你可以download Winsock 2 for Win95,它会在以后的Win9x中出现操作系统,以及Windows NT 4及更高版本。

如果你真的必须在Win16上运行这个应用程序,有可能从那个提供原始套接字支持的时代挖掘出第三方Winsock堆栈中的一个,但这听起来像一个巨大的麻烦,如果你想合法地做。更容易将Win98指定为最低操作系统版本并继续。

编辑:我假设您可以使用raw sockets执行所需操作,如果必须在MS操作系统中使用内置Winsock,则需要转移到Winsock 2。更改您的程序以使用Winsock 2而不是Winsock 1.1很容易;一个库更改,一个头文件更改,以及WSAStartup调用的更改,您就可以了。原始ICMP套接字允许您构建所需的任何ICMP数据包,并且在较新的操作系统中,您也可以监听ICMP数据包。如果事实证明堆栈不允许您通过套接字监听所需的数据包,则可以使用packet capturing技术来实现。