ss命令是Linux中查看端口的高效工具,比netstat更快且信息更全;使用ss -lntu可查看所有监听端口,结合grep可按端口号或PID过滤;通过ss -t state established可查看已建立的TCP连接;ss支持源地址、端口范围等复杂过滤;端口被占用时可用ss找到对应PID并kill释放;推荐ss因性能优、功能强且为未来趋势;防止恶意占用需配置防火墙、限制服务绑定、控制权限、定期审计、更新软件并部署IDS。

直接告诉你,在Linux中查看端口,
ss命令绝对是你的好帮手。它比
netstat更快,信息更全,简直是网络排查的瑞士军刀。
解决方案
-
查看所有监听端口:
最简单的用法:
ss -lntu
-l
: 只显示监听状态的端口。-n
: 不解析服务名称,直接显示端口号。 这点很重要,否则你看到的是ssh
而不是22
。-t
: 仅显示TCP连接。-u
: 仅显示UDP连接。
这个命令会列出所有正在监听的TCP和UDP端口,以及对应的本地地址和端口号。
-
按端口号过滤:
比如,我想看看8080端口有没有被占用:
ss -lntu | grep :8080
这里用了管道和
grep
命令,:8080
是正则表达式,匹配端口号。 -
查看特定进程占用的端口:
首先,你需要知道进程的PID。 假设PID是1234:
ss -lntup | grep pid=1234
-p
: 显示使用套接字的进程信息。 这个选项需要root权限。
这个命令会列出PID为1234的进程正在监听的所有端口。
-
查看特定状态的TCP连接:
例如,想查看所有处于ESTABLISHED状态的TCP连接:
ss -t state established
这个命令可以帮你快速找到已经建立的连接,例如,调试网络应用的时候很有用。
-
更复杂的过滤:
ss
命令支持更复杂的过滤条件,比如通过源/目的地址、端口范围等。具体可以参考man ss
。举个例子,查找源地址是
192.168.1.100
的所有TCP连接:ss -t src 192.168.1.100
服务器端口被占用,如何找到并释放?
端口被占用,通常意味着有进程正在监听那个端口。找到并释放端口的步骤如下:
-
确定占用端口的进程: 用
ss -lntup | grep :<端口号>
找到占用该端口的进程PID。 -
杀死进程:
kill
如果进程顽固,可以用kill -9
强制杀死。 注意: 杀死进程前,务必确认该进程是可以安全停止的,避免造成数据丢失或系统不稳定。 - 重新启动服务: 杀死进程后,就可以重新启动需要使用该端口的服务了。
有时候,端口可能被僵尸进程占用,即使杀死了进程,端口仍然无法释放。这时,可以尝试重启服务器。
netstat是一个比较老的命令,而
ss是
netstat的替代品,属于
iproute2工具包。
-
性能:
ss
比netstat
更快,尤其是在连接数很多的情况下。ss
直接从内核空间获取信息,而netstat
需要通过/proc
文件系统,效率较低。 -
功能:
ss
提供更多的过滤选项,可以更精确地查找需要的网络连接信息。 -
未来趋势:
netstat
已经逐渐被弃用,ss
是未来的趋势。
因此,建议优先使用
ss命令。
如何防止端口被恶意占用?
防止端口被恶意占用是一个安全问题,需要从多个方面入手:
-
防火墙配置: 使用防火墙(如
iptables
或firewalld
)限制对服务器端口的访问。只允许必要的IP地址或IP地址段访问特定端口。 -
服务绑定: 确保服务只绑定到特定的IP地址,而不是
0.0.0.0
。 绑定到0.0.0.0
意味着服务监听所有网络接口,增加了被攻击的风险。 - 权限控制: 确保只有授权用户才能启动或停止服务。 避免使用root权限运行服务。
- 安全审计: 定期检查服务器的端口使用情况,及时发现异常情况。
- 软件更新: 保持操作系统和软件的更新,及时修复安全漏洞。
- 入侵检测系统 (IDS): 部署IDS可以帮助检测和阻止恶意端口扫描和攻击。
记住,安全是一个持续的过程,需要不断地监控和改进。










