python+scapy 抓包与解析

1. 简介

最近一直在使用做流量分析,今天把 scapy 部分做一个总结。

python 的 scapy 库可以方便的抓包与解析包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用。

2. 用法实例

  1. 安装

    作为初学者,关心的首先是如何安装,本人电脑系统是 fedora, 建议使用 linux。 推荐下载 pip,直接:(当然得在 su 权限下)

    pip install scapy

  2. 在 terminal 中输入 scapy, 如果有下面形式即安装好了:

  3. 抓包

    from scapy.all import *

    dpkt = sniff(iface = "wlp7s0", count = 100)

    sniff() 是 scapy 内置函数,有很多参数, 如图:

    这里就不一一解释, iface 参数是网卡信息, 也就是 eth0 之类的, 我这里是 wlp7s0, count 参数是抓取的连接数量, 这里是 100, 还有 filter 参数是过滤等。

  4. 保存为 pcap 格式

    wrpcap("demo.pcap", dpkt)

    pcap 格式较为通用, 可以将上述抓取的包保存为 pcap。

    dpkt 是上面抓取的流量

  5. 查看详细信息:

    可以看到有 94 个 tcp 包, 4个 udp 包, 还有两个其他类型的包。

    类似于 python 中的 list 类型, 可以使用下标访问, 比如用 python 可写个 for 循环遍历每个连接。长度可以使用 len 计算

    注意这里 dpkt 不是 list 类型, 也不是 string 类型, 因此如果要进行字符串处理,要把它转换为 string 类型,

    scapy强大地方在于可以通过字段来查看每一个字段信息,首先我们看一下它有那些字段:

    可以使用 ls() 查看支持的协议类型,有很多,具体看几个:

    甚至还有硬件信息:

    还有很多, 可以自己去看一下, 不附图了。

    知道它有那些字段后, 就可以调用了:

    随便举个例子, 比如第四个连接 dpkt[3]

    它的结构非常清楚,首先是 Ether 层, 然后是 IP 层, 然后是 TCP 层,访问时就按张如图就可以访问各个字段信息。

    要注意的是, 不是所有连接都是这几个层, Ether 是都有的, 但是 udp 连接肯定就没有 TCP 层, 而是改为 udp 层, ARP 包肯定就没有 IP 层, 更没有 TCP 层,如果再 arp 连接使用 dpkt[i][IP] 就会报错, 因为它没有 IP 这一层。python 使用时可以时使用 ether 的 type 判断是不是 IP 包, 使用 ip 的 proto 判断时 tcp 还是 udp。

    访问包中的报文可以使用 dpkt[i][Raw].load 字段, (假设第 i +1 个包有报文信息),同样,如果没有报文信息, 就没有 Raw 这一层,也就没有 load 这一字段。比如这里:

    第六个连接并没有 Raw 数据,访问出错, 第七个有 Raw 数据,可以得到报文信息。

  6. 使用离线数据包:

    pcap = sniff(offline = "xx/xx.pcap")

  7. 持续更新中
时间: 2024-10-19 09:59:22

python+scapy 抓包与解析的相关文章

2017-4-21 Shell+Python对抓包文件后的文本处理过程

这几天毕设的事情,需要把Modbus数据包变成十六进制形式,但是wireshark不是非常给力,也可能是我还没找到窍门吧.这几天的文本处理把我整的够惨,有些问题以前从来没想过,遇到了真是让人觉得书到用时方恨少呀.做下笔记,以后用的着. 一.目录结构解析 [ [email protected] #] ls /tmp 1.txt 10_BCD.sh 7.sh   get_final.py   README (1)[ [email protected] #] cat 1.txt  ##其中1.txt是

linux+jmeter+python基础+抓包拦截

LINUX 一 配置jdk 环境 *需要获取root权限,或者切换为root用户 1.windows下载好,去 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 官方网站下载jdk(linux相应版本) 2.在usr目录下创建java路径文件夹 [root bin]cd /usr mkdir java 3.将jdk-8u60-linux-x64.tar.gz放到刚才创建的文件夹下

python mitmdump抓包与redis订阅消息

本实例实现需求 django项目,后端采用python mitmdump 扩展脚本"sdk_log.py"实时抓取与过滤4399SDK 客户端日志,并且使用redis发布. 前端使用websocket连接,订阅某频道信息,实时输出对应游戏的客户端日志到页面中. 开发环境 win7,python3, 安装redis_server 参考 在windows x64上部署使用Redis 安装python redis python3 -m pip install redis 安装python m

python 进行抓包嗅探

一.绪论 最近一直想弄一个代理,并且对数据包进行解读,从而完成来往流量的嗅探.于是今天学习了一下如何使用Python抓包并进行解包. 首先要用到两个模块 dpkt(我这边ubuntu16.04 LTS)Python2.7中默认安装的 pcap安装 1 pip install pypcap 然后来说一下,pypcap主要用来抓包或者说是sniffer的,dpkt用来解包的,我对dpkt的认知是解包传输层以及传输层一下的数据比较不错,但是对于应用层数据的解读就是渣渣.尤其是HTTP,所以HTTP部分

tshark的抓包和解析

1. a.解析dhcp抓包文件 -r 读抓好的数据包文件 tshark -r 数据包路径 -Y 过滤条件   基本上可以运用 wirshark上的过滤条件 查找中继后dhcp discover src ip 报文 tshark  -r E:\testpacket\testdhcp.pcapng -Y "bootp && ip.src == 192.168.108.1 && bootp.option.dhcp == 1" 查看dhcp discover s

开发过程中快速抓包并解析

这几天小编在工作中遇到了一个灵异事件,客户端使用的是安卓原生系统,服务端使用的是java.需求就是客户端在照相的时候可以实时上传照片.后台接收并保存,并且可以在平台上显示.看似简单的功能,确有个很大的坑.有2个平台,192.168.31.87平台是测试环境,192.168.31.239是演示环境,测试环境,演示环境,还有安卓客户端代码都是一样的,连mq,redis,nginx,数据库都是一样的.但是安卓端上传测试环境一直报java.net.SocketException,在演示环境上是正常的.检

linux抓包并解析

tcpdump 的抓包保存到文件的命令参数是-w xxx.文件名后缀 tcpdump  -w /opt/test.pcap 可参阅http://liuzhigong.blog.163.com/blog/static/1782723752012851043396/ 然后用wireshark软件进行分析pcap文件即可 eg:过滤器中增加 ip.dst == 210.22.109.86可以分析出有多少ip向改目的ip发送数据

python抓包截取http记录日志

#!/usr/bin/python import pcap import dpkt import re def main(): pc=pcap.pcap(name="eth1")                                             # 抓取 eth1 pc.setfilter('tcp port 80')                                                       # 过滤表达式 tcp port 80

iOS 如何做才安全--逆向工程 - Reveal、IDA、Hopper、https抓包 等

iOS应用的安全性 常常被大家忽视. 1.首先,我们可以通过软件 下载 AppStore的ipa文件(苹果 把开发者上传的ipa进行了加壳再放到AppStore中), 得到ipa文件 可以分析APP 里包含的一些资源,如:图片.plist文件.静态wap页..bundle 等. 所以不要 在plist文件.项目中的静态文件中 存储关键的信息,如果要保存,记得加密(这样可以增加破解的难度). 2.我们可以用软件 查看 APP的沙盒,查看里面存储的 文件(sqlite.plist(NSUserdef