我在pcap文件中捕获了多路径TCP流量,其中包含支持MPTCP的修改内核。使用Scapy
的流量中的数据包的第2层标头提供了类似下面的内容,我无法理解,因为它不像以太网标头。
>>> 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的建议。
答案 0 :(得分:0)
使用的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')]
选项的最后一部分包含Kind=30
,表示这是一个MPTCP数据包。