背景:我想知道哪台机器上跑了代码,打算用ip地址作为甄别的依据.
代码:
def get_ip(if_name): # get machine ip
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', if_name[:15])
)[20:24])
注意的点,python3 struct 加入了bytes,所以是这样调用
print(self.get_ip(if_name=b'eth0'))
碰到的问题:OSError: [Errno 19] No such device
原因:是公司的Ubuntu的网卡名并不叫这个名字.
解决办法:sudo lshw -C network 查看网卡名
这样调用即可:
print(self.get_ip(if_name=b'ens32'))