• 首页
  • 产品中心
  • 企业荣誉
  • 业界新闻
  • 汽车服务
  • 业界新闻

    你的位置:【开元棋盘地址官方客服】 > 业界新闻 > Linux中是谁占用了我的端口

    Linux中是谁占用了我的端口

    发布日期:2022-08-07 17:34    点击次数:156

    Address already in use这个提示,想必巨匠遇到过,怎么能倏地找到成就并经管呢?下面有几种姿态可以或许相识一下.

    在对网络跟尾或特定于应用顺序的成就举行体系毛病肃清时,起重要查抄的工作之一该当是体系上理论应用了哪些端口,以及哪一个应用顺序正在侦听特定的端口。

    本文介绍了怎么应用netstat,ss和lsof敕令找出哪些服务正在侦听哪些端口。该分化实用于全体基于Linux和Unix的操作体系,譬如macOS。

    # 什么是监听端口

    网络端口由其编号,联络纠葛的IP地点和通信和谈(譬如TCP或UDP)的范例标识。

    侦听端口是应用顺序或过程在其上侦听的网络端口,充当通信端点。

    每个监听端口均可应用防火墙关上或敞开(过滤)。普通而言,开放端口是一个网络端口,它担任来自近程职位地方的传入数据包。

    你不克不迭让两个服务监听同一IP地点上的同一端口。

    譬如,假定你正在运行一个监听端口80和443的Apache Web服务器,并且查验测验按部就班Nginx ,则后者将没法启动,因为HTTP和HTTPS端口是已经在应用中。

    # 用netstat查抄监听端口

    netstat是一个敕令行器材,可以或许供应无关网络跟尾的信息。

    要列出全体正在侦听的TCP或UDP端口,蕴含应用端口的服务和套接字形态,请应用下列敕令:

    sudo netstat -tunlp 

    此敕令中应用的选项具有下列含义:

    -t-体现TCP端口。 -u -体现UDP端口。 -n -体现数字地点而不是剖析主机。 -l -仅体现监听端口。 -p -体现侦听器过程的PID和名称。仅当你以root用户或 sudo 用户身份运行敕令时,才会体现此信息。

    输出将以下所示:

     

    Proto Recv-Q Send-Q Local Address   Foreign Address     State       PID/Program name       tcp        0      0 0:22              0:*               LISTEN      445/sshd               tcp        0      0 0:25              0:*               LISTEN      929/master             tcp6       0      0 :::3306           ::*               LISTEN      534/mysqld             tcp6       0      0 :::80             :::*              LISTEN      515/apache2            tcp6       0      0 :::22             :::*              LISTEN      445/sshd               tcp6       0      0 :::25             :::*              LISTEN      929/master             tcp6       0      0 :::33060          :::*              LISTEN      534/mysqld             udp        0      0 0:68              0:*                           966/dhclient   

    在我们的案例中,重要的几列是:

    Proto-套接字应用的和谈。 Local Address -过程侦听的IP地点和端口号。 PID/Program name -PID和过程名称。

    假定要过滤终局,请应用 grep敕令。譬如,要查找在TCP端口22上侦听的过程,你可以或许输入:

    sudo netstat -tnlp | grep :22 

    输出体现此计算机上的端口22被SSH服务器应用:

     

    tcp        0      0 0:22              0:*               LISTEN      445/sshd   tcp6       0      0 :::22             :::*              LISTEN      445/sshd   

    假定输出为空,则默示端口上没有监听。

    你也可以痛处条件过滤列表,譬如PID,和谈,形态等。

    netstat已逾期,被ss和 ip 庖代,但它仍然是查抄网络跟尾的最经常使用敕令。

    # 用ss

    查抄监听端口

    ss是新的netstat。它缺乏netstat的某些功用,然则果真了更多的TCP形态,并且速度稍快。敕令选项基假沟通,业界新闻因而从netstat到ss的转换着实不费力。

    要应用ss取得全体监听端口的列表,请输入:

    sudo ss -tunlp 

    输出与netstat报告的输脱险些沟通:

     

    State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port                                                                                           LISTEN   0        128              0:22             0:*      users:(("sshd",pid=445,fd=3))                                                           LISTEN   0        100              0:25             0:*      users:(("master",pid=929,fd=13))                                                        LISTEN   0        128                    *:3306                 *:*      users:(("mysqld",pid=534,fd=30))                                                        LISTEN   0        128                    *:80                   *:*      users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))      LISTEN   0        128                 [::]:22                [::]:*      users:(("sshd",pid=445,fd=4))                                                           LISTEN   0        100                 [::]:25                [::]:*      users:(("master",pid=929,fd=14))                                                        LISTEN   0        70                     *:33060                *:*      users:(("mysqld",pid=534,fd=33))   

    # 应用lsof

    查抄监听端口

    lsof是功用强盛的敕令交应用顺序,可供应无关过程关上的文件的信息。

    在Linux中,全体内容都是文件。你可以或许将套接字视为写入网络的文件。

    要取得具有lsof的全体侦听TCP端口的列表,请输入:

    sudo lsof -nP -iTCP -sTCP:LISTEN 

    应用的选项以下:

    -n-不要将端口号转换为端口名称。 -p -不剖析主机名,体现数字地点。

    -iTCP -sTCP:LISTEN -仅体现TCP形态为LISTEN的网络文件。

     

    COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME   sshd      445     root    3u  IPv4  16434      0t0  TCP *:22 (LISTEN)   sshd      445     root    4u  IPv6  16445      0t0  TCP *:22 (LISTEN)   apache2   515     root    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)   mysqld    534    mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)   mysqld    534    mysql   33u  IPv6  19973      0t0  TCP *:33060 (LISTEN)   apache2   764 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)   apache2   765 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)   master    929     root   13u  IPv4  19637      0t0  TCP *:25 (LISTEN)   master    929     root   14u  IPv6  19638      0t0  TCP *:25 (LISTEN)   

    大大都输入列名称都是不言自明的:

    COMMAND,PID,USER-运行与端口联络纠葛的顺序的名称,PID和用户。 NAME -端口号。

    要查找正在侦听特定端口(譬如端口3306)的过程,可应用:

    sudo lsof -nP -iTCP:3306 -sTCP:LISTEN 

    输出体现MySQL服务器应用端口3306:

     

    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME  mysqld 534 mysql 30u IPv6 17636 0t0 TCP *:3306 (LISTEN)