如何在python中解析捕获的数据包?

詹姆斯·默兹

我有一个使用python套接字的捕获数据包原始数据包:

s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0003))

while True:
    message = s.recv(4096)
    test = []
    print(len(message))
    print(repr(message))

我以为返回的数据包将是十六进制字符串格式,但是打印出来的内容print(repr(message))如下:

b'\x00\x1b\xac\x00Gd\x00\x14\xd1+\x1f\x19\x05\n\x124VxC!UUUU\x00\x00\x00\x00\xcd\xcc\xcc=\xcd\xccL>\x9a\x99\x99>\xcd\xcc\xcc>\x00\x00\x00?\x9a\x......'

其中有奇怪的非十六进制字符,例如!UUUU=这是什么编码,如何解码数据包?


我知道数据包现在是什么样子,因为我是使用winpcapy生成数据包的

from ctypes import *
from winpcapy import *
import zlib
import binascii
import time


from ChanPackets import base, FrMessage, FrTodSync, FrChanConfig, FlChan, RlChan


while (1):

    now = time.time()

    errbuf = create_string_buffer(PCAP_ERRBUF_SIZE)
    fp = pcap_t
    deviceName = b'\\Device\\NPF_{8F5BD2E9-253F-4659-8256-B3BCD882AFBC}'
    fp = pcap_open_live(deviceName, 65536, 1, 1000, errbuf)

    if not bool(fp):
        print ("\nUnable to open the adapter.  %s is not supported by WinPcap\n" % deviceName)
        sys.exit(2)

    # FrMessage is a custom class that creates the packet
    test = FrMessage('00:1b:ac:00:47:64', '00:14:d1:2b:1f:19', 0x12345678, 0x4321, 0x55555555, list(i/10 for i in range(320)))

    # test.get_Raw_Packet() returns a c_bytes array needed for winpcap to send the packet
    if (pcap_sendpacket(fp, test.get_Raw_Packet(), test.packet_size) != 0):
        print ("\nError sending the packet: %s\n" % pcap_geterr(fp))
        sys.exit(3)


    elapsed = time.time() - now
    if elapsed < 0.02 and elapsed > 0:
        time.sleep(0.02 - elapsed)

    pcap_close(fp)

注意:我想得到一个代表每个字节的十六进制值数组

f

这是什么编码,如何解码数据包?

您将看到bytesPython对象的表示形式您可能已经猜到\xab代表字节0xab171)。

其中有奇怪的非十六进制字符,例如!UUUU=

可打印的ASCII字符表示自己,即\x55表示形式不包含just U

您所拥有的是一个字节序列。如何解码它们取决于您的应用程序。例如,要解码包含以太网帧的数据包,可以使用scapy(Python 2):

>>> b = '\x00\x02\x157\xa2D\x00\xae\xf3R\xaa\xd1\x08\x00E\x00\x00C\x00\x01\x00\x00@\x06x<\xc0\xa8\x05\x15B#\xfa\x97\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\xbb9\x00\x00GET /index.html HTTP/1.0 \n\n'
>>> c = Ether(b)
>>> c.hide_defaults()
>>> c
<Ether  dst=00:02:15:37:a2:44 src=00:ae:f3:52:aa:d1 type=0x800 |
<IP  ihl=5L len=67 frag=0 proto=tcp chksum=0x783c src=192.168.5.21 dst=66.35.250.151 |
<TCP  dataofs=5L chksum=0xbb39 options=[] |
<Raw  load='GET /index.html HTTP/1.0 \n\n' |>>>>

我想得到一个代表每个字节的十六进制值数组

您可以使用binascii.hexlify()

>>> pkt = b'\x00\x1b\xac\x00Gd\x00'
>>> import binascii
>>> binascii.hexlify(pkt)
b'001bac00476400'

或如果您想要一个带有字符串十六进制值的列表:

>>> hexvalue = binascii.hexlify(pkt).decode()
>>> [hexvalue[i:i+2] for i in range(0, len(hexvalue), 2)]
['00', '1b', 'ac', '00', '47', '64', '00']

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android中捕获数据包?

