SIOCGIFADDR = 0x8915
def getIpAddr(iface = 'eth0'):
ifreq = struct.pack('16sH14s', iface, socket.AF_INET, '\x00'*14)
try:
res = fcntl.ioctl(sock, SIOCGIFADDR, ifreq)
except:
return None
ip = struct.unpack('16sH2x4s8x', res)[2]
return socket.inet_ntoa(ip)
在每一步中,函数的返回值是什么?
而且,什么是SIOCGIFADDR?
另外,为什么在[2]
函数之后使用unpack()
?
答案 0 :(得分:0)
SIOCGIFADDR:代表获取互联网接口地址的意思是'eth0'。 这是CPU宏,写在地址0x8915。 您无法访问该cpu地址,因此您必须使用参数进行打包和解压缩功能 “16sH2x4s8x” 你想从机器上的IP地址有4个字段,如“192.168.5.20” 因此需要(4 * 4)16同样搜索包解包功能的更多字段。