| 传输层 | TCP UDP |
| 网络层 | IP ICMP |
| 链路层 | ARP RARP |
分层后构造数据包会很简单。一个数据包并不是必须同时包含这四层协议,也不是同一层只能包含1个协议
在kali中,命令:scapy,可以启动Scapy编程环境
2、Scapy中的分层结构
使用“类+属性”的方式构造数据包,在scapy中每一个网络协议就是一个类,协议中的字段就对应着属性。只需要实例化一个协议类,就可以创建一个该协议类型的数据包
例如,构造一个IP数据包
IP()
选择"from 模块 import 类"的形式导入
from scapy.all import IP
pkt=IP()
print(pkt)
对于IP来说,最重要的属性是源地址和目标地址,这两个属性在Scapy中使用参数src和dst来设置
要构造一个发往192.168.x.x的IP数据包
ip=IP(dst="192.168.x.x")
查看数据包格式的函数ls(),不了解如何为一个IP数据包指定目标地址的时候
from scapy.all import IP,ls
pkt=IP()
ls(pkt)
scapy采用分层的方式构造数据包,通常最底层的协议是Ether–》IP–》TCP/UDP
使用Ether(),这个类可以设置发送方和接收方的MAC地址。产生一个广播数据包,命令如下
Ether(dst="ff:ff:ff:ff:ff:ff")
分层是通过"/"实现的。如果一个数据包是由多层协议组合而成,就可以用“/”分开,并按照协议由底而上的顺序从左向右