所以基本上我正在尝试扫描在他们的网络服务器上运行例如版本 apache 2.2.4 的网络服务器,这样做的最佳方法是什么?
扫描从 blah blah 到 blah blah 的 IP 范围,打开端口 80 + Web 服务器,然后制作一个加载 ips 的脚本并检查它们是否有我想要的服务器横幅。
或者有什么更快的替代方法?
基本上我正在尝试制作像 ShodanHQ 这样的脚本。
我正在尝试让大量的网络服务器运行某个版本,任何人都可以给我一个方向,谢谢希望我很清楚。
要进行像Shodan或Scans.io这样的互联网范围内的调查,您需要非常高的带宽访问、来自 ISP 的法律批准(或至少视而不见),并且可能需要像Zmap或masscan这样的异步扫描仪。Nmap 是一个不错的选择--min-rate
。在您的操作系统上使用默认 TCP 堆栈的任何东西(例如curl
、netcat
或 Perl 解决方案)都无法跟上所需的高数据包量和目标数量。
然而,如果你想扫描一个较小的网络(比如一个有 65K 地址的 /16),那么 Nmap 就可以胜任了,它比异步扫描器需要更少的设置(因为它们需要防火墙设置来防止本机 TCP 堆栈响应到返回的探针),并且可以广泛使用。您可以使用此命令获得合理的性能:
sudo nmap -v -T5 -PS80 -p80 -sS --script http-server-header -oA scan-results-%D%T 10.10.0.0/16
这分解为:
-v
- 详细输出-T5
- 最快的时间选项。对于某些网络来说,这可能太多了;-T4
如果您怀疑结果丢失,请尝试。-PS80
- 仅考虑响应端口 80(打开或关闭)的主机。-p80
- 扫描活动主机上的 80 端口-sS
- 使用Nmap的半开SYN扫描,时序性能最好--script http-server-header
- 此脚本将从基本 GET 请求中获取服务器标头。或者,您可以用于http-headers
获取所有标头,或用于-sV --version-light
从探测响应中进行基本版本检测。-oA scan-results-%D%T
- 将 3 种格式输出到单独的时间戳文件中。您可以使用导入 Nmap XML 输出的众多工具之一来处理结果。你可以使用curl
and sed
:
curl -sI 'http://192.0.2.1' | sed -n 's/^Server:[[:blank:]]*//p'
从 perl 调用它:
perl -e '$server=`curl -sI 'http://192.0.2.1' | sed -n 's/^Server:[[:blank:]]*//p'`; print $server'
curl 中的 -I 选项使用 HEAD 请求打印 http 标头。