如何加速Scapy扫描?

4 投票
1 回答
2124 浏览
提问于 2025-04-18 08:46

我正在用scapy写一个端口扫描器,但发现它慢得令人发指。我用一行代码来实际进行扫描:

ans, unans = sr(IP(dst=targetIP)/TCP(dport=(1, 49151), flags='S'))

结果运行大约要花15分钟,尽管我和被扫描的电脑在同一个局域网里。更夸张的是,我还插在和目标电脑同一个交换机上!

我尝试了多线程,但反而让速度变得更慢。使用多个进程虽然快一些,但也有个限度。要么是scapy的嗅探器跟不上,导致丢包,要么就是网络本身在掉包(这不太可能,因为nmap运行得很好)。不管怎样,使用5个进程后,我的TCP扫描时间缩短到了大约5-6分钟,虽然比单进程快了三分之一,但还是比nmap的10秒慢得多。

有没有人知道其他方法可以加速Scapy对大范围的端口扫描?

1 个回答

1

注意,在你的例子中,你忘记了 timeout 这个参数,这个参数非常重要:如果没有它,scapy 会一直等待你发送的每个数据包的回复,而在你的情况下,这个回复是永远不会来的!

从2018年开始(2.3.3dev 版本),运行

ans, unans = sr(IP(dst=targetIP)/TCP(dport=(1, 49151), flags='S', timeout=2))

大约需要90秒。而待处理的PR https://github.com/secdev/scapy/pull/1142 可以把这个时间缩短到大约50秒。

撰写回答