如何在 Linux 中使用 nmap 命令

如果您正在寻找有关 Linux 中 nmap 命令的教程,我很乐意首先欢迎您来到网络安全世界。 Nmap 实用程序代表网络映射,用于查找连接到网络的设备上的开放端口。 由于该实用程序提供的灵活性,使用 nmap 命令探索的潜在用途和选项几乎是无穷无尽的。

但是,让我们回顾一下一些最常见的选项,这些选项将使您开始扫描您的前几个网络,并了解更多有关为您的个人设备或服务器打开的端口的信息。

Linux 中 nmap 命令的默认用法:

nmap [options] <target IP or hostname> 

1.基本的Nmap扫描方法

最基本的扫描类型是 TCP 和 UDP 扫描、SYN 扫描和 Ping 扫描。 这些扫描方法本质上所做的是制作特定类型的数据包并将其发送到目标 IP 并等待响应。 根据响应,Linux 中的 nmap 命令确定端口是打开还是关闭以及目标机器的状态。

在 Linux 中使用 Nmap 命令进行 TCP Connect() 扫描

扫描的名称表示执行套接字编程时由所有 UNIX 系统进行的 connect() 系统调用。 此扫描使用相同的系统调用来确定打开或关闭的端口。 它是如何工作的? 这很简单。 nmap 实用程序向每个端口发送连接请求并等待 TCP 连接完成。 如果完成,则端口已打开。 如果没有完成,端口将关闭。

nmap -sT <IP or hostname> 
Nmap TCP 连接扫描

正如您在上面的屏幕截图中看到的,我们扫描了 localhost 并获得了系统上打开的端口。 在这种情况下,只有 SSH 端口 22 对我们的服务器开放。

使用 Linux nmap 命令进行 UDP 扫描

从 TCP 连接扫描开始,让我们继续进行 UDP 扫描。 TCP 和 UDP 连接之间的区别在于 TCP 数据包等待服务器确认响应数据包,而 UDP 数据包只是检查数据包是否到达服务器。 通过 UDP 扫描,您可以看到所有打开的 UDP 端口。

