Python使用dpkt解析PCAP时如何将二进制IP字节串转为十六进制格式
问题解决方法
你拿到的ip.src是Python标准的bytes类型,不需要手动逐字节解析,用内置方法就能稳定完成转换。
转换为空格分隔的十六进制字符串(c0 a8 00 28格式)
Python 3.8及以上版本,直接用bytes自带的hex()方法,传入空格作为分隔符即可:
hex_str = ip.src.hex(' ') print(hex_str) # 输入b'\xc0\xa8\x00('时输出:c0 a8 00 28
如果是低于3.8的Python版本,用生成器逐字节格式化即可,逻辑同样稳定:
hex_str = ' '.join(f'{byte:02x}' for byte in ip.src)
以上两种写法都会强制把每个字节转为两位小写十六进制,不会因为字节值对应ASCII可打印字符(比如你例子里0x28对应字符
()出现解析错误,所有字节的转换结果一致。
更适配你场景的写法:直接转可读点分十进制IP
你读取pcap的目标是拿源/目的IP地址,不需要绕路转十六进制,用Python内置socket库的标准方法可以直接把4字节IP二进制串转为192.168.0.40格式的字符串:
import socket src_ip = socket.inet_ntoa(ip.src) dst_ip = socket.inet_ntoa(ip.dst) print(src_ip) # 输入b'\xc0\xa8\x00('时直接输出192.168.0.40
另外提一句你贴的示例代码有个笔误:你打开文件的变量名是file,传入pcap解析器时写的是f,运行会触发变量不存在的报错,改成dpkt.pcap.Reader(file)即可正常运行。
内容的提问来源于stack exchange,提问作者Micheal Nestor
相关产品推荐
相关产品推荐

