通过WinSocks或任何其他API进行应用程序的特殊路由?

时间:2011-03-30 07:56:12

标签: c++ routing winsock

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

有关如何根据应用程序发送数据包的任何建议吗?可能是路由API

P.S。:Windows版本是32位XP SP3,32和64位Windows 7以及一个64位Windows Server 2008 R2。

1 个答案:

答案 0 :(得分:2)

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

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

  • 使用原始套接字和IP_HDRINCL手动执行源路由(即在IP头中添加一个带代理地址的选项)。有关简介,请参阅here
  • 您可以编写一个Winsock LSP (introduction here),您可以使用它来拦截某些数据包并重新路由它们。