在 Wireshark 中手动执行此操作时,我右键单击一个数据包 -> 跟随 -> TCP 流,将打开一个包含相关信息的新窗口。有没有办法通过使用 pyshark 模块和 python 2.7 来做同样的事情并获取这些信息?注意:我通过发送无效的 HTTP 方法进行请求测试,因此在这里寻找 HTTP 层不起作用。
2 回答
是的,您可以使用 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 包卡住。
我不知道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 中感兴趣的流中的数据包。然后展开传输控制协议部分以显示流索引,如下图所示: 如何查找流索引