【问题标题】:Scapy - crafted ICMP replies being ignored by senderScapy - 精心制作的 ICMP 回复被发件人忽略
【发布时间】:2022-01-19 21:23:56
【问题描述】:

我编写了一个小应用程序来响应 ICMP,但是发件人似乎忽略了 ICMP 回复。检查 Wireshark 中的数据包,它们缺少时间戳字段,并且来自实际设备的工作 ICMP 回复包含时间戳字段,这只是我缺少它们的一种情况吗?

我已经毒化了 ARP 缓存,所以它在 ARP 表中有正确的 ARP 映射。

我已经使用 TCPDump 确认 ICMP 回复至少会到达接口,不确定它们是否正在处理超出此范围 - 如果有人对在哪里检查有任何建议,将不胜感激

    def respond_to_icmp(self, icmp_packet):
     if icmp_packet["IP"].dst == self.ip: # if this is my IP
        eth = Ether(dst=icmp_packet["Ether"].src, src=self.mac)
        ip = IP(src=icmp_packet["IP"].dst, dst=icmp_packet["IP"].src)
        icmp = ICMP(type=0, id=icmp_packet['ICMP'].id, seq=icmp_packet['ICMP'].seq)
        icmp_reply = eth/ip/icmp
        sendp(icmp_reply, iface=self.interface) # eth0 (on which it is received)

ICMP 回复包

###[ Ethernet ]### 
  dst       = de:ad:be:ef:ee:ff
  src       = aa:bb:cc:dd:ee:ff
  type      = IPv4
###[ IP ]### 
  version   = 4
  ihl       = None
  tos       = 0x0
  len       = None
  id        = 1
  flags     = 
  frag      = 0
  ttl       = 64
  proto     = icmp
  chksum    = None
  src       = 192.168.3.46
  dst       = 192.168.3.1
  \options   \
###[ ICMP ]### 
 type      = echo-reply
 code      = 0
 chksum    = None
 id        = 0x6b86
 seq       = 0x19f

来自发件人的 ICMP 活动

21:14:06.487711 IP 192.168.3.46 > 192.168.3.1: ICMP echo reply, id 0, seq 0, length 8
21:14:07.417939 IP 192.168.3.1 > 192.168.3.46: ICMP echo request, id 27526, seq 52, length 64
21:14:07.487494 IP 192.168.3.46 > 192.168.3.1: ICMP echo reply, id 0, seq 0, length 8
21:14:08.441948 IP 192.168.3.1 > 192.168.3.46: ICMP echo request, id 27526, seq 53, length 64
21:14:08.548995 IP 192.168.3.46 > 192.168.3.1: ICMP echo reply, id 0, seq 0, length 8

实际 ICMP 结果

From 192.168.3.1 icmp_seq=368 Destination Host Unreachable
From 192.168.3.1 icmp_seq=369 Destination Host Unreachable
From 192.168.3.1 icmp_seq=370 Destination Host Unreachable
From 192.168.3.1 icmp_seq=458 Destination Host Unreachable
From 192.168.3.1 icmp_seq=459 Destination Host Unreachable
From 192.168.3.1 icmp_seq=460 Destination Host Unreachable

【问题讨论】:

    标签: python-3.x network-programming ping scapy spoofing


    【解决方案1】:

    原来当Linux负责ICMP的时候,它包含了一个不错的小数据payload,如果没有将这个payload添加到reply中,Linux一定会认为数据包有错误或畸形。

        def respond_to_icmp(self, icmp_packet):
        if icmp_packet["IP"].dst == self.ip:
            eth = Ether(dst=icmp_packet["Ether"].src, src=icmp_packet["Ether"].dst)
            ip = IP(src=icmp_packet["IP"].dst, dst=icmp_packet["IP"].src)
            icmp = ICMP(type=0, id=icmp_packet['ICMP'].id, seq=icmp_packet['ICMP'].seq)
            raw = Raw(load=icmp_packet["Raw"].load)
            icmp_reply = eth/ip/icmp/raw
            sendp(icmp_reply, iface=self.interface)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 2014-09-03
      • 2018-06-27
      • 2020-11-23
      • 1970-01-01
      相关资源
      最近更新 更多