1

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

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

非常感谢您的回答。

4

2 回答 2

0

您说该应用程序很旧,但与您运行它的操作系统无关。除非您在 16 位 Windows 或 NT 3.x 上运行它,否则您没有充分的理由不能只迁移到 Winsock 2。您可以下载Win95 的 Winsock 2,它也包含在所有后来的 Win9x 操作系统中如在 Windows NT 4 及更高版本中。

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

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

于 2009-12-15T01:08:13.893 回答
0

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

于 2009-12-14T21:04:06.450 回答