【问题标题】:How to capture the packets that you send in Scapy?如何捕获您在 Scapy 中发送的数据包?
【发布时间】:2017-08-13 09:20:43
【问题描述】:

我正在使用以下方式发送数据包:

     send(IP(dst="192.168.1.114")/fuzz(UDP()/NTP(version=4)), loop=1)

但我无法在同一网络上的任何其他附近机器(包括 IP 为 192.168.1.114 的机器)中捕获这些数据包。我使用 wlan 作为我的接口。

我也尝试嗅探,然后使用 scapy 重放,但我仍然无法捕获这些数据包。

【问题讨论】:

    标签: python network-programming scapy packet-sniffers fuzzing


    【解决方案1】:

    我会先尝试在执行程序时使用 tcpdump 捕获发送方机器上的流量:

     tcpdump -i any udp dst 192.168.1.114
    

    如果您可以看到离开源主机的流量,则可能是它没有到​​达目标主机。 UDP数据包是任何网络设备丢弃的第一个数据包,因为它是UDP的本质,它不会被重新传输。如果您确定数据包离开源,请验证它是否到达目标:

    tcpdump -i any upd dst 192.168.1.114
    

    要检查的另一点是您的防火墙设置。您的防火墙可能在源系统或目标系统上阻止这些请求。

    【讨论】:

    • 我可以捕获发件人机器上的流量,但不能捕获目标主机上的流量。我也尝试关闭防火墙。没有嗅探器能够捕获 scapy 正在播放的数据包。
    • @n0unc3 你有一些专业的网络交换机可以转储流量吗?您可能还可以看到一些关于丢弃多少 udp 数据包的计数器。
    【解决方案2】:

    我终于解决了这个问题。这是我制作的清单,在使用 scapy 处理重放/模糊测试时可能会对其他人有所帮助。

    1. 检查您正在处理的所有 IP 地址是否都在
      网络(使用 ping)
    2. 了解 send()(第 3 层)和 sendp()(第 2 层)之间的区别
    3. 如果改变现有数据包,请确保 删除校验和(使用'del')并重新计算校验和 使用 show2() 或使用 str 将数据包转换为字符串 然后将它们转换回数据包

    【讨论】:

      【解决方案3】:

      你应该使用 Wireshark,或者 Scapy 中的嗅探功能,让它漂亮地打印屏幕上的内容:

      sniff(lambda x:x.show())
      

      【讨论】:

      • TypeError: 'int' 和 'function' 的实例之间不支持'
      猜你喜欢
      • 2020-03-24
      • 2021-03-19
      • 1970-01-01
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多