我在多个VPS上运行我的代码(有多个IP,它们被设置为网络接口的别名)我试图弄清楚我的代码从网络接口获取IP地址的方式在飞行中并绑定它。有关如何在python中执行此操作而不添加第三方库的任何想法?
编辑我知道socket.gethostbyaddr(socket.gethostname())
和第三方软件包netifaces
,但我正在寻找标准库中更优雅的东西...并解析输出ifconfig
命令的优点不是优雅的:)
答案 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)]