【问题标题】:Follow TCP stream using python and pyshark使用 python 和 pyshark 跟踪 TCP 流
【发布时间】:2018-04-24 11:42:09
【问题描述】:

在 Wireshark 中手动操作时,我右键单击一个数据包 -> 跟随 -> TCP 流 将打开一个包含相关信息的新窗口。 有没有办法通过使用 pyshark 模块和 python 2.7 来做同样的事情并获取这些信息? 注意:我通过发送无效的 HTTP 方法来进行请求测试,所以在这里寻找 HTTP 层不起作用。

【问题讨论】:

    标签: python-2.7 wireshark pyshark


    【解决方案1】:

    是的,您可以使用 python 和 pyshark 跟踪 TCP 流。下面是一个基本的概念证明。

    """
    Follow a TCP stream with pyshark.
    
    """
    import pyshark
    
    # Change FILENAME to your pcap file's name.
    FILENAME = "myfile.pcap"
    # Change STREAM_NUMBER to the stream number you want to follow.
    STREAM_NUMBER = 0
    
    # open the pcap file, filtered for a single TCP stream 
    cap = pyshark.FileCapture(
        FILENAME,
        display_filter='tcp.stream eq %d' % STREAM_NUMBER)
    
    while True:
        try:
            p = cap.next()
        except StopIteration:  # Reached end of capture file.
            break
        try:
            # print data from the selected stream
            print(p.data.data.binary_value)
        except AttributeError:  # Skip the ACKs.
            pass
    

    我验证了上面的代码适用于 python 2.7.13 和 python 3.6.6。

    注意:由于较新版本的pyshark 仅支持python 3.5+,如果您必须使用python 2.7,则只能使用pyshark-legacy pip 包。

    【讨论】:

    • 它一直说“AttributeError: No attribute named data”
    【解决方案2】:

    我不知道 pyshark。

    但也许 https://jon.oberheide.org/pynids/ 会起作用,因为它也使用 Python:

    pynids 是 libnids 的 python 包装器,它是一个网络入侵检测系统库,提供嗅探、IP 碎片整理、TCP 流重组和 TCP 端口扫描检测。让您自己的 python 例程检查网络对话。

    我没有使用 pynids 的个人经验,但我在使用它的底层库 nids 方面取得了很大的成功,您可以通过 http://libnids.sourceforge.net/ 获得它

    尽管名称为网络入侵检测系统,但它的用途远不止检测网络入侵。它本质上是一个库,可以帮助您重组 TCP 流,例如 Wireshark 的 Follow TCP Stream。

    虽然 nids 很棒,但它确实需要 TCP 流的开头位于您的捕获文件中。如果您丢失了开头并且无法捕获它,tshark 可能会有所帮助:


    tshark 是 Wireshark 附带的命令行实用程序。例如:

    tshark -r t.pcap -q -z follow,tcp,ascii,18
    

    它将与您在 Wireshark 的 GUI 的 Follow TCP Stream 窗口中看到的相同的内容输出到标准输出。

    上面命令中的 18 是一个流索引。要确定在那里使用的数字,您可以让您的 python 脚本从 0 开始迭代并打印出每个流,直到找到正确的流。

    另一种查找流索引的方法是首先单击 Wireshark 中感兴趣的流中的数据包。然后展开传输控制协议部分以显示流索引,如下图所示: How to find a stream index

    【讨论】:

      猜你喜欢
      • 2012-11-07
      • 2014-10-30
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      • 2012-03-30
      • 2014-07-03
      • 1970-01-01
      相关资源
      最近更新 更多