2011-09-20 136 views

回答

0

也許你應該嘗試通過代理服務器連接?

+0

我想檢查沒有代理的往返延遲 – Michael

3

既然你在編程網站上提出這個問題,我會假設你有源代碼。

當您創建客戶端套接字時,可以將其限制爲特定的接口。通常你不會(你只需要先撥connect()而不用bind()),並讓操作系統找出最好的出接口,但這不是強制性的。

+0

您確定它在客戶端? – Michael

+1

那麼,客戶端啓動連接,所以這是你必須選擇的地方。服務器可能決定只偵聽物理端口,但這只是表示如果客戶端嘗試通過環回進行連接,則服務器無法訪問。 – MSalters

+0

您可以更具體地瞭解要更改哪個參數嗎?我使用addrinfo結構和getaddrinfo函數 – Michael

0

你不能,除非你的網絡上有一些設備將其數據發回給你。通常情況下,沒有什麼會這樣做的。如果您將數據發送到網絡上,則無法恢復。

如果您已經設置了某些內容以將數據返回給您,請將數據發送到該數據,並遵循所支持的任何機制。

2

您可以嘗試在客戶端和服務器套接字上設置SO_BINDTODEVICE套接字選項,並將外部NIC接口作爲參數。

參見:http://codingrelic.geekhold.com/2009/10/code-snippet-sobindtodevice.html爲例

我不知道這是不夠的 - 有可能是在內核IP協議棧完整性檢查丟棄報文的以太網目的地和來源都是你的。可能有一個sysctl來禁用這個檢查,或者你可以編譯你自己的內核,而不用檢查這個特定的測試。

+0

我試過了。它拒絕連接,當我設置這個setsockopt – Michael

+0

請參閱我的答案的其餘部分關於Linux內核IP堆棧安全機制丟棄您的數據包和如何處理它... :-) – gby

相關問題