加速Scapy扫描?

4

我正在使用scapy编写端口扫描程序,但发现其速度非常慢。实际进行扫描的代码只有一行:

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

而且,尽管我正在扫描的计算机与我的局域网相同,但需要大约15分钟才能运行。 哎呀,我甚至插在目标计算机的同一个交换机上!
我尝试了多线程,但它实际上使速度更慢。 使用多个进程速度更快,但是只有到一定程度。 因为Scapy的嗅探器无法跟上并且正在丢失数据包,要么是网络本身丢失数据包(不太可能,因为nmap工作正常)。 无论哪种情况,使用5个进程,我将TCP扫描时间缩短到大约5-6分钟,虽然是单进程运行的1/3,但仍比nmap的约10秒慢得多。
谁知道任何其他加速大范围Scapy端口扫描的技巧吗?

为什么你不能只使用nmap来运行你的扫描呢? - RyPeck
你的nmap扫描是否真正测试了所有的49151个端口,还是只测试了众所周知的子集?15分钟内的49151个端口平均每次尝试需要18毫秒。这对于局域网来说有点慢,但并不是非常慢。你到目标的ping时间是多少? - nobody
@RyPeck:说实话,我不确定。这只是我的老板要求的。 - Sohcahtoa82
@AndrewMedico:大约需要0.25-0.3毫秒。测试所有49151个端口。正如我之前提到的,nmap在不到30秒的时间内扫描完所有49151个端口。 - Sohcahtoa82
尝试这个:https://home.regit.org/2014/04/speeding-up-scapy-packets-sending/ - SuB
1个回答

1
请注意,在您的示例中,您忘记了至关重要的timeout参数:没有它,scapy将等待接收您发送的每个数据包的答案,而在您的情况下这永远不会发生!截至2018年(2.3.3dev(github版本)),运行
ans, unans = sr(IP(dst=targetIP)/TCP(dport=(1, 49151), flags='S', timeout=2))

需要大约90秒。挂起的PR https://github.com/secdev/scapy/pull/1142 可以将速度提高到约50秒。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接