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

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

问题描述:

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

谁能帮助我吗?还是完全不可能?

非常感谢您的回答。

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

你说应用程序是旧的,但没有关于你运行它的操作系统。除非你在16位Windows或NT 3.x上运行它,否则没有理由不能迁移到Winsock 2.你可以使用Winsock 2 for Win95,它也包含在所有后来的Win9x操作系统中如在Windows NT 4以上。

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

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