即使有很多类似的问题,我还是决定发布这个问题,但没有一个回答我的问题。
- 我会定期检查我的服务器监听的端口。
- 我的 ubuntu 操作系统通过以下输出
lsb_relase -a
:
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
- 我运行命令
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
- 我使用了许多工具和指南来找出为什么我的服务器正在侦听端口
51820
而没有找到答案。 - 我努力了:
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 [::]:*
- 我查看了以下答案并没有找到解决方案:
在网上搜索有关端口的信息后,51820
我发现它是我安装的“wireguard”,它正在侦听该端口,但问题与我尝试过的任何命令一样,我都找不到。
您正在运行将 Wireguard 实现为内核模块的操作系统。您的内核正在侦听此端口,并且由于没有进程拥有该套接字,因此没有 PID 报告
netstat
。一般:
在围绕这个问题进行了两天的搜索后,我发现像 Michael Hampton 和 Peter Zhabin 一样,没有通过侦听端口显示内核进程 ID 的现有解决方案。
此外,这两天我还搜索了一些
commands
可以带来想要的答案的组合,但没有找到简单或方便的方法来做到这一点。我创建的解决方案是初步的,我相信社区成员可以改进它。
查找流程的折扣
lsof
,netstat
,ss
,fuser
。关于
grep
:我们将使用它
grep
来查找有关开放端口的更多信息。grep
- 打印匹配模式的行。通过命令从
grep
手册页。man grep
如何通过以下方式定位 PID 或使用给定端口的程序
grep
:在我的情况下,执行
sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i port
解决了问题并显示了有关使用端口的程序的分配信息。给定的输出:
许多标志的原因是我尝试过的其他组合有大量不需要的输出。
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
模式过滤器,它可以查明我们并加快解决方案,毕竟我们正在寻找一个数字作为模式,这可能会导致许多不需要的结果。