3

私はシステムプログラミングに非常に慣れていません。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)。できれば違いがわかる方教えてください。

4

0 に答える 0