此仓库是 pyshark 旧版本(适用于 Python2.7+)的代码库。自 0.3.8 版本之后,仅接收 bug 修复。 如需仅支持 Python 3.5+ 的新版本,请使用主仓库
tshark 的 Python 封装,允许使用 wireshark 解析器进行 Python 数据包解析。
扩展文档:http://kiminewt.github.io/pyshark
Python 中有不少数据包解析模块,本模块的不同之处在于它并不实际解析任何数据包,而是利用 tshark(wireshark 命令行工具)导出 XML 的能力来使用其解析功能。
该包支持从捕获文件或实时捕获进行解析,使用你已安装的所有 wireshark 解析器。 已在 Windows/Linux 上测试。
直接运行以下命令从 pypi 安装最新版本:
pip install pyshark-legacy
或者从 Git 仓库安装:
git clone https://github.com/KimiNewt/pyshark-legacy.git
cd pyshark/src
python setup.py install
你可能需要安装 libxml,这可能会出乎意料。如果你收到 clang 错误或关于 libxml 的错误信息,请运行:
xcode-select --install
pip install libxml
你可能需要接受 XCode 的 EULA,所以准备好点击 GUI 中的“接受”对话框。
>>> import pyshark
>>> cap = pyshark.FileCapture('/tmp/mycapture.cap')
>>> cap
<FileCapture /tmp/mycapture.cap (589 packets)>
>>> print cap[0]
Packet (Length: 698)
Layer ETH:
Destination: BLANKED
Source: BLANKED
Type: IP (0x0800)
Layer IP:
Version: 4
Header Length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
Total Length: 684
Identification: 0x254f (9551)
Flags: 0x00
Fragment offset: 0
Time to live: 1
Protocol: UDP (17)
Header checksum: 0xe148 [correct]
Source: BLANKED
Destination: BLANKED
...
>>> capture = pyshark.LiveCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print 'Just arrived:', packet
>>> capture = pyshark.LiveRingCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print 'Just arrived:', packet
>>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0')
>>> capture.sniff(timeout=50)
>>> capture
数据可以通过多种方式访问。 数据包被分成多个层,首先你需要到达适当的层,然后选择你的字段。
以下所有方法均有效:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
要测试某个层是否存在于数据包中,可以使用其名称:
>>> 'IP' in packet
True
要查看所有可能的字段名,使用 packet.layer.field_names 属性(例如 packet.ip.field_names)或解释器上的自动补全功能。
你还可以获取字段的原始二进制数据或漂亮的描述:
>>> p.ip.addr.showname
Source or Destination Address: 10.0.0.10 (10.0.0.10)
# 还有一些新属性:
>>> p.ip.addr.int_value
167772170
>>> p.ip.addr.binary_value
'\n\x00\x00\n'
Pyshark 支持使用 WEP、WPA-PWD 和 WPA-PSK 标准自动解密跟踪(WPA-PWD 为默认值)。
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', decryption_key='password')
>>> cap2 = pyshark.LiveCapture(interface='wi0', decryption_key='password', encryption_type='wpa-psk')
每个捕获类中都存在受支持加密标准元组 SUPPORTED_ENCRYPTION_STANDARDS。
>>> pyshark.FileCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
>>> pyshark.LiveCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
本项目基于 MIT 许可证。对此项目的贡献均按同一许可证接受。