【问题标题】:Reading MAC frame and feeding it to Wireshark读取 MAC 帧并将其提供给 Wireshark
【发布时间】:2012-05-26 02:48:50
【问题描述】:

我们有一个设备从空中接收 802.11p MAC 帧并将它们完全不变地馈送到串行端口(没有网络层标头),我们希望看到它们在 Wireshark 中排列,所以我们可以有一种自我为这个 802.11p 协议做嗅探器。

我的方法(在带有 python 的 linux 中)是,打开串行端口,读取帧并将它们写入 Wireshark 将侦听的命名管道。经过大量搜索后,我发现我必须写入该管道的格式必须类似于 pcap 文件格式。我查看了一些执行 pcap 格式化的 python 模块(scapy、pcapy、dpkt),但我找不到任何获得纯 MAC 帧并以wireshark 可以的方式简单地将其写入 pcap 格式的文件的模块阅读,无需我进行所有解析。你有什么建议?

【问题讨论】:

    标签: python pcap


    【解决方案1】:

    创建一个tap device 并将帧写入其中怎么样?然后你可以像任何其他设备一样用wireshark 嗅探tap 设备。在 Python here 中有一个使用 tap 设备的示例,在 C here 中有一个更长的教程(实际上是关于 tun 设备)。

    注意:我没有对此进行测试,但这个想法似乎很合理......

    更新:这似乎有效。它基于上述要点,但是 只需从文件中读取帧数据并将其写入设备:

    import sys
    import fcntl
    import os
    import struct
    import subprocess
    
    TUNSETIFF = 0x400454ca
    TUNSETOWNER = TUNSETIFF + 2
    IFF_TUN = 0x0001
    IFF_TAP = 0x0002
    IFF_NO_PI = 0x1000
    
    # Open TUN device file.
    tun = open('/dev/net/tun', 'r+b')
    # Tell it we want a TUN device named lars0.
    ifr = struct.pack('16sH', 'lars0', IFF_TAP | IFF_NO_PI)
    fcntl.ioctl(tun, TUNSETIFF, ifr)
    # Optionally, we want it be accessed by the normal user.
    fcntl.ioctl(tun, TUNSETOWNER, 1000)
    
    # Bring it up and assign addresses.
    subprocess.check_call(['ifconfig', 'lars0', 'up'])
    
    print 'waiting'
    sys.stdin.readline()
    
    # Read an IP packet been sent to this TUN device.
    packet = list(open('/tmp/packet.raw').read())
    
    # Write the reply packet into TUN device.
    os.write(tun.fileno(), ''.join(packet))
    
    print 'waiting'
    sys.stdin.readline()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-28
      • 2023-03-22
      • 1970-01-01
      • 2020-05-03
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      相关资源
      最近更新 更多