来自分类Dev

如何在Java中解析代理袜子数据包?

来自分类Dev

如何在Java中解析IP数据包

来自分类Dev

如何在python中解码原始数据包?

来自分类Dev

如何在python中构造ICMP数据包

来自分类Dev

如何在局域网中捕获Http数据包

来自分类Dev

如何捕获c中的dns数据包?

来自分类Dev

如何防止Android中捕获HTTP数据包?

来自分类Dev

在用户模式下被sock_raw捕获后,如何在内核中丢弃数据包?

来自分类Dev

如何在python中发送数据包?

来自分类Dev

如何在Chef中循环加密的数据包

来自分类Dev

如何在Python中接收UDP数据包而不丢弃

来自分类Dev

如何在Ubuntu防火墙上执行详细数据包捕获?

来自分类Dev

简单的数据包捕获

来自分类Dev

如何输入用户定义的值,如 IP 地址或使用 python 捕获数据包的计数

来自分类Dev

如何与IPV4同时在WireShark中启用IPV6数据包捕获?

来自分类Dev

如何从Windows中Java捕获的数据包中提取IP地址?

来自分类Dev

在多线程Python程序中捕获数据包的有效方法

来自分类Dev

如何使用tcpdump捕获和查看数据包内容

来自分类Dev

如何防止数据包捕获解密我的SSL连接

来自分类Dev

如何使用tcpdump捕获和查看数据包内容

来自分类Dev

如何使用tcpdump捕获所有UDP数据包?

来自分类Dev

在pcap.net中捕获icmp数据包

来自分类Dev

在FreeBSD中不使用ICMP捕获数据包丢失

来自分类Dev

如何在没有嗅探器的情况下在Linux中捕获/转储蓝牙LE链路层数据包?

来自分类Dev

在python中读取DNS数据包

来自分类Dev

python中的网络数据包长度

来自分类Dev

在进行DOS攻击时如何在Python中显示来自服务器的TCP响应数据包

来自分类Dev

Python如何解析RADIUS服务器数据包?

Related 相关文章

  1. 1

    如何在Android中捕获数据包?

  2. 2

    如何在Java中解析代理袜子数据包?

  3. 3

    如何在Java中解析IP数据包

  4. 4

    如何在python中解码原始数据包?

  5. 5

    如何在python中构造ICMP数据包

  6. 6

    如何在局域网中捕获Http数据包

  7. 7

    如何捕获c中的dns数据包?

  8. 8

    如何防止Android中捕获HTTP数据包?

  9. 9

    在用户模式下被sock_raw捕获后,如何在内核中丢弃数据包?

  10. 10

    如何在python中发送数据包?

  11. 11

    如何在Chef中循环加密的数据包

  12. 12

    如何在Python中接收UDP数据包而不丢弃

  13. 13

    如何在Ubuntu防火墙上执行详细数据包捕获?

  14. 14

    简单的数据包捕获

  15. 15

    如何输入用户定义的值,如 IP 地址或使用 python 捕获数据包的计数

  16. 16

    如何与IPV4同时在WireShark中启用IPV6数据包捕获?

  17. 17

    如何从Windows中Java捕获的数据包中提取IP地址?

  18. 18

    在多线程Python程序中捕获数据包的有效方法

  19. 19

    如何使用tcpdump捕获和查看数据包内容

  20. 20

    如何防止数据包捕获解密我的SSL连接

  21. 21

    如何使用tcpdump捕获和查看数据包内容

  22. 22

    如何使用tcpdump捕获所有UDP数据包?

  23. 23

    在pcap.net中捕获icmp数据包

  24. 24

    在FreeBSD中不使用ICMP捕获数据包丢失

  25. 25

    如何在没有嗅探器的情况下在Linux中捕获/转储蓝牙LE链路层数据包?

  26. 26

    在python中读取DNS数据包

  27. 27

    python中的网络数据包长度

  28. 28

    在进行DOS攻击时如何在Python中显示来自服务器的TCP响应数据包

  29. 29

    Python如何解析RADIUS服务器数据包?

热门标签

归档