python ioctl创建ifreq结构

时间:2015-01-24 19:40:56

标签: python ioctl fcntl

我是系统编程的新手。我正在尝试使用Python和ioctl查询一些NIC信息,我很容易得到代码但是在理解上有些困难

获取IP地址的Python代码

nic = "eth1"
# Create socket object
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# **How did they conclude the formate to be 16sH14s and why 14 times \x00 ? Please advice**
ifreq = struct.pack('16sH14s', nic, socket.AF_INET, '\x00'*14)
result = fcntl.ioctl(fd, SIOCGIFADDR, ifreq)

# My wild guess **unpack format would be same as pack**. But I am wrong
ip = struct.unpack('16sH2x4s8x', result)[2]
print socket.inet_ntoa(ip)

有人可以建议如何决定格式以及为什么/如何决定空字符的数量?

这个链接似乎与我的问题差不多,但无法找到答案 http://www.unix.com/programming/148374-python-struct-pack.html

我找到了另一种创建ifreq的方法.. ifreq = struct.pack(' 256s',self.iface)。如果可能的话,请帮助我理解其中的差异。

0 个答案:

没有答案