这篇文章最初是放在内部 WiKi 中,本意是让大家了解除了常用的telnet
之外,在运维过程中,如果在服务器中未发现相关命令还可以借用像ssh
、wget
等命令测试端口。当想把数据脱敏后放到个人的博客上又觉得太过简陋,因此基本上重写了本文。
前言
在不同平台和场合测试端口是否开放(服务已经处于监听时)往往需要不同的命令,除了系统的区别之外(Windows 主用 telnet
,Linux 可能 nc
较多),当连接其他服务器时,可能未必安装熟悉的工具,也可能一个都没安装。因此,除了了解常用端口测试工具的用法之外,还需要知道如何在没有相应工具下完成测试。
命令
nc
因为个人比较喜欢用 nc
,因此从这个命令开始谈起。nc 全称 netcat
,是由 Hobbit 编写,如果在终端输入 man nc,将会发现它的功能不仅仅只是简单的用来测试端口开放而已。
- v:表示生成详细的输出(默认未开放不输出);
- z:表示零模式,即仅进行端口扫描;
telnet
telnet
应该是 Windows 最常用的端口测试工具,之前还遇上有些客户只认 telnet 的测试结果,也是让人无奈。虽说如此 telnet 的缺点也很明显,速度比 nc 慢了一拍不说,测试连通后还会自动会话模式(Linux 下可避免)。
tcping
其实 tcping
应该是 Windows 下替代 telnet
的最佳命令,速度和 nc
有的一拼。只不过这个命令并非自带,需要从网络上下载。
nmap
nmap 的功能很强大,但这里仅用于检测端口:
ssh
ssh 除了能用来连接服务器之外,也可以用来检查服务器端口是否开放,这个应该是在没有安装对应工具情况下最佳方法:
wget
同样的,wget 除了用来下载文件之外,也可以用于检查端口开放状态:
最后
其实端口扫描也是一门学问呐,日常工作使用的基本都是 TCP 连接扫描,但除此之外,还有 TCP SYN 扫描(上面 nmap 有提到)、TCP FIN 扫描、TCP ACK 扫描、UDP 扫描等等。