0

我正在通过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并将每个字节转换为字符串并在其间放置点?我想知道是否有一个单行。

4

0 回答 0