2011-03-30 51 views
1

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

任何建议如何我可以在每个应用程序的基础上发送数据包?可能是路由API

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

回答

2

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

更长的答案:如果你是一个代码忍者,你有以下两种选择,运气好的话,我不知道这是否会在实际工作中:

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