常见的检查服务器的端口是否打开分为 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 -r
isip route
, the replacement fornetstat -i
isip -s link
, and the replacement fornetstat -g
isip 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,表示只监听连接内部网络的网卡,即来自内部网络的请求。