找出正在侦听的端口/在Linux和FreeBSD服务器上打开的端口

时间:2020-01-09 14:16:41  来源:igfitidea点击:

如何在Linux或FreeBSD Unix服务器上找到开放端口?

Linux和UNIX服务器上都有不同的命令,以查看服务器上正在侦听或打开的TCP/UDP端口。
您可以使用netstat命令,该命令打印网络连接,路由表,接口统计信息,伪装连接和多播成员身份等。
另一个(也是建议的)选项是使用lsof命令,该命令列出打开的文件以及Linux,FreeBSD上的端口,Solaris和其他Unixish系统。

netstat命令查找打开的端口

语法为:

# netstat --listen

或者

# netstat -l

我的Debian 8.x Linux服务器的示例输出:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:953           *:*                     LISTEN     
tcp        0      0 localhost:6010          *:*                     LISTEN     
tcp        0      0 localhost:4700          *:*                     LISTEN     
tcp        0      0 *:nfs                   *:*                     LISTEN     
tcp        0      0 *:afpovertcp            *:*                     LISTEN     
tcp        0      0 *:40495                 *:*                     LISTEN     
tcp        0      0 *:sunrpc                *:*                     LISTEN     
tcp        0      0 *:http                  *:*                     LISTEN     
tcp6       0      0 [::]:41864              [::]:*                  LISTEN     
tcp6       0      0 [::]:37833              [::]:*                  LISTEN     
tcp6       0      0 [::]:35658              [::]:*                  LISTEN      
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
udp        0      0 *:59997                 *:*                                
udp        0      0 *:37610                 *:*                                
udp        0      0 *:755                   *:*                                
udp        0      0 nas01.theitroad.n:domain *:*                                
udp        0      0 localhost:domain        *:*                                
udp        0      0 *:54469                 *:*                                
udp        0      0 *:mdns                  *:*                                
udp6       0      0 [::]:34235              [::]:*                             
udp6       0      0 [::]:36451              [::]:*                             
udp6       0      0 [::]:sunrpc             [::]:*                             
udp6       0      0 [::]:58606              [::]:*                             
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     16912    /var/run/mysqld/mysqld.sock
unix  2      [ ACC ]     STREAM     LISTENING     11796    /var/run/dbus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     11799    /var/run/avahi-daemon/socket
unix  2      [ ACC ]     STREAM     LISTENING     18844    @/tmp/dbus-FStDtp4tGA

要显示打开的端口和已建立的TCP连接,请执行:

$ netstat -vatn

要仅显示打开的UDP端口,请尝试以下命令:

$ netstat -vaun

如果要查看FQDN(完整的dns主机名),请尝试删除-n标志:

$ netstat -vat

FreeBSD/OS X Unix用户尝试以下命令:

$ netstat -na | grep -i LISTEN
$ netstat -f inet -na | grep -i LISTEN

输出示例:

tcp6       0      0  ::1.52698              *.*                    LISTEN     
tcp4       0      0  127.0.0.1.49153        *.*                    LISTEN     
tcp4       0      0  127.0.0.1.49152        *.*                    LISTEN     
tcp4       0      0  *.22                   *.*                    LISTEN     
tcp6       0      0  *.22                   *.*                    LISTEN

lsof命令示例

要显示打开的端口列表,请执行:

# lsof -i

要显示所有打开的文件,请使用:

# lsof

要显示PID为9255的进程正在使用的所有打开的IPv4网络文件,请使用:

# lsof -i 4 -a -p 9255

另一个例子:

# lsof -iTCP -sTCP:LISTEN

输出示例:

COMMAND    PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1004     root    8u  IPv4  14248      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1004     root   11u  IPv6  14251      0t0  TCP *:sunrpc (LISTEN)
rpc.statd 1013    statd    9u  IPv4  14331      0t0  TCP *:51084 (LISTEN)
rpc.statd 1013    statd   11u  IPv6  14335      0t0  TCP *:54585 (LISTEN)
sshd      1031     root    3u  IPv4  15629      0t0  TCP *:ssh (LISTEN)
sshd      1031     root    4u  IPv6  15631      0t0  TCP *:ssh (LISTEN)
named     1034     bind   20u  IPv6  13184      0t0  TCP *:domain (LISTEN)
lighttpd  1679 www-data    4u  IPv4  18535      0t0  TCP *:http (LISTEN)
lighttpd  1679 www-data    5u  IPv6  18536      0t0  TCP *:http (LISTEN)
afpd      1709     root    6u  IPv4  18703      0t0  TCP *:afpovertcp (LISTEN)
cnid_meta 1710     root    5u  IPv4  16316      0t0  TCP localhost:4700 (LISTEN)
rpc.mount 1739     root    9u  IPv4  16332      0t0  TCP *:52053 (LISTEN)
rpc.mount 1739     root   17u  IPv4  16348      0t0  TCP *:60881 (LISTEN)
rpc.mount 1739     root   19u  IPv6  16352      0t0  TCP *:37833 (LISTEN)
sshd      1975    Hyman   11u  IPv6  19711      0t0  TCP ip6-localhost:6010 (LISTEN)
sshd      1975    Hyman   12u  IPv4  19712      0t0  TCP localhost:6010 (LISTEN)

关于FreeBSD用户的注意事项

您可以使用sockstat命令列出打开的Internet或UNIX域套接字,执行:

$ sockstat
$ sockstat -l
$ sockstat -4 -l
$ sockstat -6 -l