如何检查在Linux上的特定端口上运行的服务

时间:2020-03-05 15:26:10  来源:igfitidea点击:

有时候,我们可能需要查看Linux上某些端口的特定服务/协议或者服务的默认端口号。
可以使用许多命令行工具来在Linux系统中搜索端口名称和数字。

1)使用netstat命令

Nestat命令是用于检查活动网络连接,接口统计信息以及路由表的工具。

它可以在所有Linux发行版中提供。
但是,对于最小的安装,我们可以通过运行安装它

对于redhat和centos

sudo yum install net-tools

对于Fedora 22及以后

dnf install net-tools

对于Debian/Ubuntu

sudo apt-get install net-tools

用法

显示TCP和UDP端点运行的详细信息

netstat -pnltu

输出

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      13878/mysqld
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      21487/memcached
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1208/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1032/master
tcp6       0      0 :::80                   :::*                    LISTEN      13625/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      1208/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1032/master
udp        0      0 0.0.0.0:64561           0.0.0.0:*                           569/dhclient
udp        0      0 0.0.0.0:68              0.0.0.0:*                           569/dhclient
udp        0      0 127.0.0.1:323           0.0.0.0:*                           525/chronyd
udp6       0      0 :::11200                :::*                                569/dhclient
udp6       0      0 ::1:323                 :::*                                525/chronyd
  • -p标志给出了进程ID和进程名称。
  • -N标志显示数字地址
  • -l标志显示侦听套接字
  • -t标志显示TCP连接
  • -u标志显示UDP连接

要查找侦听特定端口运行的服务

netstat -pnltu | grep -i "80"

输出

tcp6       0      0 :::80                   :::*                    LISTEN      13625/httpd

同样,要找到服务正在侦听哪个端口

netstat -pnltu | grep -i "httpd"

输出

tcp6       0      0 :::80                   :::*                    LISTEN      13625/httpd

2)使用fuser命令

Fuser命令用于显示在特定端口上运行的服务的进程ID。
在大多数系统中默认未安装它。
安装它运行

对于redhat和centos

yum install psmisc

Forfedoraa 22和之后

dnf install psmisc

对于Debian和Ubuntu

apt-get install psmisc

例如,找到在端口80运行时运行的PID,

fuser 80/tcp

输出

80/tcp:              13625 18390 18391 18392 18393 18394 18442 19926 24386

使用进程PID运行搜索进程名称

ps -p 13625 -o comm=

输出

httpd

3)使用lsof命令

LSOF命令可用于检查活动的TCP和UDP端点。
安装命令行工具

对于redhat和centos

yum install lsof

Forfedoraa 22和之后

dnf install lsof

对于Debian和Ubuntu

apt-get install lsof

使用LSOF运行显示活动TCP和UDP端点,

lsof -i

输出

COMMAND     PID      USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
chronyd     525    chrony    1u  IPv4    14681      0t0  UDP localhost:323
chronyd     525    chrony    2u  IPv6    14682      0t0  UDP localhost:323
dhclient    569      root    6u  IPv4    15731      0t0  UDP *:bootpc
dhclient    569      root   20u  IPv4    15720      0t0  UDP *:64561
dhclient    569      root   21u  IPv6    15721      0t0  UDP *:11200
master     1032      root   13u  IPv4    17345      0t0  TCP localhost:smtp (LISTEN)
master     1032      root   14u  IPv6    17346      0t0  TCP localhost:smtp (LISTEN)
sshd       1208      root    3u  IPv4    18639      0t0  TCP *:ssh (LISTEN)
sshd       1208      root    4u  IPv6    18641      0t0  TCP *:ssh (LISTEN)
sshd       7749      root    3u  IPv4 11570561      0t0  TCP ip-172-31-16-136.us-east-2.compute.internal:ssh->197.232.61.206:51088 (ESTABLISHED)
sshd       7752  ec2-user    3u  IPv4 11570561      0t0  TCP ip-172-31-16-136.us-east-2.compute.internal:ssh->197.232.61.206:51088 (ESTABLISHED)
httpd     13625      root    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
mysqld    13878     mysql   14u  IPv4  7277635      0t0  TCP *:mysql (LISTEN)
httpd     18390    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18391    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18392    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18393    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18394    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     18442    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
httpd     19926    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)
memcached 21487 memcached   26u  IPv4  6250352      0t0  TCP localhost:memcache (LISTEN)
httpd     24386    apache    4u  IPv6  7277180      0t0  TCP *:http (LISTEN)

要在特定端口上侦听侦听的进程/服务,请在指定端口时键入下面的命令

lsof -i :80
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
httpd   13625   root    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18390 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18391 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18392 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18393 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18394 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   18442 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   19926 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)
httpd   24386 apache    4u  IPv6 7277180      0t0  TCP *:http (LISTEN)

4)使用Whatportis工具

Whatportis是一个命令行工具,允许我们搜索在系统中运行的端口名称和服务数。
该工具从IANA获取官方TCP/UDP端口列表。

因此,创建私有脚本以定期获取并更新ports.json fileto使用命令行工具,我们必须首先在我们的系统中安装它。
首先,我们需要安装Python-pip

适用于Ubuntu 16及更高版本和Debian系统

apt install python-pip

为Rhel和CentOS系统

安装epel存储库

yum install epel-release

接下来,安装Python Setup Tools

sudo yum install python34-setuptools

安装pip.

sudo easy_install-3.4 pip

最后,使用pip安装whatportis

pip install whatportis

Whatportis的用法

搜索与服务名称运行关联的端口

whatportis service-name

例如

whatportis ssh

相反,我们可以搜索与端口号关联的服务

whatportis 22

我们还可以通过运行搜索图案而不知道确切的名称

whatportis ssh --like

我们还可以将结果显示为JSON输出

whatportis 22 --json