AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1078483
Accepted
CrazyTux
CrazyTux
Asked: 2021-09-24 12:59:44 +0800 CST2021-09-24 12:59:44 +0800 CST 2021-09-24 12:59:44 +0800 CST

如何在没有进程 ID 的情况下找出正在侦听 Ubuntu 服务器的特定端口的服务?

  • 772

即使有很多类似的问题,我还是决定发布这个问题,但没有一个回答我的问题。

  1. 我会定期检查我的服务器监听的端口。
  2. 我的 ubuntu 操作系统通过以下输出lsb_relase -a:
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.3 LTS
Release:    20.04
Codename:   focal
  1. 我运行命令netstat -tulpn4,输出显示未知端口:
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      580/systemd-resolve 
tcp        0      0 0.0.0.0:62176           0.0.0.0:*               LISTEN      900/sshd: /usr/sbin 
tcp        0      0 0.0.0.0:1122            0.0.0.0:*               LISTEN      1158/sshd: username    
tcp        0      0 0.0.0.0:3333            0.0.0.0:*               LISTEN      1158/sshd: username    
udp        0      0 0.0.0.0:51820           0.0.0.0:*                           -                   
udp        0      0 127.0.0.53:53           0.0.0.0:*                           580/systemd-resolve 
udp        0      0 X.X.X.X:1194           0.0.0.0:*                           870/openvpn         
  1. 我使用了许多工具和指南来找出为什么我的服务器正在侦听端口51820而没有找到答案。
  2. 我努力了:
    • sudo lsof -i :51820- 并得到一个空输出。
    • sudo netstat -ltnp | grep -w ':51820'- 并得到一个空输出。
    • sudo fuser 51820/udp- 并得到一个空输出。
    • sudo netstat -peanut | grep ":51820"- 输出是:
udp        0      0 0.0.0.0:51820           0.0.0.0:*                           0          26262      -                   
udp6       0      0 :::51820                :::*                                0          26263      - 
  • sudo ss -nlp | grep 51820输出是:
udp     UNCONN   0        0                                             0.0.0.0:51820                                             0.0.0.0:*                                                                                                     
udp     UNCONN   0        0                                                [::]:51820                                                [::]:*  
  1. 我查看了以下答案并没有找到解决方案:
    • 如何知道给定端口上正在侦听的程序是什么?
    • 找出在特定端口上侦听的进程的 3 种方法
    • 如何知道给定端口上正在侦听的程序是什么?
    • 我们如何才能找到哪个进程正在使用特定的端口?[复制]

在网上搜索有关端口的信息后,51820我发现它是我安装的“wireguard”,它正在侦听该端口,但问题与我尝试过的任何命令一样,我都找不到。

ubuntu networking port process
  • 2 2 个回答
  • 1068 Views

2 个回答

  • Voted
  1. Peter Zhabin
    2021-09-25T08:22:26+08:002021-09-25T08:22:26+08:00

    您正在运行将 Wireguard 实现为内核模块的操作系统。您的内核正在侦听此端口,并且由于没有进程拥有该套接字,因此没有 PID 报告netstat。

    • 6
  2. Best Answer
    CrazyTux
    2021-10-05T12:11:19+08:002021-10-05T12:11:19+08:00

    一般:

    在围绕这个问题进行了两天的搜索后,我发现像 Michael Hampton 和 Peter Zhabin 一样,没有通过侦听端口显示内核进程 ID 的现有解决方案。

    此外,这两天我还搜索了一些commands 可以带来想要的答案的组合,但没有找到简单或方便的方法来做到这一点。

    我创建的解决方案是初步的,我相信社区成员可以改进它。

    查找流程的折扣

    • 该进程在内核级别或任何其他级别上运行,从而避免该进程具有 id (PID)。
    • 给定命令的输出未找到进程 ID 或进程程序:lsof, netstat, ss, fuser。
    • 我们确实从上述命令的输出中找到了一个监听端口 - 但是我们无法配置导致监听的程序或 pid。

    关于grep:

    我们将使用它grep来查找有关开放端口的更多信息。

    grep- 打印匹配模式的行。

    通过命令从grep手册页。man grep

    DESCRIPTION
    grep  searches  for  PATTERNS  in  each  FILE.  PATTERNS is one or more
           patterns separated by newline characters, and  grep  prints  each  line
           that  matches a pattern.  Typically PATTERNS should be quoted when grep
           is used in a shell command.
    
    • 这是关于如何正确有效地使用命令的一个很好的主题。

    如何通过以下方式定位 PID 或使用给定端口的程序grep:

    在我的情况下,执行sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i port解决了问题并显示了有关使用端口的程序的分配信息。

    给定的输出:

    iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
    /home/username/wireguard-install.sh:238:    read -p "Port [51820]: " port
    /home/username/wireguard-install.sh:241:        read -p "Port [51820]: " port
    /home/username/wireguard-install.sh:243:    [[ -z "$port" ]] && port="51820"
    /usr/share/doc/netplan/examples/wireguard.yaml:9:      port: 51820
    /etc/wireguard/wg0.conf:8:ListenPort = 51820
    /etc/systemd/system/wg-iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
    /etc/systemd/system/wg-iptables.service:10:ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 51820 -j ACCEPT
    

    许多标志的原因是我尝试过的其他组合有大量不需要的输出。

    grep命令参数代表什么:

    • --exclude-dir- 跳过名称后缀与模式匹配的任何命令行目录。

    在我们的特定情况下,特定的忽略sys和proc目录 是为了避免不需要的输出。

    示例:grep --exclude-dir={dir1,dir2}将在搜索过程中避开 dir1 和 dir2。

    • -r或者-R是递归的。
    • -n是行号。
    • -w代表匹配整个单词。
    • /代表从上到下开始搜索的“最高”目录。
    • -e- 是搜索过程中使用的模式。
    • 51820在我们的特定情况下,是上面的网络监控命令之一找到的端口号。
    • |- 是将第一个命令部分的输出重定向到第二个命令部分的管道。

    在我们的例子中:将sudo grep --exclude-dir={sys,proc} -rnw / -e 51820输出重定向到下一个命令grep -i port

    • -i- 忽略模式和输入数据中的大小写区别,使仅大小写不同的字符相互匹配。
    • port- 发现是为了将结果缩小到我们执行搜索的目的,查找有关在-e标志之后定义的特定端口的更多信息。

    提示:

    • 通过从目录开始并使用最小标志来过滤输出,在第一步中使扫描尽可能大/,以确保您不会错过我们可以实现的任何细节。
    • 在找到想要的输出或由于分配不需要的输出而无法找到想要的输出后,开始一一添加标志。
    • 指定端口号作为模式,毕竟这是我们的起点和终点。
    • 使用双重grep命令将第一次扫描重定向到port模式过滤器,它可以查明我们并加快解决方案,毕竟我们正在寻找一个数字作为模式,这可能会导致许多不需要的结果。
    • 如果您无法通过给定的输出得出结论,请使用您找到的选定关键字在网络上进行搜索。
    • 3

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve