开发者社区 问答 正文

为什么Scappy中的sr1总是返回None?

我试图创建一个三向握手与Scapy,但似乎没有任何端口返回任何东西,无论如何。不管发生什么,响应总是没有。

for i in range(20, 1025):
    syn_segment = TCP(dport=i, seq=123, flags='S')
    my_packet = address / syn_segment
    response = sr1(my_packet, timeout=2, verbose=False)
    if not (response is None):
        if response[TCP].flags == 18:
            print(f'port {i} is open')

问题来源StackOverflow 地址:/questions/59379591/why-does-sr1-in-scappy-always-return-none

展开
收起
kun坤 2019-12-29 21:56:17 658 分享 版权
阿里云 AI 助理回答

根据您的描述,您在使用Scapy尝试实现TCP三向握手以探测目标主机的端口开放情况时遇到了问题,即sr1()函数总是返回None。这可能有几个原因:

  1. 网络可达性问题:确保目标IP地址是可达的。如果目标不可达或防火墙阻止了您的探测包,您将收不到任何响应。

  2. ICMP错误消息被过滤:当目标主机或中间网络设备(如防火墙)拒绝或丢弃您的SYN包时,通常会返回一个ICMP错误消息(如类型3代码13的“目的端口不可达”)。但如果您没有配置Scapy来监听这些ICMP错误,您可能就只会看到None。您可以尝试在发送SYN包时启用ICMP错误监听,通过在sr1()中设置verbose=0和增加iface=参数指定网卡接口来获取更详细的输出信息。

  3. SYN Flood防护:许多系统和网络设备都启用了对SYN Flood攻击的防护,快速连续地发送大量SYN包可能会触发这些防护机制,导致您的数据包被丢弃且不返回任何响应。

  4. Scapy配置问题:确认Scapy是否正确安装并且版本兼容。有时候,Scapy的某些功能在特定版本下可能存在已知的问题。

  5. 操作系统限制:某些操作系统对未建立连接的SYN包有严格的限制,特别是当它们来自同一源时。检查并确保您的操作系统的网络栈配置允许此类行为。

  6. 端口扫描策略:目标系统可能特别配置了对端口扫描的响应策略,比如静默丢弃SYN请求而不响应RST或ACK,以避免泄露信息。

为了解决这个问题,您可以尝试以下步骤: - 确认网络可达性和目标系统的可达性。 - 调整Scapy的使用方式,考虑使用srloop()或者适当增加timeout值。 - 检查并调整系统及Scapy的配置,确保没有本地限制阻碍数据包发送或接收。 - 分析网络流量(使用Wireshark等工具),查看SYN包是否实际发出以及是否有响应被过滤或丢弃。 - 如果可能,尝试在不同网络环境下进行测试,排除特定环境因素的影响。

希望这些建议能帮助您解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: