我使用支持 MPTCP 的修改内核在 pcap 文件中捕获了多路径 TCP 流量。该流量中带有 Scapy
的数据包的第 2 层 header 给出了类似下面的内容,我无法理解,因为它不像以太网 header 。
>>> p = sniff(offline="my.pcap", count=1)[0]
>>> p.show()
###[ cooked linux ]###
pkttype = sent-by-us
lladdrtype= 0x1
lladdrlen = 6
src = '4@\xb5\x8e\x15\x92'
proto = IPv4
###[ IP ]###
version = 4L
ihl = 5L
...
...
...
当我尝试使用 sendp()
发送上述数据包时,我无法在转储中看到任何内容(tcpdump 和 Wireshark)。我想,由于没有目标mac地址,sendp()
是无法发送的。但是目标IP地址在那里。当我尝试使用 send() 发送时,它显示警告:"WARNING: Mac address to reach destination not found. Using broadcast."
但是,既然我已经使用 tcpdump
从实时流量中捕获了该数据包,那么它是如何仅使用目标 IP 地址发送的呢?在 Scapy/Python 中有解决方法吗?
我还想要一些关于在 Python 中使用 MPTCP 的建议。
最佳答案
使用的 pcap 文件包含不正确的数据包。使用启用了 MPTCP 的内核启动并进行了全新测试。这是我从包含有效以太网地址的 MPTCP 数据包中得到的。
>>> ack_pkt = sniff(offline="../mptcp/mptcpdemo.pcap", count=14)[0]
>>> ack_pkt.show()
###[ Ethernet ]###
dst = 00:**:**:**:**:44
src = 34:**:**:**:**:92
type = IPv4
###[ IP ]###
version = 4L
ihl = 5L
tos = 0x0
len = 72
...
...
...
###[ TCP ]###
...
...
...
options = [('MSS', 1460), ('SAckOK', ''), ('Timestamp', (523099492, 0)),
('NOP', None), ('WScale', 7), (30, '\x00\x81\x8bxb\xdfZ\xbdS\t')]
Options 的最后一部分包含 Kind=30
,表示这是一个 MPTCP 数据包。
关于python - 无法使用 Scapy sendp() 发送 MPTCP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27120703/