代码之家  ›  专栏  ›  技术社区  ›  hyperboreean

找出如何获取计算机的所有公共IP

  •  1
  • hyperboreean  · 技术社区  · 14 年前

    编辑 socket.gethostbyaddr(socket.gethostname()) 关于第三方软件包 netifaces ,但我正在标准库中寻找更优雅的内容。。。并分析 ifconfig 命令不是优雅的:)

    2 回复  |  直到 14 年前
        1
  •  0
  •   leoluk    14 年前

    IP地址已分配给您的VPSE,不可能动态更改它们。

    我认为SSH隧道是最好的方法,然后使用它作为来自Python的SOCKS5代理。

        2
  •  0
  •   leoluk    14 年前

    以下是如何获取运行脚本的服务器的所有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)]