我正在通过netlink
套接字读取数据。其中一个TLVs
包含 IPv4 地址作为 4 个字节的序列,例如0x01 0x02 0x03 0x0b
对于 address 1.2.3.11
:
import socket
...
s = socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, socket.NETLINK_ROUTE)
s.bind((os.getpid(), RTMGRP_IPV4_IFADDR))
while True:
data = s.recv(65535)
msg_len, msg_type, flags, seq, pid = struct.unpack("=LHHLL", data[:16])
...
# skip all headers and get to TLVs
data = data[24:]
remaining = msg_len - 24
while remaining:
rta_len, rta_type = struct.unpack("=HH", data[:4])
...
rta_data = data[4:rta_len]
...
if rta_type == IFA_ADDRESS:
# rta_data[:4] contains IP address
...
我需要以rta_data[:4]
这样的方式阅读,以便得到一个可以进一步传递的字符串。我尝试使用encode()
或decode()
字符串方法,但没有运气。我想我应该遍历rta_data
并将每个字节转换为字符串并在其间放置点?我想知道是否有一个单行。