检查服务器的端口是否打开

检查服务器的端口是否打开

常见的检查服务器的端口是否打开分为 2 类,一类是通过telnet从服务器外部检查某一个端口是否开放,另一类是通过netstat查看服务器内部的 socket 通信情况。

telnet

通过telnet命令可以检查某个ip的某个port是否开放,具体的用法如下:

1
telnet ip port

若没有输出一直处于等待状态或者显示telnet: Unable to connect to remote host: Connection refused则表示连接失败。只有显示Escape character is '^]'才说明连接成功。

连接成功后如何退出:

成功后按住ctrl键不松,再按]键,即可回到交互界面:

1
telnet>

只需要在交互界面的命令行中输入quit或者close即可退出。

netstat

netstat现在基本被淘汰了,下面的说明引自维基百科:

On Linux, netstat (part of “net-tools”) is superseded by ss (part of iproute2). The replacement for netstat -r is ip route, the replacement for netstat -i is ip -s link, and the replacement for netstat -g is ip maddr, all of which are recommended instead.

下面我们使用ss(socket statistics)代替netstat说明:

ss常用的选项有:

  1. -a:列出所有当前的连接。
  2. -t:列出 TCP 连接。
  3. -u:列出 UDP 连接。
  4. -n:主机用 ip 表示即可。(numerical)
  5. -l:列出属于监听状态下的套接字。(listen)
  6. -p:指出套接字所在进程的 PID,该选项需要 root 权限,否则可能无法正常显示 PID。
1
2
# 只列出 tcp 协议且处于监听状态的套接字,并以 ip 形式表示
ss -ntl

ss -ntl 的输出

说明:

首先,一般情况下,ip 和网卡(Network adapter 或者 Network Interface Control 简称 NIC)是一一对应的。

状态为LISTEN的连接,Local Address表明某个程序在某个网卡的端口上(某个 ip 的端口上)监听是否收到连接请求,由于还未建立连接,Peer Address都是0.0.0.0:0,表示不知道对方的信息(ip 和端口)。

  1. Local Address0.0.0.0表示监听所有网卡(ip)收到的请求。
  2. Local Address127.0.0.1表示只监听连接本机的网卡,即来自本机的请求。
  3. Local Address是公网 IP,表示只监听连接公网的网卡,即来自公网的请求。
  4. Local Address是内部 IP,表示只监听连接内部网络的网卡,即来自内部网络的请求。

参考资料

  1. netstat 的 10 个基本用法
  2. How to read NETSTAT -AN results