如何扫描整个互联网



IPv4地址的整个范围是40亿个IP地址。这似乎是一个巨大的数字,但是可以在40分钟内对整个IPv4 Internet进行完整扫描,以寻找一个TCP端口,例如,查找世界上所有的Web服务器或所有开放的SSH端口。在这种情况下,一个服务器和一个千兆通道就足够了。例如,如果您收集有关世界上使用的技术的统计信息,或者估计对外开放的易受攻击的服务的百分比,这对研究很有用。Zmap

程序(不要与nmap混淆)由于特殊的体系结构,您可以比任何扫描仪更快地扫描大量网络。在本文中,我们将看一个示例,说明如何使用zmap编译世界上所有Web服务器的列表。有了具有开放HTTP端口的主机列表,您已经可以使用更智能的扫描器,并向其传递目标的准确列表。

什么是坏Nmap


传统上使用Nmap扫描小型子网-一种流行的开源多功能工具,其中包含许多Pentester包子。非常适合扫描小范围和选择性主机。 Nmap拥有自己的用于在lua中编写自定义脚本的引擎(Nmap脚本引擎)和许多很酷的现成脚本。但是nmap不太适合扫描大型网络,例如数百万甚至数十亿个地址。这样的任务将需要几天甚至几周的时间。事实是,nmap使用操作系统的网络子系统,并且为每个请求打开了完整的套接字。当您需要与服务聊天时(例如,向Web服务器发出GET请求),就不能没有完整的TCP连接。但这在需要快速SYN扫描时会大大降低性能,任务仅是查找端口是否打开。

Zmap和Masscan


Zmap和Masscan异步扫描程序更适合我们:两者的工作速度都更快,使用PF_RING驱动程序(可显着加快数据包捕获速度的套接字),并随机分配地址以避免致命的DoS。与Nmap不同,它们不使用系统TCP / IP:第一个使用裸露的以太网帧,第二个使用自写的TCP堆栈。

Masscan被认为是最快的Internet扫描程序,它可以在六分钟内遍历整个IPv4范围,但是只有几个并行连接的物理适配器才能从一个生成带有SYN数据包的传出流量,而答案又传到另一个。在单连接的情况下,修改后的Zmap快了近一半半。当然,这些记录设置在10 Gbit / s通道的顶部,并且要自己重复这些记录既困难又昂贵。在价格更便宜的千兆连接上,由于更有效地利用通道和CPU资源,Zmap的工作速度也比Masscan快,并且可以在45-50分钟内完成。


Zmap和Masscan的简化工作流程。传出流量生成器和传入响应处理器分别工作

在不涉及技术细节的情况下,Zmap和Masscan使用两个实体:包含SYN请求的传出流量生成器和单独的传入响应处理器。这里的性能仅受通道宽度和网络接口性能的限制,即PPS限制(每秒数据包)。因此,如果可以用传入数据包处理程序的地址替换源IP,则扫描过程可以分为多个接口,甚至可以分为多个物理主机。

扫描准备


必须记住,扫描器会利用整个可用通道来加载系统,尤其是网络接口。如果您在不警告主机的情况下开始扫描,则它看起来像DDoS,很可能会很快与网络断开连接。您还需要做好准备,扫描整个Internet会引起回应-他们将开始抱怨您。也就是说,主机将收到一堆自动信,抱怨“您正在扫描我们”。

因此,在开始您的项目之前,最好做好准备:

  • — ( - ). , . .
  • PTR- — , . , , . , PTR IP-, , - :
    scanner-for-educational-project.ivan-ivanov.com
  • User-Agent — - HTTP-, User-Agent, . , .
  • — , . .

NAT,


重要的是要了解zmap同时生成数百万个TCP请求。如果在Internet和扫描服务器之间安装了具有NAT的路由器,具有连接跟踪,DDoS保护的防火墙或任何其他具有状态防火墙的系统,该网络试图跟踪连接,则它将无法正常工作,因为它无法消化那么多连接。因此,您无法在NAT中(例如,在家庭WiFi路由器后面)运行zmap。

尝试Zmap


安装Zmap(指令

在简单的东西上进行测试,请从habr.com查看相邻的Web服务器:

$ zmap -p 80 178.248.237.0/24 -B 100M -o habr.txt

选项:

  • -p 80 -TCP端口80,即我们只在寻找HTTP服务器
  • 178.248.237.0/24是目标地址范围。如果未指定,则将扫描整个Internet。
  • -B 100M -zmap使用的最大通道宽度。如果未指定此选项,则将丢弃整个可用通道。
  • -o habr.txt-将结果写入文本文件。它将获得答复请求的地址,即在其上有一个HTTP服务器


用zmap扫描254个地址花费了几秒钟

Zmap输出格式


默认情况下,zmap只是将找到的地址添加到文本文件中,并用换行符将它们分开。但是它也可以以json和xml格式写入结果。选项--output-fields使您可以指定将添加到输出中的其他字段。

例如,让我们尝试使用更高级的json输出格式,指示响应请求和数据包的TTL到达的端口:

$ zmap -p80  --output-module=json --output-fields=ttl,sport,dport,saddr 178.248.237.68 -o habr.com.json

#  
$ cat habr.com.json
{ "ttl": 58, "sport": 80, "dport": 51309, "saddr": "178.248.237.68" }

扫描整个互联网!


我尝试在VPS上运行扫描,几分钟后,我被禁止检查服务器是否有病毒。这是非常合乎逻辑的,因为这样的扫描看起来像来自主机的DDoS。但是在与支持人员讨论我的任务之后,我被提议带上一台专用服务器并对其进行扫描。

这就是在200Mbit / s接口上进行扫描的样子,预计时间约为6个小时:


即使使用100 Mbit / s的信道,整个Internet仍可以扫描整夜。

接下来做什么


现在我们可以知道有多少个世界地址正在端口80上侦听并收集它们的列表。可以将其发送到L7扫描程序以分析应用程序层中的漏洞。

例如,使用nmap获取世界上所有Web服务器的HTML标题。对于nmap输入,我们以常规格式传输从zmap接收的文件:


$ nmap -sV -p 80 -v -n  --script http-title  -iL habr.txt




All Articles