Python微信订餐小程序课程视频
https://edu.youkuaiyun.com/course/detail/36074
Python实战量化交易理财系统
https://edu.youkuaiyun.com/course/detail/35475
1|00x00 简介
nmap还用介绍吗?搞安全的人还有不知道或者不会用nmap的吗?据我观察,能够全面灵活运用nmap的人其实并不多见。其实nmap早已经不再是你眼中那个网络层的扫描器软件了,早在十年前它就已经进化成为一个全功能的安全评估框架。今天,利用nmap强大的脚本功能,你可以轻松开发出任何漏洞检测和利用的功能,甚至完全不需要掌握那些常见的编程语言。本课我向你介绍了nmap几乎全部参数功能,同时演示了如何自己开发一个脚本的过程。
本文使用的nmap
版本是7.92

2|00x01 历史进程
- 诞生于1997年
- 最早的版本只有2000行代码,没有版本号
- 只作为端口扫描工具
- 6个月后成为黑客社区中网路扫描的事实标准
- 2003年发布3.45版本
- Fyodor开始全职维护nmap
- 增加了服务检测、OS检测、时间控制等功能
- 进入成熟期
- 2006年集成NSE
- 从单一的网络扫描工具,转变为可扩展的全功能漏洞评估引擎
3|00x02 默认扫描参数
- 默认
TCP
syn
扫描,利用TCP
的三次握手机制,当发送syn
包后,如果目标主机的那个端口是开着的,就会返回syn
+ack
数据包,同时nmap
接收到之后不再返回ack
的确认包,不会建立完成的TCP
连接,节约扫描发起者机器的资源
- 默认扫描
1000个
常用端口,包括http
、https
、ftp
、smtp
、ssh
等等
4|00x03 指定扫描IP
4|10x03-1 指定多个扫描IP
例子 |
含义 |
sudo nmap 10.0.2.1,2,25 |
扫描10.0.2.1 、10.0.2.2 、10.0.2.25 这3个IP |
sudo nmap 10.0.1,2.23,25 |
扫描10.0.1.23 、10.0.1.25 、10.0.2.23 、10.0.2.25 这4个IP |
sudo nmap 10.0,1.2,3.23,25 |
扫描10.0.2.23 、10.0.2.25 、10.0.3.23 、10.0.3.25 、10.1.2.23 、10.1.2.25 、10.1.3.23 、10.1.3.25 这8个IP |

例子 |
含义 |
sudo nmap 10.0.2.20-25 |
扫描10.0.2.20-25 这一段的IP |
sudo nmap 10.0.2-10,25 |
扫描10.0.2-10,25 这几段的IP |
sudo nmap 10.0.2-10.20-25 |
扫描10.0.2-10.20-25 这几段的IP |

例子 |
含义 |
sudo nmap 10.0.2.25/24 |
扫描10.0.2.1/24 这个网段中的所有IP |
sudo nmap 10.0.2.1/16 |
扫描10.0.2.1/16 这个网段中的所有IP |

例子 |
含义 |
sudo nmap -iL ip.txt |
扫描ip.txt 这个文件内容中所有的IP ,注意IP 得是一个一行的形式写入文件中 |

4|20x03-2 指定扫描域名
例子 |
含义 |
sudo nmap www.baidu.com |
扫描www.baidu,com 这个域名对应的IP |

4|30x03-3 排除要扫描的IP
例子 |
含义 |
sudo nmap 10.0.2.25/24 --exclude 10.0.2.2,3,4 |
扫描10.0.2.1/24 这个网段中除10.0.2.2 、10.0.2.3 、10.0.2.4 外的所有IP |
sudo nmap 10.0.2.25/24 --exclude 10.0.2.2-10 |
扫描10.0.2.1/24 这个网段中除10.0.2.2-10 这一段外的所有IP |
sudo nmap 10.0.2.25/16 --exclude 10.0.2.0/24 |
扫描10.0.2.1/16 这一大段中除10.0.2.0/24 这一小段外的所有IP |

