当前位置: 首页 > news >正文

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

一、 安装scapy模块

1、打开DOS命令行

python -m pip install scapy

2、sniff()函数
功能:数据嗅探
参数:
iface: 指定在哪个网络接口上抓包

count: 表示要捕获数据包的数量。默认为0(不限制数量)

filter: 流量的过滤规则。使用的是 BPF 的语法

prn: 定义回调函数,使用lambda表达式来写回调函数(当符合filter的流量被捕获时,就会执行回调函数)

【BPF过滤语法举例】
只捕获某个IP主机进行交互的流量:host 192.168.1.124

只捕获某个MAC地址主机的交互流量:ether src host 00:87:df:98:65:d8

只捕获来源于某一IP的主机流量:src host 192.168.1.125

只捕获去往某一IP的主机流量:dst host 192.168.1.154

只捕获80端口的流量:port 80

只捕获除80端口以外的其他端口流量:!port 80

只捕获ICMP流量:ICMP

只捕获源地址为192.168.1.125且目的端口为80的流量:src host 192.168.1.125 && dst port 80

应用

只捕获源地址为192.168.1.124且目的端口为80的流量:

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

二、WireShark

安装: https://www.wireshark.org/download.html

1、开始抓包示例

打开主界面,选择对应的网卡,右键,会出现Start Capture(开始捕获),点击即可进行捕获该网络信息,开始抓取网络包
在这里插入图片描述
执行需要抓包的操作,如ping www.baidu.com。
说明:ip.addr == 180.101.49.11 and icmp 表示只显示ICPM协议且源主机IP或者目的主机IP为119.75.217.26的数据包。
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

2、表达式规则

类型Type(host、net、port)
方向Dir(src 源端 、dst 目的端)
协议Proto(ether、ip、tcp、udp、http、icmp、ftp等)
逻辑运算符(&& 与、|| 或、!非)

序列号:Sequence Number
确认应答信号:Acknowledgement Number

2.1 抓包过滤器语法和实例:

(1)协议过滤:直接在抓包过滤框中直接输入协议名即可。

tcp,只显示TCP协议的数据包列表
http,只查看HTTP协议的数据包列表
icmp,只显示ICMP协议的数据包列表

(2)IP过滤

host 192.168.1.104
src host 192.168.1.104
dst host 192.168.1.104

(3)端口过滤
port 80
src port 80
dst port 80

(4)逻辑运算符&&与、|| 或、!非
src host 192.168.1.104 &&dst port 80 抓取主机地址为192.168.1.80、目的端口为80的数据包

host 192.168.1.104 || host 192.168.1.102 抓取主机为192.168.1.104或者192.168.1.102的数据包

!broadcast 不抓取广播数据包

2.2 显示过滤器语法和实例:

(1)比较操作符
== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于

(2)协议过滤
直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写。

tcp,只显示TCP协议的数据包列表

http,只查看HTTP协议的数据包列表

icmp,只显示ICMP协议的数据包列表

(3) ip过滤
ip.src ==112.53.42.42 显示源地址为112.53.42.42的数据包列表

ip.dst==112.53.42.42, 显示目标地址为112.53.42.42的数据包列表

ip.addr == 112.53.42.42 显示源IP地址或目标IP地址为112.53.42.42的数据包列表

(4)端口过滤
tcp.port ==80, 显示源主机或者目的主机端口为80的数据包列表。

tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。

tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表。

(5) http模式过滤
http.request.method==“GET”, 只显示HTTP GET方法的。

(6)逻辑运算符为 and/or/not
过滤多个条件组合时,使用and/or。比如获取IP地址为192.168.0.104的ICMP数据包表达式为ip.addr == 192.168.0.104 and icmp

(7)按照数据包内容过滤
假设我要以ICMP层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。

2.3 常见用显示过滤需求及其对应表达式

数据链路层:
筛选mac地址为04:f9:38:ad:13:26的数据包

eth.src == 04:f9:38:ad:13:26

筛选源mac地址为04:f9:38:ad:13:26的数据包----

eth.src == 04:f9:38:ad:13:26

网络层:
筛选ip地址为192.168.1.1的数据包

ip.addr == 192.168.1.1

筛选192.168.1.0网段的数据

ip contains “192.168.1”

传输层:
筛选端口为80的数据包

tcp.port == 80

筛选12345端口和80端口之间的数据包

