KimiNewt/pyshark

GitHub: KimiNewt/pyshark

tshark 的 Python 封装库,通过调用 Wireshark 协议解析器实现强大的数据包解析能力。

Stars: 2475 | Forks: 445

# pyshark tshark 的 Python 封装库,允许使用 Wireshark dissectors 进行 Python 数据包解析。 扩展文档:https://github.com/KimiNewt/pyshark-legacy **寻找贡献者** - 由于各种原因,我目前很难抽出时间来维护和增强这个包。任何 pull-request 都会被审查,如果有任何人感兴趣且合适,我将很高兴将他们纳入项目中。随时可以通过 dorgreen1 at gmail 给我发邮件。 有不少 Python 数据包解析模块,这个模块之所以不同,是因为它实际上并不解析任何数据包,它只是利用 tshark(wireshark 命令行工具)导出 XML 的能力来使用其解析功能。 这个包允许使用你安装的所有 wireshark dissectors,从捕获文件或实时捕获中进行解析。 已在 Windows/Linux 上测试。 ## 安装 ### 版本支持 支持 Python 3.7+。存在一个不再受支持的 Python 2 版本,名为 [pyshark-legacy](https://github.com/KimiNewt/pyshark-legacy)。 支持所有现代版本的 tshark / wireshark,但某些功能在旧版本上可能不可用。 ### 所有平台 只需运行以下命令即可从 pypi 安装最新版本 ``` pip install pyshark ``` 或者从 git 仓库安装: ``` git clone https://github.com/KimiNewt/pyshark.git cd pyshark/src python setup.py install ``` ### Mac OS X 你可能需要安装 libxml,这可能出乎意料。如果你收到来自 clang 的错误或关于 libxml 的错误消息,请运行以下命令: ``` xcode-select --install pip install libxml ``` 你可能必须接受 XCode 的 EULA,所以请准备好在 GUI 中点击“接受”对话框。 ## 用法 ### 从捕获文件读取: ``` >>> import pyshark >>> cap = pyshark.FileCapture('/tmp/mycapture.cap') >>> cap >>> 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 ... ``` #### 其他选项 * **param keep_packets**: 是否在通过 next() 读取数据包后保留它们。用于在读取大型捕获文件时节省内存。 * **param input_file**: 包含数据包捕获文件(PCAP, PCAP-NG..)或 TShark XML 的路径或类文件对象。 * **param display_filter**: 在读取之前对捕获应用显示(wireshark)过滤器。 * **param only_summaries**: 仅生成数据包摘要,速度更快但包含的信息很少 * **param disable_protocol**: 禁用协议检测(tshark 版本 > 2) * **param decryption_key**: 用于加密和解密捕获流量的密钥。 * **param encryption_type**: 捕获流量中使用的加密标准(必须是 'WEP'、'WPA-PWD' 或 'WPA-PWK'。默认为 WPA-PWK)。 * **param tshark_path**: tshark 二进制文件的路径 ### 从实时接口读取: ``` >>> capture = pyshark.LiveCapture(interface='eth0') >>> capture.sniff(timeout=50) >>> capture >>> capture[3] for packet in capture.sniff_continuously(packet_count=5): print('Just arrived:', packet) ``` #### 其他选项 * **param interface**: 要监听的接口名称。如果未指定,则使用第一个可用的接口。 * **param bpf_filter**: 用于数据包的 BPF 过滤器。 * **param display_filter**: 要使用的显示(wireshark)过滤器。 * **param only_summaries**: 仅生成数据包摘要,速度更快但包含的信息很少 * **param disable_protocol**: 禁用协议检测(tshark 版本 > 2) * **param decryption_key**: 用于加密和解密捕获流量的密钥。 * **param encryption_type**: 捕获流量中使用的加密标准(必须是 'WEP'、'WPA-PWD' 或 'WPA-PWK'。默认为 WPA-PWK)。 * **param tshark_path**: tshark 二进制文件的路径 * **param output_file**: 将捕获的数据包额外保存到此文件。 ### 使用环形缓冲区从实时接口读取 ``` >>> capture = pyshark.LiveRingCapture(interface='eth0') >>> capture.sniff(timeout=50) >>> capture >>> capture[3] for packet in capture.sniff_continuously(packet_count=5): print('Just arrived:', packet) ``` #### 其他选项 * **param ring_file_size**: 环形文件的大小(单位 kB),默认为 1024 * **param num_ring_files**: 要保留的环形文件数量,默认为 1 * **param ring_file_name**: 环形文件的名称,默认为 /tmp/pyshark.pcap * **param interface**: 要监听的接口名称。如果未指定,则使用第一个可用的接口。 * **param bpf_filter**: 用于数据包的 BPF 过滤器。 * **param display_filter**: 要使用的显示(wireshark)过滤器。 * **param only_summaries**: 仅生成数据包摘要,速度更快但包含的信息很少 * **param disable_protocol**: 禁用协议检测(tshark 版本 > 2) * **param decryption_key**: 用于加密和解密捕获流量的密钥。 * **param encryption_type**: 捕获流量中使用的加密标准(必须是 'WEP'、'WPA-PWD' 或 'WPA-PWK'。默认为 WPA-PWK)。 * **param tshark_path**: tshark 二进制文件的路径 * **param output_file**: 将捕获的数据包额外保存到此文件。 ### 从实时远程接口读取: ``` >>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0') >>> capture.sniff(timeout=50) >>> capture ``` #### 其他选项 * **param remote_host**: 要进行捕获的远程主机(IP 或主机名)。应运行 rpcapd。 * **param remote_interface**: 远程机器上要进行捕获的远程接口。请注意,在 Windows 上,它不是设备显示名称,而是真实的接口名称(即 \\Device\\NPF_..)。 * **param remote_port**: rpcapd 服务监听的远程端口 * **param bpf_filter**: 在读取之前应用于捕获的 BPF(tcpdump)过滤器。 * **param only_summaries**: 仅生成数据包摘要,速度更快但包含的信息很少 * **param disable_protocol**: 禁用协议检测(tshark 版本 > 2) * **param decryption_key**: 用于加密和解密捕获流量的密钥。 * **param encryption_type**: 捕获流量中使用的加密标准(必须是 'WEP'、'WPA-PWD' 或 'WPA-PWK'。默认为 WPA-PWK)。 * **param tshark_path**: tshark 二进制文件的路径 ### 访问数据包数据: 可以通过多种方式访问数据。 数据包被分为多个层,首先你必须到达适当的层,然后你可以选择你的字段。 以下所有方式均有效: ``` >>> 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 b'\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') ``` ### 使用显示过滤器从文件读取 Pyshark 显示过滤器有助于分析应用程序聚焦的流量。 BPF 过滤器不如 Wireshark 的显示过滤器灵活。 ``` >>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', display_filter="dns") >>> cap2 = pyshark.LiveCapture(interface='en0', display_filter="tcp.analysis.retransmission") ``` ## 许可证 本项目根据 MIT 许可。对本项目的贡献接受相同的许可。
标签:DNS解析, GitHub搜索工具, PCAP, Pyshark, Python, Python封装, Tshark, Wireshark, 内核驱动, 协议分析, 句柄查看, 开发库, 开源项目, 抓包工具, 数据包解析, 无后门, 服务管理, 权限提升, 系统分析, 网络分析, 网络协议, 网络嗅探, 网络安全, 逆向工具, 防御绕过, 隐私保护