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
有什么区别,为什么推荐使用ss
?
netstat是一个比较老的命令,而
ss是
netstat的替代品,属于
iproute2工具包。
ss比
netstat更快,尤其是在连接数很多的情况下。
ss直接从内核空间获取信息,而
netstat需要通过
/proc文件系统,效率较低。
ss提供更多的过滤选项,可以更精确地查找需要的网络连接信息。
netstat已经逐渐被弃用,
ss是未来的趋势。
因此,建议优先使用
ss命令。
如何防止端口被恶意占用?
防止端口被恶意占用是一个安全问题,需要从多个方面入手:
iptables或
firewalld)限制对服务器端口的访问。只允许必要的IP地址或IP地址段访问特定端口。
0.0.0.0。 绑定到
0.0.0.0意味着服务监听所有网络接口,增加了被攻击的风险。
记住,安全是一个持续的过程,需要不断地监控和改进。