多个目标的syn扫描端口的速度限制?

时间:2014-12-08 04:18:33

标签: python linux performance

我编写了一个小的原始数据包同步端口扫描程序来扫描ips列表并查明它们是否在线。 (顺便说一句,对于python2.7中的Debian)

基本意图是简单地检查某些网站是否可以访问,并通过在原始syn请求(端口80)之前加速该过程,但我偶然发现了什么。

为了好玩,我开始试图找出我能用这个(我知道的最快)检查技术有多快,但事实证明,尽管我只是在一个端口上发送原始syn数据包并听取响应在同一个端口上(使用tcpdump),连接可靠性从大约1500-2000个数据包/秒开始下降,此后不久,几乎整个网络开始阻塞在盒子上。

我想过这个,如果我把这个值与例如洪流播种/汲取数据包/秒扫描速度很慢。

我有一些想法为什么会发生这种情况,但我不是专业人士,我不知道如何检查我的假设是否正确。

首先可能是Linux网络有一些花哨的内部端口转发东西运行以保持发送端口打开(可能是iptables的某种功能?)因为脚本似乎能够接收到syn-ack即使关闭源端口。

如果是这样,是否有可能以某种方式阻止或绕过它?

另一个猜测是python库太愚蠢了,无法进行真正适当的原始数据包管理,但这不太可能,因为据我所知,它使用内部Linux函数来做到这一点。

  • 有没有人知道为什么会发生网络阻塞?
  • 与torrent连接或其他类似的东西有什么不同?
  • 我是否必须以其他方式发送数据包?

1 个答案:

答案 0 :(得分:0)

几个月前,我发现这个问题众所周知是c10k问题 它必须与内核在内部分配和处理tcp连接的方式有关 解决该问题的唯一有效方法是绕过内核tcp堆栈并自行实现各种其他低级别的东西 我所知道的所有好方法都在使用低级异步实现 根据规模,有一些很好的方法可以解决问题 有关详细信息,我建议您搜索c10k问题。