常见的检查服务器的端口是否打开分为 2 类,一类是通过telnet从服务器外部检查某一个端口是否开放,另一类是通过netstat查看服务器内部的 socket 通信情况。
telnet
通过telnet命令可以检查某个ip的某个port是否开放,具体的用法如下:
telnet ip port
若没有输出一直处于等待状态或者显示telnet: Unable to connect to remote host: Connection refused则表示连接失败。只有显示Escape character is '^]'才说明连接成功。
连接成功后如何退出:
成功后按住ctrl键不松,再按]键,即可回到交互界面:
telnet>
只需要在交互界面的命令行中输入quit或者close即可退出。
netstat
netstat现在基本被淘汰了,下面的说明引自维基百科:
On Linux,
netstat(part of “net-tools”) is superseded byss(part of iproute2). The replacement fornetstat -risip route, the replacement fornetstat -iisip -s link, and the replacement fornetstat -gisip maddr, all of which are recommended instead.
下面我们使用ss(socket statistics)代替netstat说明:
ss常用的选项有:
-a:列出所有当前的连接。-t:列出 TCP 连接。-u:列出 UDP 连接。-n:主机用 ip 表示即可。(numerical)-l:列出属于监听状态下的套接字。(listen)-p:指出套接字所在进程的 PID,该选项需要 root 权限,否则可能无法正常显示 PID。
# 只列出 tcp 协议且处于监听状态的套接字,并以 ip 形式表示
ss -ntl

说明:
首先,一般情况下,ip 和网卡(Network adapter 或者 Network Interface Control 简称 NIC)是一一对应的。
状态为LISTEN的连接,Local Address表明某个程序在某个网卡的端口上(某个 ip 的端口上)监听是否收到连接请求,由于还未建立连接,Peer Address都是0.0.0.0:0,表示不知道对方的信息(ip 和端口)。
- 若
Local Address是0.0.0.0表示监听所有网卡(ip)收到的请求。 - 若
Local Address是127.0.0.1表示只监听连接本机的网卡,即来自本机的请求。 - 若
Local Address是公网 IP,表示只监听连接公网的网卡,即来自公网的请求。 - 若
Local Address是内部 IP,表示只监听连接内部网络的网卡,即来自内部网络的请求。