> For the complete documentation index, see [llms.txt](https://slackwarecn.gitbook.io/slackbook_cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://slackwarecn.gitbook.io/slackbook_cn/chapter_16/network_diagnostic_tools/nmap.md).

# nmap

假如你想知道一个机器或多个机器上运行了哪些服务，或者想判断一些机器有没有反应（responsive）怎么办？一个一个的 `ping`，然后一个一个的用 `telnet` 连接感兴趣的端口，再一个一个的分析返回信息吗？恐怕有些不妥。最好的方法是使用端口扫描工具 `nmap(1)` 。用 `nmap` 可以扫描 TCP 和 UDP 端口，判断一个网络设备的操作系统，探测每个被定位的服务以便确定它们的具体类型等等等等。也许 `nmap` 最简单的使用方法就是一下子 `ping` 很多台机器。你可以用网络地址表示方法（CIDR）来指定某个范围的所有地址，`nmap` 会挨个扫描并在完成后把结果返回给你。如果你喜欢，也可以直接使用主机名。

为了“ping”主机，你必须使用 `-sP` 参数。下面的命令要求 `nmap` “ping” `www.slackware.com` 以及 16 个从 `72.168.24.0` 到 `72.168.24.15` 的 `IP` 地址。

```
darkstar:~# nmap -sP www.slackware.com 72.168.24.0/28
```

你也许想扫描端口，`nmap` 为此操作单独提供了很多选项。不给 `nmap` 添加任何参数时，`nmap` 对指定的所有主机执行标准的 TCP 端口扫描。有些选项可以让 `nmap` 戾气大增，如果你想更快的取得结果或者想和对方的入侵检测服务过两招的话，可以开启这些选项。关于 `nmap` 的内容，man 手册中讨论的相当详细。下面 3 个命令分别执行普通的端口扫描，SYN 扫描和“圣诞树”扫描。

```
darkstar:~# nmap www.example.com
darkstar:~# nmap -sS www.example.com
darkstar:~# nmap -sX www.example.com
```

> **警告**
>
> 记住，有些因特网服务提供商很不喜欢有人扫描端口，它们可能会采取手段阻止你扫描端口。 不要把 `nmap` 这样的工具当作通用的因特网扫描器，最好把它们用在对自己系统的维护和安全管理工作上。
