scapy
scapy介绍
抓包
要抓RoCE报文,可能会遇到以下一些问题:
1.远程调试抓包,权限报错
scapy.sniff抓包,远程调试可能会遇到权限报错问题,需要使用sudo命令执行,而此时你确实使用的是root登录,但依旧报错。那么,在中断窗口输入以下命令可解决。
sudo su
2、抓得到TCP/IP/UDP报文,抓不到RoCE报文
这个问题要拆解成两部分
1)一种情况是抓不到包,包括TCP/IP/UDP报文均抓不到
这个问题的解决办法是在scapy命令行界面 ifaces 列出网络接口名称,查找到本机网卡名后,通过指定iface网卡名后,得以解决。
scapy.sniff(prn=http_header, count=0, iface="enp129s0")
2)另一种情况是sniff只能使用enp命名规则的网卡进行抓包,实际上,这样是抓不到RoCE v2的包的。你可以用tcpdump工具试试,目前来说,不管是tcpdum还是scapy,想要抓到RoCE v2的包,只能用mlx这种命名网卡进行抓包。具体原因我还未细究,后续会补充。
这个问题的解决办法是:使用如下代码配置使用pcap功能,切换 数据包捕获函数库 整合 on 或 off 随时使用。
conf.use_pcap = True
load_contrib('roce')
IP/TCP等报文
RoCE v2报文
RoCE v2报文由Ether、IP、UDP、IB等报文头以及payload、ICRC、FCS组成。
实际上,不同服务类型、不同操作,IB对应的报文头还有所不同,这个会在协议字段分别说明。但是上述报文头均为RoCE v2报文结构所需。
RoCE v2报文解析
scapy目前已经支持部分RoCE报文解析:包括GRH、BTH与AETH等。
from scapy.contrib.roce import *
AETH
class scapy.contrib.roce.AETH(_pkt, /, *, syndrome=0, msn=0)
BTH
class scapy.contrib.roce.BTH(_pkt, /, *, opcode=0, solicited=0, migreq=0, padcount=0, version=0, pkey=65535, fecn=0, becn=0, resv6=0, dqpn=0, ackreq=0, resv7=0, psn=0, icrc=None)
CNPPadding
class scapy.contrib.roce.CNPPadding(_pkt, /, *, reserved1=0, reserved2=0)
GRH
class scapy.contrib.roce.GRH(_pkt, /, *, ipver=6, tclass=0, flowlabel=6, paylen=0, nexthdr=0, hoplmt=0, sgid=0, dgid=0)