# Nmap端口扫描 [nmap官方文档](https://nmap.org/man/zh/) ## 常用参数 ```bash nmap -T4 -A -v -Pn IP #最常用的一种扫描 -T4 #设置时序,越高扫描越快 -A #启用操作系统检测,版本检测,脚本扫描和跟踪路由 -v #增加详细级别(使用-vv或更高级别以获得更好的效果) -Pn #无ping扫描 ``` ## 主机发现 ```bash nmap [Scan Type(s)] [Options] {target specification} #指令格式 #Scan Types 指探测类型: -PS 指 TCP SYN Ping, -PA 指 TCP ACK Ping, -PU 指 UDP Ping -PE #ICMP Ping,现在很多主机封锁这些报文,适用于管理员监视内部网络 #Options 指探测选项: -n 指不对活动的 IP 地址进行反向域名解析,用以提高扫描速度 -R 指对活动的 IP 进行反向域名解析 #target specification 指探测的目标地址或 IP 地址范围 192.168.0.1-255 ``` **默认主机发现扫描** ```bash nmap 192.168.0.1-255 ``` Nmap 会发送一个 ICMP echo 请求,一个 TCP SYN 包给 443 端口,一个 TCP ACK 包给 80 端口和一个 ICMP 时间戳请求 这就等价于使用命令 `nmap -PE -PS443 -PA80 -PP 192.168.0.1-255` 此命令返回一个 IP 地址段中活动的主机,及其 IP 地址,主机域名,开启的服务以及相应的端口,MAC 地址等信息 **其它命令** ```bash nmap -sP 192.168.0.1-255 #ping扫描,只列出存活主机,速度最快 nmap -Pn 192.168.0.1-255 #无ping扫描,结果和默认主机发现一样 ``` ## 其它参数 ```bash -O #启用操作系统检测 -sV #探测服务版本信息 -v #增加详细级别(使用-vv或更高级别以获得更好的效果) --script=script_name #使用nse脚本 ``` ## 端口扫描 ```bash nmap -p 1-65535 192.168.0.8 # -p选项,只扫描指定的端口 ``` ## Nmap所识别的6个端口状态 **open(开放的)** 应用程序正在该端口接收TCP 连接或者UDP报文。 **closed(关闭的)** 关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 **filtered(被过滤的)** 由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。 过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。 **unfiltered(未被过滤的)** 未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。 **open|filtered(开放或者被过滤的)** 当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。 因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。 **closed|filtered(关闭或者被过滤的)** 该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。 ## 端口扫描技术 ```bash #只列举常见的,详细可参考官方文档 -sT #TCP连接扫描 -sS #SYN扫描 -sU #UDP扫描 nmap -sU -p 53 192.168.1.1 -sA #ACK扫描 -sF #FIN扫描 ``` **TCP连接扫描** 使用操作系统的网络连接系统调用 connect(),对目标主机发起 TCP 三路握手,待完成后 Nmap 立即中断此次连接。 Nmap 通过获取每个尝试连接的状态信息来判定侦测端口的状态 **SYN扫描** Nmap 产生一个 SYN 数据报文,如果侦测端口开放并返回 SYN-ACK 响应报文 Nmap 据此发送 RST 报文给侦测端口结束当前连接,这样做的好处在于缩短了端口扫描时间 **UDP扫描** UDP 本身是无连接的协议,Nmap 向目标主机的端口发送 UDP 探测报文 如果端口没有开放,被侦测主机将会发送一个 ICMP 端口不可到达的消息 Nmap 根据这个消息确定端口闭合(closed)或者被过滤 (unfiltered) 通常没有回复意味着端口是开放(open)状态 。 **ACK扫描** 这种扫描比较特殊,它不能确切知道端口的基本状态,而是主要用来探测防火墙是否存在以及其中设定的过滤规则 **FIN扫描** 和 SYN 扫描相比,这种方式更为隐蔽,因此能够穿过防火墙的过滤 关闭(closed)端口将会返回合适的 RST 报文,而开放端口将忽略这样的侦测报文 具备类似防火墙不敏感特性的还有 -sN NULL 扫描,-sX X-mas 扫描。 ## 防火墙/IDS逃逸 ```bash nmap -f --mtu=16 192.168.0.8 #报文分段,mtu必须是8的倍数 nmap -sI www.0day.com:80 192.168.0.8 #源IP欺骗 nmap --source-port 53 192.168.0.8 #源端口欺骗 #防火墙对服务器的设置会根据端口选择是否信任数据流 #管理员可能会认为这些端口不会有攻击发生,所以可以利用这些端口扫描 nmap --data-length 30 192.168.0.8 #在原来报文基础上,附加随机数据,达到规避防火墙的效果 nmap --spoof-mac 0 192.168.0.8 #指定一个随机的MAC地址 ``` ## 补充说明 1、扫描82网段下所有在线主机及其端口 ```bash nmap 10.6.82.0/24 ``` 2、扫描82网段下所有在线windows主机名称 ```bash nmap -sU -p 137 --script nbstat.nse 10.6.82.0/24 ``` 3、扫描某IPV6地址在1-1000范围内开放的端口 ```bash namp -6 -p 1-1000 240e:3a4:5004:bcf1::fbc ``` Loading... # Nmap端口扫描 [nmap官方文档](https://nmap.org/man/zh/) ## 常用参数 ```bash nmap -T4 -A -v -Pn IP #最常用的一种扫描 -T4 #设置时序,越高扫描越快 -A #启用操作系统检测,版本检测,脚本扫描和跟踪路由 -v #增加详细级别(使用-vv或更高级别以获得更好的效果) -Pn #无ping扫描 ``` ## 主机发现 ```bash nmap [Scan Type(s)] [Options] {target specification} #指令格式 #Scan Types 指探测类型: -PS 指 TCP SYN Ping, -PA 指 TCP ACK Ping, -PU 指 UDP Ping -PE #ICMP Ping,现在很多主机封锁这些报文,适用于管理员监视内部网络 #Options 指探测选项: -n 指不对活动的 IP 地址进行反向域名解析,用以提高扫描速度 -R 指对活动的 IP 进行反向域名解析 #target specification 指探测的目标地址或 IP 地址范围 192.168.0.1-255 ``` **默认主机发现扫描** ```bash nmap 192.168.0.1-255 ``` Nmap 会发送一个 ICMP echo 请求,一个 TCP SYN 包给 443 端口,一个 TCP ACK 包给 80 端口和一个 ICMP 时间戳请求 这就等价于使用命令 `nmap -PE -PS443 -PA80 -PP 192.168.0.1-255` 此命令返回一个 IP 地址段中活动的主机,及其 IP 地址,主机域名,开启的服务以及相应的端口,MAC 地址等信息 **其它命令** ```bash nmap -sP 192.168.0.1-255 #ping扫描,只列出存活主机,速度最快 nmap -Pn 192.168.0.1-255 #无ping扫描,结果和默认主机发现一样 ``` ## 其它参数 ```bash -O #启用操作系统检测 -sV #探测服务版本信息 -v #增加详细级别(使用-vv或更高级别以获得更好的效果) --script=script_name #使用nse脚本 ``` ## 端口扫描 ```bash nmap -p 1-65535 192.168.0.8 # -p选项,只扫描指定的端口 ``` ## Nmap所识别的6个端口状态 **open(开放的)** 应用程序正在该端口接收TCP 连接或者UDP报文。 **closed(关闭的)** 关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。 **filtered(被过滤的)** 由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。 过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。 **unfiltered(未被过滤的)** 未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。 **open|filtered(开放或者被过滤的)** 当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。 开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。 因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。 **closed|filtered(关闭或者被过滤的)** 该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中。 ## 端口扫描技术 ```bash #只列举常见的,详细可参考官方文档 -sT #TCP连接扫描 -sS #SYN扫描 -sU #UDP扫描 nmap -sU -p 53 192.168.1.1 -sA #ACK扫描 -sF #FIN扫描 ``` **TCP连接扫描** 使用操作系统的网络连接系统调用 connect(),对目标主机发起 TCP 三路握手,待完成后 Nmap 立即中断此次连接。 Nmap 通过获取每个尝试连接的状态信息来判定侦测端口的状态 **SYN扫描** Nmap 产生一个 SYN 数据报文,如果侦测端口开放并返回 SYN-ACK 响应报文 Nmap 据此发送 RST 报文给侦测端口结束当前连接,这样做的好处在于缩短了端口扫描时间 **UDP扫描** UDP 本身是无连接的协议,Nmap 向目标主机的端口发送 UDP 探测报文 如果端口没有开放,被侦测主机将会发送一个 ICMP 端口不可到达的消息 Nmap 根据这个消息确定端口闭合(closed)或者被过滤 (unfiltered) 通常没有回复意味着端口是开放(open)状态 。 **ACK扫描** 这种扫描比较特殊,它不能确切知道端口的基本状态,而是主要用来探测防火墙是否存在以及其中设定的过滤规则 **FIN扫描** 和 SYN 扫描相比,这种方式更为隐蔽,因此能够穿过防火墙的过滤 关闭(closed)端口将会返回合适的 RST 报文,而开放端口将忽略这样的侦测报文 具备类似防火墙不敏感特性的还有 -sN NULL 扫描,-sX X-mas 扫描。 ## 防火墙/IDS逃逸 ```bash nmap -f --mtu=16 192.168.0.8 #报文分段,mtu必须是8的倍数 nmap -sI www.0day.com:80 192.168.0.8 #源IP欺骗 nmap --source-port 53 192.168.0.8 #源端口欺骗 #防火墙对服务器的设置会根据端口选择是否信任数据流 #管理员可能会认为这些端口不会有攻击发生,所以可以利用这些端口扫描 nmap --data-length 30 192.168.0.8 #在原来报文基础上,附加随机数据,达到规避防火墙的效果 nmap --spoof-mac 0 192.168.0.8 #指定一个随机的MAC地址 ``` ## 补充说明 1、扫描82网段下所有在线主机及其端口 ```bash nmap 10.6.82.0/24 ``` 2、扫描82网段下所有在线windows主机名称 ```bash nmap -sU -p 137 --script nbstat.nse 10.6.82.0/24 ``` 3、扫描某IPV6地址在1-1000范围内开放的端口 ```bash namp -6 -p 1-1000 240e:3a4:5004:bcf1::fbc ``` 最后修改:2024 年 10 月 21 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