gpt4 book ai didi

python - tshark 提供的原始数据是否完整?

转载 作者:行者123 更新时间:2023-12-04 10:50:01 25 4
gpt4 key购买 nike

因为使用 tshark 保存捕获的数据时不支持显示过滤器
我正在尝试创建可以在 Wireshark 中读取的有效 cap 文件。

我用

tshark -i wlan2 -V -x -q -Y "radiotap.channel.freq > 2400 && radiotap.channel.freq < 2500"



在 python 中,我使用以下方法抓取原始数据:
for line in io.TextIOWrapper(tshark_process.stdout, encoding="utf-8"):
substring = oneline[5:53]
clean = ''.join([c for c in substring if 34 < ord(c) < 127])
raw_packet += clean

我将这些数据转换回原始十六进制数据:
newFile = open("filename.cap", "wb")
newFile.write(bytes.fromhex(raw_packet))

我也试过:
newFile.write(bytearray(binascii.unhexlify(raw_packet)))

或者
newFile.write(binascii.unhexlify(raw_packet))

但是当我在 Wireshark 中打开 filename.cap 时,我看不到正常的数据包数据:

enter image description here

Frame 1: 260 bytes on wire (2080 bits), 260 bytes captured (2080 bits) Encapsulation type: JavaScript Object Notation (175) Frame Number: 1 Frame Length: 260 bytes (2080 bits) Capture Length: 260 bytes (2080 bits) [Frame is marked: False] [Frame is ignored: False] [Protocols in frame: json:data-text-lines] JavaScript Object Notation Line-based text data (1 lines) [truncated]\000\000 \000\256@\000\240 \b\000\240 \b\000\000\020\002l\t\240\000\336\000d\000\000\000\000\000\000\001\200\000\000\000\377\377\377\377\377\377\264\373\344J\352\346\264\373\344J\352\346p!\200\201+A'\000\000\000d\0001\004\000\



tshark 提供的原始数据是否完整?

如何将它们转换回 Wireshark 可读文件?

或者我做错了什么?

最佳答案

捕获格式

数据包捕获是与元数据一起组织数据包的文件格式。 *shark 家族主要使用两种格式:

  • pcap : tcpdump 推广的格式,基于libpcap
  • pcapng :支持保存更多元数据的现代格式(如数据包统计信息、接口(interface)名称、捕获操作系统等)。默认情况下,*shark 保存为这种格式。

  • 如果您想要查看 pcap 的文件字节,包括文件头, this article 会使用 2 个 ARP 数据包解构捕获。

    Python 和数据包

    有许多 python 解析器可以创建 Wireshark 可以读取的捕获文件。最通用的是 Scapy ,用于读取和生成数据包。您可以读取和写入 pcap 而无需担心文件头:

    产生流量

    先用tshark生成1个包文件:

    tshark -w example.pcap -c 1

    读取捕获

    然后用 scapy 阅读。这里我们使用扩展 Python 解释器的 Scapy 解释器。您可以在脚本中使用 from scapy.all import * 来做同样的事情。请注意,Scapy 提供了更多工具来操作数据包。

    >>> capture = rdpcap("example.pcap")
    >>> len(capture)
    1
    >>> for pkt in capture:
    ...: pkt.show()
    ###[ Ethernet ]###
    dst= 6c:96:cf:d8:7f:e7
    src= ac:86:74:a9:56:42
    type= 0x800
    ###[ IP ]###
    version= 4
    ihl= 5
    tos= 0x20
    len= 60
    id= 0
    flags= DF
    frag= 0
    ttl= 55
    proto= tcp
    chksum= 0x1abd
    src= 17.253.17.209
    dst= 10.255.250.18
    \options\
    ###[ TCP ]###
    sport= http
    dport= 50653
    seq= 616207835
    ack= 2603062618
    dataofs= 10
    reserved= 0
    flags= SA
    window= 28880
    chksum= 0x21e6
    urgptr= 0
    options= [('MSS', 1456), ('SAckOK', b''), ('Timestamp', (4160359186,
    1059821791)), ('NOP', None), ('WScale', 8)]

    写捕获

    写回 pcap 也同样简单:

    >>> wrpcap('written.pcap', capture)

    确认

    检查 Tshark 是否可以读取生成的 written.pcap ,我们看到它可以:

    $ tshark -r written.pcap
    1 0.000000 usscz2-vip-bx-009.aaplimg.com → 10.255.250.18 TCP 74 http(80) → 50653 [SYN, ACK] Seq=0 Ack=1 Win=28880 Len=0 MSS=1456 SACK_PERM=1 TSval=4160359186 TSecr=1059821791 WS=256 6c:96:cf:d8:7f:e7 ← ac:86:74:a9:56:42

    关于python - tshark 提供的原始数据是否完整?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59532901/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com