2008-12-02 60 views
19

我有一個服務器有兩個不同的網絡接口,每個接口都有不同的IP地址。我怎樣才能創建一個套接字,以便它會出去一個特定的IP地址?如何創建一個指向特定網絡接口的傳出套接字?

我更喜歡Python的例子,但問題是語言不可知的,所以射殺。

編輯:請不要給我「你不能」作爲答案。我的意思是,這是一臺電腦。例如,我可以做任何我喜歡的事情 - 我可以通過編程方式禁用我不想要的一個界面。我正在尋找更漂亮的東西。

回答

12

您當然可以將套接字綁定到特定設備。

我不知道如何在Python中做到這一點,但使用berkeley套接字api(在C中),您需要使用選項SO_BINDTODEVICE調用setsockopt()。您輸入struct ifreq類型的接口描述符。理想情況下,您將通過使用ioctl()並請求SIOCGIFINDEX - 將接口名稱(例如。eth0)作爲參數來獲取接口描述符的內容。


編輯:只是做了一個快速搜索,發現this在Python中的套接字方法的文檔。 setsockopt()就是其中之一。

+0

非常感謝您!我會嘗試並報告。 – Mikle 2008-12-03 07:34:44

+0

僅適用於Linux。那麼OS X呢? – Dor 2012-09-15 15:56:43

11

請注意 - 我真正需要的是綁定到特定的IP地址,並且爲了完整起見,解決方案是在創建後綁定套接字。來源蟒蛇:

import socket 
s = socket.socket() 
s.bind(("127.0.0.1", 0)) 
s.connect(("321.12.131.432", 80)) 
1
import socket 
s = socket.socket() 
s.bind((get_ip_address('eth0'), 0)) 

Quora

相關問題