无法使用Scapy sendp()发送MPTCP数据包

时间:2014-11-25 07:11:57

标签: python networking tcp scapy

我在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的建议。

1 个答案:

答案 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数据包。