题 检查Linux服务器上的端口是打开还是关闭?


如何检查端口是否正在Linux服务器上侦听?


170
2017-09-07 17:24




你问的问题并不十分清楚。 “开放”是什么意思?你的意思是某个服务器正在侦听该端口吗?或者你的意思是系统防火墙允许它?或者是什么? - David Schwartz
我认为我的服务器上的端口被阻止了,想要再次解锁/打开它。 - James Anderson
netstat -an | grep PORTNUMBER | grep -i listen 如果输出为空,则端口未使用。 - automatix


答案:


您可以检查进程是否侦听TCP或UDP端口 netstat -tuplen

要检查是否可以从外部访问某些端口(这可能是您想要的),您可以使用端口扫描程序 NMAP 从 另一个 系统。在要检查的同一主机上运行Nmap对于您的目的来说是无用的。


158
2017-09-07 17:31



GNU netstat知道参数 -t, -u, -p, -l, -e,和 -n。感谢选项解析器,它可以表示为 -tuplen。 linux.die.net/man/8/netstat - joschi
而且, telnet 命令通常只支持TCP,因此如果要检查的服务在另一个协议上运行,则运气不好。 - joschi
是的,我正在使用窗户,因此混乱。 - Dexter
nc是(更好)替代telnet。它也支持UDP。 - Tsvetomir Dimitrov
与sudo一起使用: sudo netstat -tuplen。这将为您提供不仅由您拥有,而且由其他人拥有的进程,如果它们尚未显示为非root用户,它将打印其他详细信息(如PID /程序名称)。 - John Red


测试TCP端口是否打开(包括您可能拥有的任何硬件防火墙)的最快方法是从远程计算机(例如您的桌面)键入:

telnet myserver.com 80

这将尝试打开与该服务器上的端口80的连接。如果您有时间或拒绝,端口未打开:)


83
2017-09-07 17:33



说它不承认“telnet”是一个命令...... - James Anderson
“yum install telnet”安装telnet客户端软件包。 - cjc
说:telnet:连接到地址82.165.148.224:连接被拒绝 - James Anderson
上面写的: if you get a time out or deny, the port is not open - Industrial
如果您没有安装telnet的权限怎么办?还有另一种标准工​​具吗? - KC Baltz


好的,总之,您有一个可以登录的服务器。你想看看是否有东西在某个端口上侦听。以root身份运行:

netstat -nlp

这将显示侦听TCP和UDP端口的进程列表。您可以扫描(或grep)它您感兴趣的过程,和/或您希望看到的端口号。

如果您不期望进程,则应启动该进程并再次检查netstat。如果进程在那里,但是它正在监听你没想到的接口和端口,那么就会出现配置问题(例如,它可能正在侦听,但只能在loopback接口上进行,所以你会看到127.0.0.1:3306和对于端口3306没有其他行,在MySQL的默认配置的情况下)。

如果进程已启动,并且正在侦听您期望的端口,则可以尝试从办公室/家中的Macbook运行“telnet”到该端口,例如,

 telnet xxxxxxxxxxxx.co.uk 443

这将测试(假设标准端口)是否为SSL配置了Web服务器。请注意,使用telnet的此测试仅在进程正在侦听TCP端口时才起作用。如果它是UDP端口,您可以尝试使用您将要使用的任何客户端连接到它。 (我看到你使用了端口224.这是masqdialer,我不知道那是什么)。

如果服务在那里,但您无法从外部获取服务,那么就会有防火墙阻止您。在这种情况下,运行:

 iptables -L -n

这将显示系统上定义的所有防火墙规则。您可以发布,但是,通常,如果您不允许INPUT链上的所有内容,您可能需要明确允许有问题的端口上的流量:

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

或类似的规定。不要根据陌生人在互联网上告诉你的内容,盲目地运行你的防火墙命令。考虑一下你在做什么。

如果盒子上的防火墙允许你想要的流量,那么你的托管公司可能正在运行防火墙(例如,他们只允许SSH(22 / tcp),HTTP(80 / tcp)和HTTPS(443 / tcp)并否认所有其他传入的流量)。在这种情况下,您需要打开一个帮助台票,以解决此问题,但我想您的cPanel中可能有某些内容可能允许它。


23
2017-09-07 20:01



您能否添加如何撤消iptables -I命令?谢谢!! - Evgeny
“iptables -D”后跟原始命令中“-I”之后的其他内容。基本上,查看文档。 - cjc


我用的是组合 netstatlsof

netstat -an | grep <portnumber>
lsof -i:<portnumber>

查看端口是否正在使用以及使用它的是什么。


8
2018-03-28 19:32



无论是否有sudo都没有提示 - Dheeraj Thedijje
@DheerajThedijje - 那个端口没有打开 - warren
是的,它不是,得到它。 - Dheeraj Thedijje


如果您已连接到系统并可以以root身份运行命令,那么您可以检查iptables的输出

iptables -L -vn

这将列出防火墙规则以及哪些端口是开放目标 ACCEPT 和任何明确关闭的端口目标 REJECT


7
2017-09-07 17:57



如果你有firewalld,那就更简单了 firewall-cmd --query-port=port/protocol,例如 firewall-cmd --query-port=80/tcp。 - Agostino


lsof -i :ssh 将列出所有ssh端口打开的进程,包括侦听和活动连接。


5
2018-01-25 21:45



字首 sudo 如果它没有返回任何输出。 - Elijah Lynn