【计算机网络安全】nmap使用及原理

0x00  Nmap介绍

nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

目录

0x00  Nmap介绍

0x01  端口扫描

1. 指定端口

2. 指定扫描方式

2.1 TCP全连接扫描

2.2 SYN半链接扫描

2.3 隐秘扫描

0x02  主机探测

1、服务识别

0x03  系统识别

0x04  扫描结果导出


0x01  端口扫描

扫描主机的「开放端口」,在nmap后面直接跟主机IP或者域名(默认扫描1000个端口)

我们可以直接用kali扫描自己的主机,我们首先在主机输入ipconfig命令获得主机的ip

可以用kali,也可以用wsl,我用的是wsl(wsl就是windows平台的kali虚拟机,可以在windows上直接使用),比较方便,但是刚开始ping不通主机,浪费了一些时间修复。

如下,先测试一下网络连通性,可以ping通表示网络连接良好。

接下来进行nmap扫描主机。

从上图可以看到,扫描了1000个端口,其中994个端口关闭,结果中列出的6个端口就是开放的端口。

1. 指定端口

扫描「指定端口」,使用 -p 参数,可以一次扫描单个端口、多个端口、或扫描一个范围的端口

nmap 192.168.0.100 -p 80

nmap 192.168.0.100 -p 1-80

nmap 192.168.0.100 -p 80,3389,22,21

nmap 192.168.0.100 -p 1-65535

nmap 192.168.0.100 -p- # -p- 等价于 -p 1-65535

我用-p 100-200,指定了nmap去扫描100到200的端口,扫描出来了2个开放端口。

2. 指定扫描方式

我们通过「wireshark」抓包分析不同扫描方式的请求信息,从而判断这些方式的区别。
输入过滤条件ip.addr == 192.168.31.180 and tcp.port == 80后,点击箭头应用。

IMG_259

这个过滤条件的意思是:过滤IP地址是 192.168.31.180 并且 端口是 TCP的80端口。

设置完过滤条件后,我们在命令行执行扫描命令,然后查看「wireshark」中的请求包。

2.1 TCP全连接扫描

使用 -sT 参数进行TCP全连接扫描。

「全连接扫描」使用完整的三次握手建立链接,能够建立链接就判定端口开放,否则判定端口关闭。

三次握手(Three-Way Handshake)是TCP协议中建立连接的过程。它的主要目的是为了在客户端和服务器之间建立可靠的通信通道。这个过程包括以下三个步骤:

  1. SYN:客户端向服务器发送一个SYN(同步序列编号)包,表示请求建立连接。这个包中包含客户端的初始序列号。

  2. SYN-ACK:服务器收到SYN包后,回复一个SYN-ACK包,表示同意建立连接,并返回自己的初始序列号。

  3. ACK:客户端收到SYN-ACK包后,再发送一个ACK(确认)包,确认收到服务器的SYN-ACK包,完成连接的建立。

nmap 192.168.31.180 -p 80 -sT

  1. 如果端口开放,就会进行完整的三次握手,成功建立链接,扫描结果中,STATE字段显示为 open 。

这里我开启了本地的http服务,我用phpstudy简单搭建了一个web服务,开启开启80 web服务。

这里看到主机向kali返回了一个SYN响应包,进行了完整的三次握手。

这里可以看见172.30.59.7先向192.168.131.171进行第一次握手,然后192.168.131.171向它发了个SYN-ACK确认包[第二次握手],最后172.30.59.7发了个RST-SYN确认包来终止。

RST-SYN是一种TCP通信中的控制标志,用于处理异常情况。以下是对RST和SYN的简要说明:

  • RST(Reset):当一方希望强制终止连接时,发送RST标志。这通常发生在接收到意外的或不合法的报文时。RST包会立即通知另一方,连接已经被重置。

  • SYN(Synchronize):用于初始化连接的请求,作为三次握手的一部分,表示要建立一个新的连接。

2)如果端口关闭,就只能进行一次握手,无法建立链接,扫描结果中,STATE字段显示为 closed。

这里我将主机的web服务关闭

可以看到没有返回响应包。

2.2 SYN半链接扫描

使用 -sS 参数进行SYN半链接扫描。

「半链接扫描」只进行两次握手,对方返回确认帧(ACK=1)就判定端口开放,否则判定端口关闭。

nmap 192.168.131.171 -p 80 -sS

