博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scapy构造数据包
阅读量:5233 次
发布时间:2019-06-14

本文共 1321 字,大约阅读时间需要 4 分钟。

一、进入scapy交互界面

在终端下输入:scapy ,进入交互界面:

二、查看scapy已经实现的网络协议

ls()         列出scapy中已实现的网络协议ls(协议类型)     查看某个协议头部字段格式lsc()        列出scapy中可以使用的命令或函数,比如嗅探时,我们经常会用到sniff()函数 IP().show()    显示包的IP信息 IP().display()    显示包的模板 dpkg = sniff(filter="tcp",count=4)dpkg[2].show()   显示包抓取到的tkpk的第3个数据包的的详细内容 dpkg[2].summary()    查看捕获到数据包的信息摘要 wrpcap("dpkgsniff.pcap",dpkg)     将嗅探到的packet内容写到pcap文件 dpkg_read = rdpcap("dpkgsniff.pcap")  读取pcap文件

三、构造数据包

#构造一个ip数据包dpkg = IP() #修改数据包的值 dpkg.ttl = 24

#构造一个ICMP数据包dpkg = ICMP() #构造一个TCP数据包 dpkg = TCP()

通过“/”来表示网络中各个层的组合

dpkg=Ether()/IP(dst="www.baidu.com")/TCP()/"GET /index.html HTTP/1.0 \n\n" dpkg.show() hexdump(dpkg)

sprintf()输出某一层某个参数的取值,如果不存在就输出”??”,具体的format格式是:%[[fmt][r],][layer[:nb].]field%

%[[fmt][r],][layer[:nb].]field%

layer: 协议层的名字,如Ether、IP、Dot11、TCP等。

filed: 需要显示的参数。

nb: 当有两个协议层有相同的参数名时,nb用于到达你想要的协议层。

r:  一个标志。当使用r标志时,意味着显示的是参数的原始值。

例如,TCP标志中使用人类可阅读的字符串’SA’表示SYN和ACK标志,而其原始值是18.

例子:pkt.sprintf("Etherent source: %Ether.src%   IP src: %IP.src%")   

或者:pkt.sprintf('%Raw.load%')   #其中Raw为具体的协议层

 显示具体的网络层的信息:

dpkg["IP"].show()  或者dpkg[IP].show()  也可以
dpkg["TCP"].show() dpkg["Raw"].show() #或者等价于 dpkg.getlayer(ip).show() dpkg.getlayer(TCP).show() dpkg.getlayer(Raw).show()

 

获取某个协议的具体字段值:

dpkg["Raw"].load dpkg.getlayer(TCP).window

 

转载于:https://www.cnblogs.com/liyuanhong/p/10925832.html

你可能感兴趣的文章
python_文件的打开和关闭
查看>>
mysql archive存储引擎导入数据报duplicate key
查看>>
ADO.NET介绍
查看>>
iOS: 数据持久化方案
查看>>
Neo4j学习笔记
查看>>
【C#】【Thread】Monitor和Lock
查看>>
builder模式的新学习
查看>>
UVALive - 3635 - Pie(二分)
查看>>
生活中的五个球
查看>>
android.os.NetworkOnMainthreadexception处理
查看>>
数据库复习⑥
查看>>
jQuery的中文乱码问题[转]
查看>>
bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演
查看>>
P1631 序列合并
查看>>
Luogu_4886 快递员
查看>>
内存优化文章链接
查看>>
ext4.0 代理 的使用
查看>>
数据检查约束类型和语法
查看>>
AngularJS实战之路由ui-view
查看>>
使用jQuery+huandlebars防止编码注入攻击
查看>>