Python scapy 构建多层嵌套数据包

Scapy 是一个相当灵活的网络库,并没有限制数据包可以有多少层,使用时可以根据需要添加或删除层(注意遵循正确的协议栈顺序,逐层向上构建,不要打乱顺序,至少我把IP放在ICMP后面是ping不通的...不服可以亲自体会一下 σ`∀´)σ),以及修改每一层的参数:

from scapy.all import *  
  
# 构建一个数据包,包含多个层次  
packet = (  
    Ether(dst="ff:ff:ff:ff:ff:ff", src="00:00:00:00:00:01") /  # 以太网层  
    IP(dst="192.168.1.1", src="192.168.1.2") /  # IP 层  
    TCP(dport=80, flags="S") /  # TCP 层  
    Raw(load="GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n")  # 原始数据层  
)  
  
# 发送数据包  
send(packet)  
  
# 嗅探数据包,并过滤出刚才发送的数据包  
# sniff() 函数中的 filter 参数使用了 BPF(Berkeley Packet Filter)语法来过滤数据包
# 过滤出源 IP 地址为 "192.168.1.2" 且目的 TCP 端口为 80 的数据包
# count=1 参数指定我们只嗅探一个数据包。
sniffed_packets = sniff(filter="ip src 192.168.1.2 and tcp port 80", count=1)  
  
for packet in sniffed_packets:  
    packet.show()

上面代码构建了一个包含四层的数据包:

  1. Ether 层:以太网层,包含目的和源 MAC 地址。
  2. IP 层:网络层,包含目的和源 IP 地址。
  3. TCP 层:传输层,这里是一个 TCP SYN 数据包,指定了目的端口(dport)为 80,并设置了 TCP 标志(flags)为 "S"。
  4. Raw 层:原始数据层,这里包含了一个简单的 HTTP GET 请求。

你可能感兴趣的:(python,网络)