tcp.port == 12345 &&tcp.port == 80

筛选从12345端口到80端口的数据包

tcp.srcport == 12345 &&tcp.dstport == 80

应用层:
特别说明: http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1) http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。

筛选url中包含.php的http数据包

http.request.uri contains “.php”

筛选内容包含username的http数据包

http contains “username”

三、用Scapy解析pcap格式数据

读取 pcapng 文件有两种方式:

3.1 一次性读入内存

from scapy.all import *
pkts = rdpcap(‘test.pcap’)
//循环读 
for pkt in pkts:if IP in pkt and TCP in pkt:if pkt[IP].dst == tcp_ip and pkt[TCP].dport == tcp_port:# print("666")print(pkt['TCP'].dport)

pkt 中有多个数据包。pkt可当做列表顺序访问。
例如,访问第n个包:pkts[n]

访问每层里的内容pkt[‘每层的名字’].内容名,如pkt[‘IP’].dport pkt[‘TCP’].sport 等

3.2 逐行读

   pr = PcapReader('./tcp.pcapng')pkt = pr.read_packet()pkt.show()  #//显示格式化数据包IP = pkt['IP']print(IP)

每次调用read_packet() 都会读入下一个新的包到内存中,
现在一个数据包装入了pkt变量中。

3.3 提取 TCP 数据包的原始数据

   print(raw(pkt))  # 获取数据包的原始字节print(bytes(pkt))print(bytes_hex(pkt))  # 以可读格式打印数据包的原始字节print(bytes_hex(pkt)[24:28])

在这里插入图片描述

四、PyShark

https://blog.csdn.net/youyouxiong/article/details/138327285

安装 PyShark 库,它提供了 Wireshark 的 Python 接口:

pip install pyshark

分析

PyShark 可以读取 Wireshark 生成的 .pcap 或 .pcapng 文件,并进行分析:

import pysharkcap = pyshark.FileCapture('path_to_packet_file.pcapng', display_filter='http')
for packet in cap:print(f"{packet.ip.src} accessed {packet.http.host} at {packet.http.request.full_uri}")

这段代码将分析指定路径的抓包文件,并打印出每个 HTTP 请求的源 IP 地址、目标主机和访问的 URI。

http://www.lryc.cn/news/402626.html

相关文章:

  • uni-app开发日志:unicloud使用时遇到的问题解决汇总(不断补充)
  • 插入排序算法详解
  • parallel 详细解析 Java 8 Stream API 中的 parallel 方法
  • 不同业务场景下通过mars3d实现绕点旋转效果
  • 重塑水利未来:智慧水利解决方案的探索与实践,从物联网、大数据到人工智能,科技如何赋能水利行业,实现智慧化管理与决策
  • IO、进程、线程03
  • 算法力扣刷题记录 五十二【617.合并二叉树】
  • Java中的ArrayList和LinkedList有什么区别?
  • Linux C++ 058-设计模式之解释器模式
  • MDK5没有DeviceName
  • 在LabVIEW中实现图像矫正
  • Apache httpd-vhosts.conf 配置详解(附Demo)
  • 活动回顾 | AutoMQ 联合 GreptimeDB 共同探讨新能源汽车数据基础设施
  • 格式工厂转换视频分辨率
  • ReAct 大模型提示框架
  • JavaEE:Lombok工具包的使用以及EditStarter插件的安装
  • 基于纹理和统计图像特征集成的计算机辅助乳腺癌检测
  • Java基础 - 简介和配置环境变量
  • 水域救援装备的详细简介_鼎跃安全
  • 二、BIO、NIO、直接内存与零拷贝
  • 生成式AI的发展方向:Chat vs Agent
  • 吴恩达深度学习笔记:机器学习策略(2)(ML Strategy (2)) 2.9-2.10
  • 变频空调介绍
  • C语言实现二叉树以及二叉树的详细介绍
  • VScode:前端项目中yarn包的安装和使用
  • cmake configure_package_config_file指令详解
  • 准备跳槽了(仍然底层为主,ue独立游戏为辅)
  • 汽车免拆诊断案例 | 卡罗拉急加速抖动故障排除
  • 【JAVA】深入理解Hutool中的Pair、Triple和Tuple:组合数据的新方式,方法返回多个值,嘎嘎香,谁用谁知道,比原生好用更强大
  • modulepreload 对性能的影响