例子 |
含义 |
sudo nmap 10.0.2.25/24 --excludefile exip.txt |
扫描10.0.2.25/24 这个网段中除exip.txt 文件内容中包含的IP 外的所有IP |

5|00x04 反向域名查询
5|10x04-1 -R 一定要做DNS反向域名查询
例子 |
含义 |
sudo nmap 220.181.38.251 -R -sn |
在扫描时一定要做DNS 反向域名查询,也就是查询IP 地址对应的域名,并且只做主机发现 |


5|20x04-2 -n 不做DNS反向域名查询
例子 |
含义 |
sudo nmap 220.181.38.251 -n -sn |
在扫描时不做DNS 反向域名查询,也就是不查询IP 地址对应的域名,并且只做主机发现 |


5|30x04-3 --dns-servers 指定 DNS 服务器做反向域名查询
例子 |
含义 |
sudo nmap 220.181.38.251 -R --dns-servers 114.114.114.114 -sn |
在扫描时做DNS 反向域名查询,指定DNS 服务器为114.114.114.114 ,并且只做主机发现 |


6|00x05 -e 指定发包网卡
例子 |
含义 |
sudo nmap 10.0.2.25 -e eth0 |
指定发扫描数据包的网卡为eth0 |

如果没有指定发包网卡,nmap
就会使用本机序号为第一个的网卡发扫描包
7|00x06 主机发现
做扫描的时候,先做主机发现,别一上来就对所有的IP
发送大量数据包进行端口扫描,不要做这种莽撞的行为,因为在扫描的时候经常会触发安全机制的报警,所以做扫描的时候要越隐蔽越好,先做主机发现再做端口扫描,不仅节省自己的时间,还能避免被发现,何乐而不为呢?
7|10x06-1 -sn 使用ICMP,TCP ping扫描,只做主机发现
向目标系统的80
或443
端口发送ICMP
和TCP
ping
扫描,如果目标系统返回了ICMP
响应包、SYN+ACK
包、RST+ACK
包,就认为这个IP
是活着的
并且判断完IP
是否是活着的之后,就会结束,不会再发送端口扫描数据包
例子 |
含义 |
sudo nmap -sn 192.168.123.2 |
扫描192.168.123.2 是否是活着的 |


7|20x06-2 -Pn 跳过主机发现环节
跳过主机发现环节,直接将IP
视为在线状态,直接发送大量的端口扫描数据包;不加此参数的情况是:若发现此IP
不在线,则不进行端口扫描
因为会发出大量的扫描数据包,一点也不隐蔽,所以用此参数来进行主机发现是不可取的
例子 |
含义 |
sudo nmap -Pn 192.168.123.2 |
扫描192.168.123.2 ,不管此IP 是否是活着的状态 |

7|30x06-3 --traceroute 显示经过的路由
例子 |
含义 |
sudo nmap www.baidu.com --traceroute -sn |
在扫描结果种显示每一跳经过的路由IP ,而且只做主机发现这一步 |
7|40x06-4 -PS 发送 TCP SYN 包
加入这个参数之后只会发送TCP
SYN
数据包包
例子 |
含义 |
sudo nmap 192.168.123.1 -PS -sn |
只发送TCP SYN 包进行主机发现 |


7|50x06-5 -PA 发送 TCP SYN 包
加入这个参数之后只会发送TCP
ACK
数据包
例子 |
含义 |
sudo nmap 192.168.123.1 -PA -sn -n |
只发送TCP ACK 包进行主机发现,并且跳过DNS 反向域名解析环节 |


7|60x06-6 -PU 发送 UDP 包
加入这个参数之后只会发送UDP
数据包
例子 |
含义 |
sudo nmap 192.168.123.1 -PU -sn -n |
只发送UDP 包进行主机发现,并且跳过DNS 反向域名解析环节 |