DPKT 库说它现在支持 Python3,但是当我在 Python 2.x 和 3.x 中使用它时,它的行为有所不同。虽然,两者都不正确,但它似乎出现了。
例如,在 Python 2.x 中,此处给出的示例
with open('test.pcap') as f:
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
print eth
返回一个我不期望的格式,一个类似于:
^����6#���l�m�
Q!6�(�����k����~�pO���o���N�l �k4�'���8�9�j��@mf���5��pB�6bٌ�~p��Jf.Jܼ3H�:�ݭ�k-O7+�O��
4�(�9��^F�fb��V��t˜������\�X1��#�.�ج<�Q�!����>�^ɹDĀ�orC=bC���S�6;��SR�`�� �
ZD����j2Q���m����h��)1@��1���aw}�d�ڧn� ��
0Z:�`8ຄE(�@4���}������Mu��63fP�/�
������h'7�h'7�;������
但是,在 Python 3 中,我被迫以“rb”模式打开 pcap 文件,这很好,除了输出问题(我不确定“rb”现在与这些问题有什么关系):
with open('test.pcap', 'rb') as f:
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
print eth
这现在返回我认为是字节串的内容,但我还没有找到一种方法来从中获取我需要的数据。例如,如果我需要标志的数量,我可以从他们网站的上述示例中轻松获得 17 个,但我似乎根本无法让他们的示例工作:
b'\x00\x0f\x1f\x16\xd1\xcd\x00\xc0\xf0y\x9a\xfd\x08\x00E\x00\x00\x1c\xb1\xce\x00\x006\x01N\xf7\xc0\xa8\x01d\xc0\xa8\x01g\x08\x00\xd9\xd7\xb7\xc4fc'
我没有任何运气将此字符串转换为人类可读的对象。没有任何组合decode
,binascii
或者我尝试过的任何其他方法都有效。我是否错误地使用了这个库?