在Wireshark中手动执行此操作时,我右键单击数据包 - >关注 - > TCP流 将打开一个带有相关信息的新窗口。 有没有办法做同样的事情,并通过使用pyshark模块和python 2.7获取此信息? 注意:我正在通过发送无效的HTTP方法进行请求测试,因此在此处查找HTTP层将无法正常工作。
答案 0 :(得分:0)
我不了解pyshark。
但也许https://jon.oberheide.org/pynids/会起作用,因为它也使用Python:
pynids是libnids的python包装器,libnids是一个网络入侵检测系统库,提供嗅探,IP碎片整理,TCP流重组和TCP端口扫描检测。让你自己的python例程检查网络对话。
我没有使用pynids的个人经验,但我使用它的基础库nids取得了很大的成功,你可以在http://libnids.sourceforge.net/获得
尽管名称是网络入侵检测系统,但它不仅可以用于检测网络入侵,还可以用于其中。它本质上是一个库,可以帮助您重新组合TCP流,如Wireshark的跟踪TCP流。
尽管nids非常棒,但它确实需要将TCP流开始在捕获文件中。如果你失去了开始并且无法捕获它,那么tshark可能会有所帮助:
tshark是Wireshark附带的命令行实用程序。例如:
tshark -r t.pcap -q -z follow,tcp,ascii,18
它向你在Wireshark的GUI的Follow TCP Stream窗口中看到的stdout输出相同的内容。
上述命令中的18是流索引。要确定在那里使用的数字,你可以让你的python脚本从0开始迭代并打印出每个流,直到它找到正确的数据。
查找流索引的另一种方法是首先单击感兴趣的流中Wireshark中的数据包。然后展开传输控制协议部分以显示Stream索引,如下图所示: How to find a stream index
答案 1 :(得分:0)
是的,您可以使用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软件包中。
>