【问题标题】:Is it possible to choose specific network interface to transmit data in Python?是否可以选择特定的网络接口在 Python 中传输数据?
【发布时间】:2014-05-27 10:48:23
【问题描述】:

是否可以选择特定的网络接口在 Python 中传输数据? 我在 Linux 上。我正在尝试通过我的活动接口传输数据(首先通过 eth0,然后是 wlan0 等......)。谢谢。

【问题讨论】:

  • 你想通过每个接口依次传输数据到什么目的?

标签: python sockets networking


【解决方案1】:

如果我们谈论的是 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,我不确定它是否会工作。我假设它会返回其中一个)

【讨论】:

  • 那是在一个特定的接口上监听而不是从它传输。除非当然有一种我不知道的方法,在这种情况下请分享代码! :)
  • 请注意,您可能需要另一种方法来确定所需接口的 IP 地址。这个食谱对我有用(仅限 Linux)-code.activestate.com/recipes/…
  • 是的,当然是 TCP/UDP。但是,我希望你在听的时候不是在谈论绑定到端口地址,谢谢:)
  • 确实不是为了听,而是为了连接。
  • 另外请注意,我发现您可以使用 0 作为端口号,以便让系统为您选择源端口!我已更改答案以反映这一点。
【解决方案2】:

我需要在 ruby​​ on linux 中执行此操作并写了一个答案here 我认为您会发现有帮助。正如 itai 指出的,您确实需要绑定到网络接口的 IP 地址,但在 linux 机器上,您还需要基于源的路由规则。查看我的答案以获取更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 2023-03-03
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多