python学习:scapy库的packet与str相互转换(代码片段)

chaos-god chaos-god     2022-12-18     250

关键词:

1.问题

python的scapy库,是构造TCP/IP报文的利器,并且支持asn.1,搞过电路交换协议的人一定会明白基于asn.1协议的描述复杂度。

使用中遇到的一个比较麻烦的问题,scapy抓到的Packet如何在网络中传输,如何在使用端还原到Packet类型。

2.方案

2.1.Packet转换为str

Packet转换为str很简单,直接上代码:

from scapy.all import *

pkts = sniff('eth1', count=1, timeout=5)
pkts[0].show()
pkt_str = str(raw(pkts[0]))
print(pkt_str)

2.2.str转换为Packet

str转换为Packet看上去不那么容易,遇到过两个问题:

  • 还原到Packet类型,需要bytesstr转换为bytes一直没有试成功;
  • 还原到Packet类型,调用show方法,没有解析出席完整的报文结构;

对于问题1的方法:

from scapy.all import *

pkts = sniff('eth1', count=1, timeout=5)
pkts[0].show()
pkt_str = str(raw(pkts[0]))
print(pkt_str)
pkt_bytes = eval(pkt_str)
print(pkt_bytes)

利用eval方法,str转换到bytes很容易,不需要对str的编码格式设置,比较方便。

对于问题2的方法:

from scapy.all import *

pkts = sniff('eth1', count=1, timeout=5)
pkts[0].show()
pkt_str = str(raw(pkts[0]))
print(pkt_str)
pkt_bytes = eval(pkt_str)
pkt_old = Ether(pkt_bytes)
pkt_old.show()

scapy解析报文的时候,需要指定第一层什么时候结构,不然无法进行完整的解析,不明白sniff的原理,如果知道报文是以太网结构,直接使用类型Ether构造报文Packet,再调用show方法就能完整的解析了。

解决了上述两个问题,就可以方便在网络中传输scapyPacket结构。

3.讨论

既然使用scapy是网络方面的库,系统往往不是单一进程就能完成的,会涉及到网络传输,Packetstr相互转换的问题解决了,就离正式的方案不远了。本文讨论的方法,网上还是比较难找到一个完整的方法,所以贴上来供大家学习使用。

上述的方法,还有一个问题使用sniff抓到的包,如何确定首层是什么报文呢?这里再附送一个方法,把Packet转换成json格式,这样就容易判断了,代码如下:

def packet2json(pkt: Packet):
    js = dict()
    for key in pkt.fields.keys():
        js[key] = str(pkt.fields[key])

    if isinstance(pkt.payload, NoPayload):
        return js
    js[pkt.payload.name] = packet2json(pkt.payload)
    return js

enjoy!!!

使用scapy给pcap包添加vlan(代码片段)

...、使用scapy编辑没有vlan的文件的第4个报文fromscapy.allimport*packets=rdpcap("gen_full_tcp_2023_04_20_10_21_14.pcap")data=Ether(dst="00:16:3e:33:02:64",src="00:16:3e:5c:f2:a3",type="VLAN")/Dot1Q(prio=0,id=0,vlan=10,type="IPv4")/IP(raw(packets[3]["IP"]))stream=[]stream.append(packets[0])... 查看详情

实践三网络嗅探与协议分析(代码片段)

