Nmap
Nmap 使用方法、小技巧
Nmap中文手册,保存为 HTML 格式打开
基本扫描
1 | nmap -T4 -sn [ip] # 主机发现 |
高级扫描
1 | -iflist # 查看本地路由和接口,当遇到无法达到目标主机或想选择从多块网卡中某一特定网卡访问目标主机时,可以查看nmap –iflist中提供的网络接口信息。 |
Nmap 端口状态
状态 | 说明 |
---|---|
open | 应用程序在该端口接收 TCP 连接或者 UDP 报文 |
closed | 关闭的端口对于nmap也是可访问的, 它接收nmap探测报文并作出响应。但没有应用程序在其上监听 |
filtered | 由于包过滤阻止探测报文到达端口,nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由规则 或者主机上的软件防火墙 |
unfiltered | 未被过滤状态意味着端口可访问,但是nmap无法确定它是开放还是关闭。 只有用于映射防火墙规则集的 ACK 扫描才会把端口分类到这个状态 |
open | filtered | 无法确定端口是开放还是被过滤, 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何反应。UDP,IP协议, FIN, Null 等扫描会引起。 |
扫描防火墙
命令 | 类型 | 说明 |
---|---|---|
nmap -sS [ip] |
SYN 扫描 | - |
nmap -sF [ip] |
FIN 扫描 | 识别端口是否关闭,收到RST说明端口关闭,否则为 open 或者 filtered |
nmap -sA [ip] |
ACK 扫描 | 识别端口是否被过滤,收到RST说明端口未被过滤(open 或者 closed) |
nmap -sW [ip] |
Window 扫描 | 只用于某些 TCP/IP 协议实现,发送ACK,检查回复的RST包中的 Window size,关闭的端口为0,开放的端口非0 |
用以上方式交叉扫描可以得出端口的真实状态。
扫描路由器
1 | nmap -p1-25,80,512-515,2001,4001,6001,9001 |
扫描互联网
1 | nmap -iR 100000 -sS -PS80 -p 80 -oG nmap.txt |
随机生成 10w 个 IP 地址,对它们的80端口进行扫描,将结果以 grepable 格式输出到 nmap.txt
1 | nmap -iR 1200000 -sL -n | grep ”not scanned” | awk ’{print $2}’ | sort -n | uniq >! tp; head -25000000 tp >! tcp-allports-1M-IPs; rm tp |
随机生成1200000个IP地址(-iR 120000),并进行列表扫描(-sL,列举出IP地址,不进行真正的扫描),不进行dns解析操作(-n),这样将产生Nmap列表扫描的结果。在此 结果中搜出未扫描的行(grep “not scanned”),打印出每一行的第二列内容(awk ‘{print $2}’,也就是IP地址),然后对获取到的IP地址进行排序(sort -n),然后剔除重复IP地址,将结果保存到临时文件tp,再取出前1000000个IP地址保存到tcp-allports-1M-IPs文件中,删除 临时文件。
1 | nmap -sP -PE -PP -PS21,22,23,25,80,113,31339-PA80,113,443,10042 –source-port 53 -T4 -iL tcp-allports-1M-IPs |
使用产生的IP地址(-iL tcp-allports-1M-IPs),指定发送包的源端口为53(–source-port 53,该端口是DNS查询端口,一般的防火墙都允许来自此端口的数据包),时序级别为4(-T4,探测速度比较快),以TCP SYN包方式探测目标机的21,22,23,25,80,113,31339端口,以TCP ACK包方式探测对方80,113,443,10042端口,另外也发送ICMP ECHO/ICMP TIMESTAMP包探测对方主机。只要上述的探测包中得到一个回复,就可以证明目标主机在线。
1 | nmap -S [srcip] -d –max-scan-delay 10 -oAlogs/tcp-allports-%T-%D -iL tcp-allports-1M-IPs –max-retries 1–randomize-hosts -p- -PS21,22,23,25,53,80,443 -T4 –min-hostgroup 256 –min-rate175 –max-rate 300 |
使用包含100万个IP地址的文件(-iL tcp-allports-1M-IPs),源端IP地址设置为srcip(指定一个IP地址,保证该IP地址位于统一局域网中,否则无法收到目标机的回 复包),主机发现过程使用TCP SYN包探测目标机的21,22,23,25,53,80,443,扫描过程将随机打乱主机顺序(–randomize-hosts,因为文件中的IP 已经排序,这里将之打乱,避免被防火墙检查出),端口扫描过程检查全部的TCP端口(-p-,端口1到65535),使用时序级别为4(-T4,速度比较 快),将结果以XML/grepable/普通格式输出到文件中(-oA logs/tcp-allports-%T-%D,其中%T表示扫描时间,%D表示扫描日期)。
-d表示打印调试出信息。
–max-scan-delay 10表示发包最多延时10秒,防止特殊情景下等待过长的时间。
–max-retries 1,表示端口扫描探测包最多被重传一次,防止Nmap在没有收到回复的情况下多次重传探测包,当然这样也会降低探测的准确性。
–min-host-group 256表示进行端口扫描与版本侦测时,同时进行探测的主机的数量,这里至少256个主机一组来进行扫描,可以加快扫描速度。
–min-rate 175和–max-rate 300,表示发包速率介于175和300之间,保证扫描速度不会太慢,也不会因为速率过高引起目标机的警觉。
由以上扫描得出互联网上最可能开放的 10 个 TCP 端口:
1 | 80 (http) |
最可能开放的 UDP 端口:
1 | 137 (netbios-ns) |
扫描 Web 站点
1 | nmap -sV -p 80 -T4 –script=http*,default scanme.nmap.org |