当我尝试查看系统中的端口冲突时,许多在线网站建议使用/etc/服务或者SS隧道查看端口信息
我注意到/etc/服务正在提供不同的信息-SS在大多数情况下。
输出比较示例
sudo cat /etc/services
ftp 21/udp
ftp 21/sctp
ssh 22/tcp
ssh 22/udp
ssh 22/sctp
telnet 23/tcp
telnet 23/udp
smtp 25/tcp
相对
ss -tunl
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:46670 0.0.0.0:*
udp UNCONN 0 0 [::]:5353 [::]:*
udp UNCONN 0 0 [::]:38838 [::]:*
是/etc/服务静态数据文件,只能用作指导,不能真实反映系统的真实端口配置。
哪里有SS程序收集此端口数据,以及如何修改/删除某些端口,或者通过SS或者另一个程序?
答案1
该文件/etc/services
仅提供端口的编号到名称映射,与 ports ss 列出的内容无关。此外,此文件中的名称是端口的常见用途,而不是端口在系统上的实际用途,因为任何程序(具有足够的权限)都可以出于任何目的打开任何端口。基本上/etc/services
是 IANA 分配号码注册表的子集。
列出的ss
是系统上正在使用的端口。如果它列在 ss 中,则它正在使用中。如果您ss -p
以 root 身份运行,它应该列出具体开放端口的进程。
您无法直接修改正在使用的端口。您需要做的是sudo ss -p
找出正在使用该端口的程序并将其杀死。或者,相反,如果 ss 中未列出某个端口而您希望它列出,则启动使用该端口的服务。
人们普遍错误地认为端口可以创建和删除。端口只是一个数字,它们始终存在并且无法删除或创建。它们要么正在使用,要么未使用。
答案2
这是两件不同的事情。该/etc/services
文件显示服务通常使用哪个端口,类似于https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers。
ss
是一个命令,用于显示您的计算机上当前有哪些服务处于活动状态,等待传入连接,例如将侦听 TCP 端口 80 和 443 的 Web 服务器。 它还会显示当前打开的传出连接,例如通过 Web 浏览器或ssh 客户端到 web/ssh 服务器。
ss
类似于netstat
已弃用的旧命令,取而代之的是ss
.