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

标签 python networking tcp scapy

我使用支持 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/

相关文章:

python - 忽略大小写删除重复记录

java - 在java中将CIDR表示法转换为IP范围

networking - 调用 java -jar 时禁用互联网访问

python pyautogui 无法打印@

python - 将数据框列中的列表拆分为单独的列

python - django-admin makemessages : how does it work with txt, xml 和其他文件?

Linux 出包率

tcp - uTorrent 如何在 TCP 和 uTP 之间进行选择?

Perl RawIP CWR 标志

java - 套接字:BufferedOutputStream 还是 OutputStream?