c++ - 通过 WinSocks 或任何其他 API 的应用程序的特殊路由?

标签 c++ routes winsock

我想将从我的应用程序发送的数据包路由到另一个网关,但我不知道我必须通过 setsockopt 更改哪些选项。 我不能只将条目添加到特定主机的路由表中,因为第二个应用程序也必须通过默认网关连接到这些主机。网关具有不同的公共(public) IP。 我找到了有关通过 IP_OPTIONS 套接字选项设置“源路由”选项的主题(尽管没有格式),但据我了解,此选项仅适用于路由器而不适用于我的网络适配器。 我也无法添加第二个适配器并将其连接到同一个 LAN。

有什么建议可以根据每个应用程序发送数据包吗?可能是路由 API

附注:Windows 版本为 32 位 XP SP3、32 位和 64 位 Windows 7 以及一个 64 位 Windows Server 2008 R2。

最佳答案

简答:这真的很难,你确定要这样做吗?不可能直接通过 set sock opt。通过使用命令行实用程序“route”手动添加路由,很可能有更简单的选择。如果您的最终目的地是已知 IP 或网络,并且正常流量也可以通过其他网关路由,那将是最佳选择。

更长的答案:如果你是代码忍者,你有以下两个选择,祝你好运,我不知道这是否会在实践中起作用:

  • 使用原始套接字和 IP_HDRINCL 手动进行源路由(即在 IP header 中添加一个选项,其中包含您的代理地址)。参见 here进行介绍。
  • 您可以编写 Winsock LSP (introduction here)您可以使用它来拦截一些数据包并重新路由它们。

关于c++ - 通过 WinSocks 或任何其他 API 的应用程序的特殊路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5483490/

相关文章:

javascript - 使用回调函数进行快速路由时未定义参数

c - 未使用 MinGW 编译的 Winsock 服务器代码

c++ - WSARecv 如何使用 lpOverlapped?我怎样才能手动发出事件信号?

c++ - C++ 中的 unordered_set 会在恒定时间内找到该数据中的值吗?

c++ - 以二进制和文本模式写入的文件之间的区别

c++ - 互操作性如何运作

c++ - 优雅地关闭 TCP 套接字

C++:如何在不进行舍入、截断或填充的情况下将 float 转换为字符串?

javascript - 更改div react 的onClick路线

php - 路由 post_wishlist 不支持 GET 方法。支持的方法 : POST