1

在我的电脑中,有两个网络适配器,连接到不同的子网。如下:

适配器 A:10.20.30.201 适配器 B:10.20.31.201

我想制作一个特殊进程的所有传出数据(例如进程 A)的所有传出数据。也就是说,我想将适配器 A 作为进程的默认路由。

我知道,我可以为一些特殊的目的地修改路由表,但是我想在这里做的是非常不同的。进程 A可能与许多不同的 IP 进行通信,而我事先并不知道。

Winsock2 提供LSP作为在 TCP/IP 堆栈中放置 dll 的一种方式。我对LSP不熟悉,不知道LSP能不能做我想做的事。

谁能给我一些建议,谢谢。

4

1 回答 1

1

LSP 的快速背景知识:

使用 Winsock2 API 的应用程序调用 WSA 前缀函数的组合,例如 WSAConnect、WSASocket、WSASend、WSARecv 等。

如果应用程序仍然使用旧的 Winsock 函数,这些函数无论如何都会在后台映射到 Winsock2。例如:send() 映射到 WSASend(),recv() 映射到 WSARecv() 等

WSA-prefix 函数将在内部调用它们对应的由 LSP 提供的 WSP-prefix 函数。例如,WSASend() 调用 WSPSend(),WSASocket() 调用 WSPSocket() 等。简而言之,WSAWhateverFunction() 将调用 WSPWhateverFunction()。它们的参数/返回也相同(不完全是,但有点)。

LSP 是一个实现了这些 WSP 前缀功能的 dll,例如。修改出站/入站流量、过滤等。但是 LSP 仍然是用户空间 dll。它与其他用户空间程序一样受到限制,并且没有比其主机应用程序更高的权限,例如互联网浏览器。它可以访问其他程序可用的同一组系统功能,例如。温索克等

结论是,如果您的程序可以将传出的流量引导到特定的 NIC,LSP 也可以做到。如果不能,LSP 也不能。因此,LSP 与您的问题无关。

于 2011-02-05T14:15:19.080 回答