1)如果端口开放,就会进行两次握手,扫描结果中,STATE字段为 open 。

2)如果端口关闭,就只有一次握手,扫描结果中,STATE字段为 closed。

关闭小皮

显示关闭。

2.3 隐秘扫描

隐秘扫描,只适用于Linux系统。

「隐秘扫描」向目标主机的端口发送TCP FIN包 或 Xmas tree包 或 Null包,如果收到RST响应包,就判定端口关闭,否则就判定端口开放或被屏蔽(open/filtered)

nmap 192.168.0.100 -p 80 -sF # Fin扫描

nmap 192.168.0.100 -p 80 -sN # Null扫描(所有flags都为0的TCP包)

nmap 192.168.0.100 -p 80 -sX # Xmas扫描(flags的FIN、URG、PUSH都为1的包)

0x02  主机探测

扫描网段中有哪些主机在线,使用 -sP 参数,不扫描端口,只扫描「存活主机」。

本质上是Ping扫描,能Ping通有回包,就判定主机在线。

nmap -sP 192.168.131.171/24

1、服务识别

扫描端口时,默认显示端口对应的服务,但不显示服务版本。

想要识别具体的「服务版本」,可以使用 -sV 参数。

nmap 192.168.131.171 -p 80 -sV

扫描结果中,VERSION字段显示服务的详细版本。

我们可以看到apache的版本。

0x03  系统识别

想要识别「操作系统版本」,可以使用 -O 参数。

nmap 192.168.131.171 -p 80 -O

提示:

  1. Nmap扫描出的系统版本并完全准确,仅供参考。
  2. 当识别不出具体版本时,Nmap会以概率的形式列举出可能的操作系统,如上图所示。

0x04  扫描结果导出

Nmap的扫描结果可以保存到文件中,比如文本格式、XML格式。

1)将扫描结果导出为「文本格式」,结果原样保存。

nmap 192.168.131.171 -p 80 -oN result.txt

2)将扫描结果导出为「xml格式」,结果的保存格式会发生变化。

nmap 192.168.131.171 -p 80 -oX result.xml

### Nmap 端口扫描使用教程 #### 安装Nmap 对于CentOS系统,可以通过`yum install nmap`来安装此工具[^2]。 #### 基础命令结构 Nmap的基础语法非常直观。最基础的形式就是提供一个目标IP地址或域名给Nmap进行扫描: ```bash nmap <target> ``` 这会触发一次默认的SYN扫描,它尝试连接到常见的1000个端口中并报告哪些处于开放状态[^4]。 #### 获取详细输出 为了获得更详尽的结果描述,在上述基础上添加参数`-v`可使程序运行得更加健谈,给出更多关于其操作的信息;而加上`-A`则能激活操作系统检测、版本检测、脚本扫描以及 traceroute 功能: ```bash nmap -v -A <target> ``` 这种组合不仅能够显示端口的状态(如open, closed 或 filtered),还能推测远程设备的操作系统类型及其上运行的服务版本信息[^1]。 #### 自定义端口范围 当需要检查特定的一组端口而非默认集时,可通过指定端口号列表或者区间实现这一点。例如要测试第22号至第80号之间的所有TCP端口可用性,则应输入如下指令: ```bash nmap -p 22-80 <target> ``` 同样地,也可以通过逗号分隔的方式列举多个不连续的目标端口,像这样:`-p 22,80,443`。 #### 扰乱端口扫描顺序 为了避免被防火墙轻易识别为恶意活动,默认按序排列的端口查询模式可以被打乱。为此只需加入`-r`标志位即可改变原有行为特性,使得每次发起请求前都会随机化待访问端口序列: ```bash nmap -r <target> ``` 这样做有助于绕过某些基于签名匹配机制的安全措施,从而提高成功获取所需数据的可能性[^3]。 #### TCP SYN扫描与其他高级选项 除了标准的SYN扫描外,还有其他几种专门针对不同场景设计的技术可供选用。比如想要执行完整的三次握手过程而不是仅仅发送SYN包的话,可以选择`-sT`来进行connect()扫描;而对于UDP流量感兴趣的场合下,则应该考虑采用`-sU`参数。 值得注意的是,这些特殊类型的扫描往往要求更高的权限级别才能正常运作——特别是在类Unix平台上通常意味着必须具备超级用户的权利才行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值