【发布时间】:2014-05-27 10:48:23
【问题描述】:
是否可以选择特定的网络接口在 Python 中传输数据? 我在 Linux 上。我正在尝试通过我的活动接口传输数据(首先通过 eth0,然后是 wlan0 等......)。谢谢。
【问题讨论】:
-
你想通过每个接口依次传输数据到什么目的?
标签: python sockets networking
是否可以选择特定的网络接口在 Python 中传输数据? 我在 Linux 上。我正在尝试通过我的活动接口传输数据(首先通过 eth0,然后是 wlan0 等......)。谢谢。
【问题讨论】:
标签: python sockets networking
如果我们谈论的是 tcp/udp,那么(就像在任何其他语言中一样)套接字接口允许您将特定的 IP 地址绑定到它,因此您可以通过绑定接口的地址来做到这一点。
人们有这样的误解,即绑定仅用于侦听套接字,但连接也是如此,只是在正常使用中为您选择了绑定。 试试这个:
import socket
s = socket.socket()
s.bind(('192.168.1.111', 0))
s.connect(('www.google.com', 80))
这里我们使用来自接口 eth0 的 ip(我的是 192.168.1.111)和系统选择的源端口来连接到谷歌的网络服务器。 (如果需要,也可以通过替换 0 来选择源端口)
编辑: 要获取用于特定接口的 IP 地址,您可以使用此配方(仅限 Linux)-http://code.activestate.com/recipes/439094-get-the-ip-address-associated-with-a-network-inter/
(如果您在同一个接口上有多个 IP,我不确定它是否会工作。我假设它会返回其中一个)
【讨论】:
我需要在 ruby on linux 中执行此操作并写了一个答案here 我认为您会发现有帮助。正如 itai 指出的,您确实需要绑定到网络接口的 IP 地址,但在 linux 机器上,您还需要基于源的路由规则。查看我的答案以获取更多信息。
【讨论】: