python抓包 -- 用wireshark抓包、解析--scapy、PyShark

一、网络抓包工具的选择与使用

1.1 安装scapy模块

对于Python开发者来说,scapy是一个功能强大的网络数据包处理工具:

python -m pip install scapy

sniff()函数详解

scapy中的sniff()函数是进行数据嗅探的核心功能,参数包括:

  • iface: 指定抓包的网络接口
  • count: 捕获数据包的数量(默认为0表示不限制)
  • filter: 使用BPF语法设置流量过滤规则
  • prn: 定义回调函数(使用lambda表达式)

BPF过滤语法示例:

  • 捕获特定IP交互流量:host 192.168.1.124
  • 捕获特定MAC地址流量:ether src host 00:87:df:98:65:d8
  • 捕获80端口流量:port 80
  • 捕获ICMP流量:ICMP
  • 组合条件:src host 192.168.1.125 && dst port 80

1.2 专业抓包工具Sniff Master

对于需要更专业抓包功能的用户,推荐使用Sniff Master工具。它提供了:

  • 直观的图形界面
  • 实时流量分析
  • 强大的过滤系统
  • 协议解析功能
  • 数据包重组能力

Sniff Master特别适合网络工程师和安全研究人员使用,可以轻松捕获和分析各种网络协议数据。

1.3 应用示例

使用scapy捕获特定流量的示例代码:

from scapy.all import *
sniff(filter='src host 192.168.1.124 && dst port 80', prn=lambda x:x.summary())

二、WireShark使用指南

2.1 基本抓包操作

  1. 打开WireShark主界面
  2. 选择目标网卡
  3. 点击"Start Capture"开始抓包
  4. 执行需要监控的网络操作(如ping测试)
  5. 使用过滤表达式分析特定流量

示例过滤表达式:
ip.addr == 180.101.49.11 and icmp 表示只显示ICMP协议且IP为指定地址的数据包

2.2 抓包过滤器语法

协议过滤

  • tcp:只显示TCP协议
  • http:只显示HTTP协议
  • icmp:只显示ICMP协议

IP过滤

  • host 192.168.1.104
  • src host 192.168.1.104
  • dst host 192.168.1.104

端口过滤

  • port 80
  • src port 80
  • dst port 80

逻辑运算

  • src host 192.168.1.104 && dst port 80
  • host 192.168.1.104 || host 192.168.1.102
  • !broadcast

2.3 显示过滤器语法

比较操作符

== != > < >= <=

协议过滤

直接输入小写协议名

IP过滤

  • ip.src ==112.53.42.42
  • ip.dst==112.53.42.42
  • ip.addr == 112.53.42.42

端口过滤

  • tcp.port ==80
  • tcp.srcport == 80
  • tcp.dstport == 80

HTTP过滤

  • http.request.method=="GET"
  • http.request.uri contains ".php"
  • http contains "username"

三、pcap数据分析

3.1 使用scapy解析pcap

scapy可以方便地读取和分析pcap格式的抓包数据:

from scapy.all import *
packets = rdpcap("capture.pcap")  # 读取pcap文件
for pkt in packets:
    if TCP in pkt:
        print(pkt[TCP].sport)  # 打印源端口

3.2 使用Sniff Master分析

Sniff Master提供了更强大的pcap分析功能:

  • 可视化流量统计
  • 会话重组
  • 协议分层分析
  • 异常检测
  • 导出报告

对于复杂的网络分析任务,Sniff Master能大大提升工作效率,特别是其智能分析功能可以自动识别常见网络问题。

你可能感兴趣的:(http,udp,https,websocket,网络安全,网络协议,tcp/ip)