9

无论如何使用pyshark获取TCP数据包的有效负载?

我正在尝试跨多个 TCP 流比较不同数据包的数据部分,但我找不到获取数据包数据的方法。pkt['tcp'].data似乎不存在。

4

3 回答 3

3

如果您使用的是 .pcap 文件,一旦您使用

cap = pyshark.FileCapture('vox.pcap')

说,你想读取第二个数据包的数据,并且你确定这样一个字段存在,试试:

pkt = cap[1]
print pkt.tcp.data

要查看可用于 pkt.tcp 的选项,请使用:

dir(pkt.tcp)

它将返回 pkt.tcp 的所有可用选项

于 2015-10-04T09:12:20.090 回答
2

使用 pyshark 0.3.7.11 和 python 3.6 并假设您已经加载了一个捕获文件,您可以通过以下方式获取 tcp 有效负载:

p = capfile[0] # or any packet you know has a tcp layer
payload = p.tcp.payload

p.tcp.payload Out[139]: '6f:00:2c:00:01:00:02:00:00:00:00:00:00:00:00:00:00:00:00:00 :00:00:00:00:00:00:00:00:00:00:02:00:00:00:00:00:b2:00:1c:00:81:00:00:00:01 :00:03:00:03:00:02:00:00:00:00:00:64:00:01:00:04:00:02:00:6b:00:03:00

您可以通过以下方式找到可以访问的字段:

dir(p) # for entire packet
dir(p.ip) # for ip layer
dir(p.tcp) # for tcp layer

以漂亮的格式打印出信息:

print(p.tcp)  # one way
p.tcp.pretty_print() # using pretty print

不确定还有什么对您有用。文档位于https://github.com/KimiNewt/pyshark

于 2018-06-11T07:06:16.100 回答
1

你可以这样做:

import pyshark
import sys

cap = pyshark.FileCapture(sys.argv[-1])
for i in cap:
    try:
        print(i.data.data)
    except:
        print("no data")
于 2017-11-21T14:23:59.210 回答