Python3下基于Scapy库完成网卡抓包解析
时间:2022-07-24
本文章向大家介绍Python3下基于Scapy库完成网卡抓包解析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Scapy是一个可以让用户发送、侦听和解析并伪装网络报文的Python程序。这些功能可以用于制作侦测、扫描和攻击网络的工具。
在 Python
代码中可以通过 sniff
函数调用抓包分析,并对抓到的包进行回调操作。
Sniff
方法定义:
sniff(count=0,
store=1,
offline=None,
prn=None,
filter=None,
L2socket=None,
timeout=None,
opened_socket=None,
stop_filter=None,
iface=None)
count:抓取报的数量,设置为0时则一直捕获
store:保存抓取的数据包或者丢弃,1保存,0丢弃
offline:从pcap文件中读取数据包,而不进行嗅探,默认为None
prn:为每个数据包定义一个回调函数,通常使用lambda表达式来写回调函数
filter:过滤规则,可以在里面定义winreshark里面的过滤语法,使用 Berkeley Packet Filter (BPF)语法,具体参考:[http://blog.csdn.net/qwertyupoiuytr/article/details/54670477](http://blog.csdn.net/qwertyupoiuytr/article/details/54670477)
L2socket:使用给定的L2socket
timeout:在给定的事件后停止嗅探,默认为None
opened_socket:对指定的对象使用.recv进行读取
stop_filter:定义一个函数,决定在抓到指定的数据之后停止
iface:指定抓包的网卡,不指定则代表所有网卡
filter语法
type(定义了类型)
可选值:host, net, port, portrange
例如:
host hostnameA
net 172.31 //相当于172.31.0.0/16,又例如:192.168.1相当于192.168.1.0/24
port 80
portrange 6000-6010
dir(direction,定义了传输方向)
可选值:src, dst, src or dst, src and dst
例如:
src net 172.31
src or dst port 21
proto(protocol定义了网络协议)
可选值:ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp, udp, icmp
(fddi, tr, wlan是ether的别名, 包结构很类似)
例如:
ether src hostnameA
arp net 172.31
udp portrange 7000-8000
连接词:and, or, not
例如:
tcp or udp
not icmp
示例代码
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
from scapy.all import *
def pack_callback(packet):
print ( packet.show() )
if packet['Ether'].payload:
print (packet['Ether'].src)
print (packet['Ether'].dst)
print (packet['Ether'].type)
if packet['ARP'].payload:
print (packet['ARP'].psrc)
print (packet['ARP'].pdst)
print (packet['ARP'].hwsrc)
print (packet['ARP'].hwdst)
time.sleep(2)
filterstr="arp"
sniff(filter=filterstr,prn=pack_callback, iface='eth0', count=0)
参考文献
- Scapy’s documentation: https://scapy.readthedocs.io/en/latest/index.html
- Scapy 中文文档: https://wizardforcel.gitbooks.io/scapy-docs/content/
- python scapy 网卡抓包:https://www.cnblogs.com/wangjq19920210/p/10089055.html
- Scapy Sniffer的用法:https://blog.csdn.net/qwertyupoiuytr/article/details/54670489
- Scapy Sniffer的filter语法:https://blog.csdn.net/qwertyupoiuytr/article/details/54670477
- lambda函数、Scapy Sniffer用法:https://zhuanlan.zhihu.com/p/42533185
- Python 变量类型:https://www.runoob.com/python/python-variable-types.html
- Python 字典(Dictionary): https://www.runoob.com/python/python-dictionary.html
--------------------- Author: Frytea Title: Python3下基于Scapy库完成网卡抓包解析 Link: https://blog.frytea.com/archives/451/ Copyright: This work by TL-Song is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
- 微信二次开发Java自定义菜单事件实现
- 微信OAuth授权获取用户OpenId-JAVA(个人经验)
- 【手写文字识别】-JavaAPI示例代码
- 【Python3-API】情感倾向分析示例代码
- SpringMVC+Hibernate +MySql+ EasyUI实现CRUD(一)
- 【Python3-API】通用文字识别示例代码
- Python入门教程之安装MyEclipse插件和安装Python环境
- AutoFlowLayout-多功能流式布局与网格布局控件
- RBAC新解:基于资源的权限管理(Resource-Based Access Control)
- 基于开源项目搭建属于自己的技术堆栈
- Redis整合Spring项目搭建实例
- SpringMVC+Hibernate +MySql+ EasyUI实现POI导出Excel(二)
- Nginx+Tomcat+Redis负载均衡Session共享实现超级简单(CentOS6.9系统 Java版本)
- Apache Ignite——新一代数据库缓存系统
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-LimitedBox篇
- 算法:滑动窗口(二)
- Flutter基础widgets教程-LinearProgressIndicator篇
- Flutter基础widgets教程-ListTile篇
- 深入剖析 linux GCC 4.4 的 STL String
- Flutter基础widgets教程-MaterialApp篇
- 如何使用Visual Studio Code开发Django项目
- Flutter基础widgets教程-Padding篇
- Flutter基础widgets教程-Placeholder篇
- Flutter基础widgets教程-PopupMenuButton篇
- Python部署rad+xray自动化
- 2.建立第一个django项目与配置
- Flutter基础widgets教程-Radio篇
- Django中的QuerySet
- Python—requests模块详解