...务之后,我去查找如何去编写一个简单的抓包工具,发现python有一个抓包用的库scapy和解析包用到的库dpkt。于是我就打算使用python来进行编写。下面是安装这两个库的截图(由于pip版本不能更新问题导致无法导入库,将近耗费了... 查看详情

使用 scapy 时 PyX 未正确安装

...发布时间】:2018-06-1816:43:42【问题描述】:我正在尝试在python3.6中使用scapy来解析pcap文件,我尝试使用的功能是pdfdump。fromscapy.allimport*packets=rdpcap(\'***path***/nitroba.pcap\')forpacketinpa 查看详情

在scapy中绑定自定义图层(代码片段)

我有一个python脚本,它将AVB(IEEE)数据包组装并发送到网络中。数据包将被wireshark捕获。使用其他python脚本,我遍历捕获文件。但我无法在几层中访问一些参数,因为scapy不知道它们。所以我必须将这些图层添加到scapy中。这是w... 查看详情

python关于pil库的学习总结与成果展示(代码片段)

一、关于PIL库的学习总结PIL(PythonImageLibrary)库是Python语言的第三方库,需要通过pip工具安装。安装PIL库的方法如下,需要注意,安装库的名字是pillow。 :>pipinstallpillow   #或者  pip3installpillow  PIL库支... 查看详情

中间人用 scapy 攻击

...是代码:fromscapy.allimport*importmultiprocessingimporttimeclassMITM:packets=[]def__init__(self,vict 查看详情

使用 Python 2.7 在 Windows 上运行 Scapy

】使用Python2.7在Windows上运行Scapy【英文标题】:RunningScapyonWindowswithPython2.7【发布时间】:2011-07-2318:40:59【问题描述】:我喜欢在Windows7下将Scapy与Pythonv2.7一起使用。如何安装Python2.7所需的模块pypcap?是否可以使用py2exe等分发工具... 查看详情

《python黑帽子:黑客与渗透测试编程之道》读书笔记:scapy——网络的掌控者(代码片段)

...1、窃取email认证2、ARP缓存投毒3、PCAP文件处理结语前言《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。书是比较老了,anyway,还是本很好的书本... 查看详情

使用 Scapy 获取 TCP 标志

...,我需要提取TCP标志(SYN、ACK、PSH、URG...)。我正在使用packet[\'TCP\'].flags值一次获取所有标志。pkts=PcapReader(infile)forpinpkts:F=bin(p[\'TCP\'].flags)printF,b 查看详情

python与机器学习

文章目录机器学习的目标机器学习分类pythonscikit-learnscikit-learn常用函数sklearn库的简介无监督学习聚类clustering欧式距离曼哈顿距离马氏距离夹角余弦降维k-means聚类算法DBSCAN密度聚类PCA方法及其应用非负矩阵分解(NMF)基... 查看详情

自定义协议的 Scapy 图形转储

...以下数据包:p=IP()/TCP()/Unique()Unique是一个新层:classUnique(Packet):name="Unique"fields_desc=[IntField("a",0),IntField("b",0),IntField( 查看详情

发送的 Scapy 数据包收不到

】发送的Scapy数据包收不到【英文标题】:Scapypacketsentcannotbereceived【发布时间】:2013-12-0915:31:03【问题描述】:我正在尝试使用以下命令发送带有scapy的UDP数据包:>>send(IP(dst="127.0.0.1",src="111.111.111.111")/UDP(dport=5005)/"Hello").Sent1... 查看详情

python爬虫学习记录基本库的使用——requests(代码片段)

一、基本用法urllib库中的urlopen方法实际是用GET方式请求网页,而requests中相应的方法是get()我们用get方法实现与urlopen相同的操作,得到一个response对象,分别输出response类型,状态码,响应体以及cooki... 查看详情

scapy的使用(代码片段)

...需要伪造IGMP报文,骗取交换机相关组播流量,慌忙之下学习了Scapy的使用,以及相关快速学习的方法,在这里分享下。1.Scapy库安装github地址:https://github.com/secdev/scapy安装过程:见官方文档笔者方案:$gitclonehttps://github.com/secdev/sc... 查看详情

Scapy 和 Python 3.2

】Scapy和Python3.2【英文标题】:ScapyandPython3.2【发布时间】:2012-03-1903:31:37【问题描述】:Scapy会与Python3.2兼容吗?我一直试图找到一些关于它如何执行的信息,因为Scapy网站上关于Python3.X兼容性的信息相当稀少(如果有的话),... 查看详情

python网络爬虫与信息提取—requests库入门(代码片段)

...c;自动网络请求提交此博客为中国大学MOOC北京理工大学《Python网络爬虫与信息提取》的学习笔记requests库的安装requests库是Python的第三方库,是目前公认的,爬取网页最好的第三方库。关于requests库的更多信息,可以在... 查看详情

scapy在windows上的安装

你需要以下为软件在Windows上安装Scapy: Python:Python2.7或3.3+。安装后,将Python安装目录及其脚本子目录添加到您的路径中。根据你的Python版本,默认是C:\python27和C:\python27\脚本分别。Npcap:最新版本。默认值是推荐。Scapy还... 查看详情

python与pathlib库的常见操作。(代码片段)

查看详情