使用 scapy 制作 S1AP 数据包

Crafting S1AP packet using scapy

在此先感谢您的帮助。我是 scapy 的新手(仅第 2 天)。我需要创建数据包并发送到网络接口,预期的协议栈是:ETH/IP/SCTP/S1AP/NAS。据我所知,直到 SCTP 这对于 scapy 来说是一项微不足道的任务,但是我有一个问题。我正在做以下事情:

eth_ip=Ether()/IP(src="192.168.1.1",dst="192.168.2.2")
sctp=SCTP(sport=1,dport=2,tag=0x0,chksum=1)
sctp_data=SCTPChunkData(len=4, tsn=1, stream_id=1, stream_seq=1, delay_sack=0, unordered=0, beginning=1, ending=1, proto_id=18, data="\x01" )
pkt1=eth_ip/sctp/sctp_data
wrpcap("sctp.pcap", pkt1)

所以,我制作了 1 个数据包并将其存储到 PCAP,当我在 Wireshark 中打开时它说数据包格式错误。我希望看到 Eth/ip/sctp/s1ap,当然 s1ap 消息不正确,但问题是我看到格式错误的 SCTP 层 3 次并且没有看到 S1AP。为什么?有人有有效的 SCTP Data Chunck 示例吗?


from scapy.layers.inet import Ether, IP
from scapy.layers.sctp import SCTP, SCTPChunkData


eth_ip = Ether() / IP(src="192.168.1.1",dst="192.168.2.2")
sctp = SCTP(sport=1,dport=2,tag=0x0)
sctp_data_payload = "    "
sctp_data_hdr = SCTPChunkData( data=sctp_data_payload )


pkt1 = eth_ip/sctp/sctp_data_hdr
pkt1.show2()

scapy.wrpcap("sctp.pcap", pkt1)

2 条提示:

  • 一般情况下最好让Scapy把链接层的协议放上去。 (除非你很了解协议)
  • pkt1.show2(),将使 scpy 构建数据包,解码然后打印。可以看到解码后就是你所期望的