2011-03-30 53 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),您可以使用它來攔截一些數據包並重新路由它們。
相關問題