如果您可以在上面的屏幕截图中看到,它显示 22/tcp,这意味着服务器将响应 TCP 数据包并拒绝 UDP 数据包(除非防火墙配置错误。

nmap -sU <hostname or IP> 
Nmap Udp 连接扫描

请注意 UDP 扫描如何返回未列出打开的端口。 这是因为我们的服务器上没有任何开放的 UDP 端口。

使用 nmap 进行 SYN 扫描

我们查看了 TCP 和 UDP 扫描方法。 我们来复习一下端口扫描的SYN方法。 还记得我们提到过,一旦发送数据包,TCP 数据包就会等待服务器的响应吗? 这两个数据包称为 SYN 和 ACK。

  • SYN – 此数据包由客户端作为 同步同步请求
  • ACK – 一旦服务器收到 SYN 数据包并为请求打开了必要的端口,它会以 确认认购

如果我们只发送 SYN 数据包而不真正等待连接确认会发生什么? 我们得到了一个非常快速但隐蔽的端口扫描。 这是因为我们只是发送一个同步请求,然后继续前进。 服务器可能会或可能不会以 ACK 响应,并且根据响应是什么,SYN 扫描会解释端口是否打开/关闭/过滤。

nmap -sS <target host or IP> 
Linux Syn Scan 中的 Nmap 命令Nmap 同步扫描

如果 SYN 包收到一个

  • 确认包 – 端口已打开
  • RST包 – 端口关闭(RST = 重置)
  • 无响应或无法访问的错误 – 端口被过滤
  • ICMP 不可达 – 端口过滤

在 Linux 中使用 nmap 命令进行 Ping 扫描

好的,我们已经看到了上面的基本端口扫描技术,但是 Ping 扫描是另一种扫描,它允许我们确认机器是否连接到网络。 非常简单:它发送一个 ICMP 数据包并等待来自目标的确认。 此扫描等效于 ping 命令,但可以在一个命令中对数百个目标地址执行。

nmap -sP <target IP or hostname> 
Nmap Ping Icmp 扫描Nmap Ping Icmp 扫描

2.高级Nmap扫描方法

我们上面提到的技术很容易被防火墙过滤和阻止。 但是我们可以使用更多方法,发送不同构造的数据包以查找被检测为关闭的端口是否真的关闭。

在 Linux 中使用 nmap 命令进行 ACK 扫描

我提到了 TCP 数据包如何等待 ACK 数据包来确认连接。 但是如果我们直接发送ACK包而不是SYN包呢? 让我们理解这一点。

大多数防火墙无论如何都会阻止这种技巧,但一些建立在基本规则上的防火墙可能会让我们知道哪些端口是打开的。 这是因为 ACK 数据包表示已经从服务器建立了连接,而我们的系统只是确认连接。

把戏? 是的。 作品? 有时。 值得一试? 当然。

nmap -sA <target IP or hostname> 
Nmap确认扫描Nmap确认扫描

正如您所看到的,它以 0 个开放端口响应,这意味着我们的防火墙和系统工作正常,并且没有响应不必要的数据包。

使用 nmap 命令扫描 TCP 窗口大小

这类似于 TCP connect() 扫描,但它适用于 Window Size 报告的异常情况。 当其他方法失败时,此命令有时很有用。 但与任何其他网络安全测试工具一样,没有特定的方法来做事。 每个系统的配置都不同,您也需要以不同的方式使用这些系统。

nmap -sW <target IP or hostname> 
Nmap 窗口扫描Nmap 窗口扫描

在这种情况下,我在此端口扫描演示中使用了 Google 作为示例,因为我们的 localhost 只有一个开放端口。 看看上面的例子,你会看到 HTTP 和 HTTPS 端口是“关闭的”,但我们知道当我们连接到它们时这两个端口都是打开的! 这怎么可能?

那是因为谷歌服务器正在阻止任何不是来自浏览器的流量。 在我们的案例中,我们尝试了窗口大小扫描,这不是 HTTP 或 HTTPS 流量。 如果我们设法在端口 80 或 443 上向 Google 服务器发送 HTTP 数据包,我们将获得页面的整个 HTML 源代码作为输出。

在 Linux 中使用 Nmap 命令进行 RPC 扫描

远程过程调用或 RPC 扫描将与上面提到的一些其他类型的扫描一起使用,允许您确定端口是否有在后台运行的 RPC 兼容应用程序。 远程过程调用允许我们确定应用程序和应用程序所在的版本号,从而使黑客可以轻松确定错误并利用它们。

nmap -sR  <target IP or Hostname> OR nmap -sV  <target IP or Hostname> 
Nmap版本检测扫描Nmap版本检测扫描

-sR 是的别名 -SV 选项,两者都有助于查找在特定端口后面运行的应用程序和版本。

3. 偷偷扫描

我们上面讨论的所有扫描在独立使用时都或多或少可以被防火墙检测到。 所以我们需要采用一些隐蔽的策略来隐藏我们寻找端口的企图。 最简单的方法之一是减慢扫描速度,以使防火墙无法区分端口扫描数据包和常规流量。

在 Linux 中使用 nmap 命令减慢端口扫描速度

在上面的扫描中,您看到了扫描所有端口的速度。 如果防火墙处于活动状态,它会很快发出警报并检测并阻止我们的端口扫描尝试。 在配置不当的防火墙上,这也很容易检测到,因此如果我们知道特定网站通常不会真正看到太多流量,最好放慢扫描速度。

例如,如果我快速浏览 Google,则无需担心,因为:

  • Google 的服务器非常安全
  • 谷歌每天收到数十亿个搜索请求——我们的端口扫描数据包微不足道
  • 谷歌已经很好地配置了他们的防火墙,因为他们别无选择。 因此,您最终不太可能在他们的服务器上找到易受攻击的端口。

但是如果我扫描一个未知网站的开放端口,并在短时间内发送数千个数据包,请求流量的峰值将非常明显。 让我们学习如何在 Linux 中使用 nmap 命令减慢扫描速度。

nmap -T<0-5> <IP or Hostname> 

Linux中nmap命令中0到5的解释如下:

  • paranoid (0) – 最慢,在发送每个数据包前等待 5 分钟
  • 偷偷摸摸 (1)
  • 礼貌 (2)
  • normal (3) – 如果未指定,则默认扫描速度
  • 好斗的 (4)
  • insane (5) – 最快,尽可能快地发送数据包
Nmap定时扫描Nmap定时扫描

我只运行 T4 和 T5 进行演示。 当我使用本地主机时,我没有任何理由在这里放慢我的扫描速度。 当您处于现实世界中时,您可以相应地调整扫描时间。

在 Linux 中使用 nmap 命令对数据包进行分段

一些防火墙具有对数据包进行碎片整理并将它们组合在一起的内置机制。 但并非所有人都拥有它。 那么,如果我们可以将所有数据包分成小块发送呢?

无法处理碎片数据的防火墙将简单地将其传递到请求的端口并期望操作系统执行碎片整理。 这对我们来说是成功的,因为我们知道端口是否打开!

nmap -f -sT <IP or hostname> 

此命令选项与特定扫描类型配对,将对发送到目标 IP 的数据包进行分段。

在 Linux 中通过 nmap 命令使用诱饵 IP

如果您知道一些 IP 已经在扫描同一个 IP,那么这是向防火墙隐藏端口扫描尝试的最佳方法之一。 它不是隐藏您的 IP,而是让您的尝试看起来像许多其他 IP 正在做同样的事情。

对于这种方法,您需要知道一些 IP 地址,它们是您尝试扫描的网络的诱饵。

nmap -D<comma separated IP addresses> <remote IP> 
Nmap 诱饵 IpsNmap 诱饵 IP

现在,除了我添加的额外 IP 之外,演示不会真正向您展示,但您可以查看 Wireshark 中的数据包以分析正在发送的数据包以及它们正在发送的 IP 地址来自。

结论

这是一篇关于 Linux 中 nmap 命令的非常全面的教程,但绝不是一个广泛的教程,因为有大量可用的变体,并且可以使用 nmap 命令选项执行。 如果您正在寻找完整的教程,请阅读 nmap 手册。