1

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

4

2 回答 2

3

是的,您可以使用 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 包卡住。

于 2018-09-24T13:51:56.460 回答
1

我不知道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 中感兴趣的流中的数据包。然后展开传输控制协议部分以显示流索引,如下图所示: 如何查找流索引

于 2018-05-19T02:46:50.770 回答