弄清楚如何获得机器的所有公共ips

时间:2010-10-07 13:10:05

标签: python

我在多个VPS上运行我的代码(有多个IP,它们被设置为网络接口的别名)我试图弄清楚我的代码从网络接口获取IP地址的方式在飞行中并绑定它。有关如何在python中执行此操作而不添加第三方库的任何想法?

编辑我知道socket.gethostbyaddr(socket.gethostname())和第三方软件包netifaces,但我正在寻找标准库中更优雅的东西...并解析输出ifconfig命令的优点不是优雅的:)

2 个答案:

答案 0 :(得分:0)

IP地址已分配给您的VPS,无法动态更改。

您必须在VPS上打开SSH隧道或安装代理。

我认为SSH隧道是最好的方法,然后将其用作Python的SOCKS5代理。

答案 1 :(得分:0)

这是如何获取运行脚本的服务器的所有IP地址:

(尽可能优雅,只需要标准库)

import socket
import fcntl
import struct
import array

def all_interfaces():
    max_possible = 128  # arbitrary. raise if needed.
    bytes = max_possible * 32
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    names = array.array('B', '\0' * bytes)
    outbytes = struct.unpack('iL', fcntl.ioctl(
        s.fileno(),
        0x8912,  # SIOCGIFCONF
        struct.pack('iL', bytes, names.buffer_info()[0])
    ))[0]
    namestr = names.tostring()
    return [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)]