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

评论

您要问的还不太清楚。 “开放”是什么意思?您是说某个服务器正在该端口上监听吗?还是您的意思是系统防火墙允许它?还是什么?

我认为服务器上的端口已被阻止,并希望再次解除阻止/打开它。

netstat -an | grep PORTNUMBER | grep -i listen如果输出为空,则说明该端口未使用。

nc -w5 -z -v <端口号>,您应该获得类似于成功连接到127.0.0.1 9000端口[tcp / *]的信息,否则端口被关闭。

#1 楼

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

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

评论


GNU netstat知道参数-t,-u,-p,-l,-e和-n。多亏了选项解析器,它可以表示为-tuplen。 linux.die.net/man/8/netstat

– joschi
13年4月26日在9:53

另外,telnet命令通常仅支持TCP,因此,如果要检查的服务在其他协议上运行,您将很不走运。

– joschi
13年4月26日在9:55

是的,我正在使用Windows,因此很混乱。

–糊精
13年4月27日在15:42

nc(更好)是telnet的替代方案。它也支持UDP。

–茨维托米尔·迪米特洛夫(Tsvetomir Dimitrov)
13年10月10日在8:42

当我转到netstat手册页时,它说netstat已过时。

–trysis
18年5月16日在12:41

#2 楼

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

telnet myserver.com 80


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

评论


说它不将“ telnet”识别为命令...

–詹姆斯·安德森(James Anderson)
2011年9月7日于17:37

“ yum install telnet”以安装telnet客户端软件包。

– cjc
2011年9月7日于17:41

上面写道:如果您超时或拒绝,则端口未打开

–工业
2011年9月7日在18:09

如果没有安装telnet的权限怎么办?还有其他标准工具吗?

– KC Baltz
2014年1月14日23:40

我尝试了“ telnet myhost 22”并超时。但是我可以使用该机器。 ?!

–折腾者
'18 Sep 6'在10:59

#3 楼

好的,总而言之,您拥有一台可以登录的服务器。您想查看某端口是否正在监听。以root身份运行:

netstat -nlp


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

如果您期望的进程不存在,则应该启动该过程,然后再次检查netstat。如果存在该过程,但是正在侦听您不期望的接口和端口,则存在配置问题(例如,它可能正在侦听,但仅在环回接口上侦听,因此您将看到127.0.0.1:3306和对于MySQL的默认配置,端口3306上没有其他行)。

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

 telnet xxxxxxxxxxxx.co.uk 443


这将测试(假设标准端口)是否为SSL配置了Web服务器。请注意,只有在进程正在侦听TCP端口的情况下,使用telnet进行的此测试才有效。如果是UDP端口,则最好尝试使用要用于连接到它的任何客户端。 (我看到您使用的是端口224。这是masqdialer,我不知道那是什么。)。

如果有该服务,但是您不能从外部访问它,那么这里有一个防火墙阻止了您。在这种情况下,请运行:

 iptables -L -n


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

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


或类似的东西。不要基于陌生人在Internet上告诉您的内容盲目运行防火墙命令。考虑一下您在做什么。

如果包装盒上的防火墙允许您所需的流量,则您的托管公司可能正在运行防火墙(例如,它们仅允许SSH(22 / tcp),HTTP(80 / tcp)和HTTPS(443 / tcp)并拒绝所有其他传入流量)。在这种情况下,您将需要与他们一起打开服务台票证来解决此问题,尽管我认为您的cPanel中可能存在允许它的东西。

评论


您能否添加如何撤消iptables -I命令?谢谢!!

–Evgeny
2013年9月9日在22:52



“ iptables -D”后跟原始命令中“ -I”之后的其他内容。基本上,查找文档。

– cjc
2013年9月10日上午11:45

我强烈建议使用ufw(只需apt安装ufw,然后参阅man ufw),它是iptables的更用户友好的前端。

– Nagev
6月10日10:40

#4 楼

我使用netstatlsof的组合:

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


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

评论


没有或没有sudo的任何提示

– Dheeraj Thedijje
17年11月22日在6:25

@DheerajThedijje-然后该端口未打开

–沃伦
18年5月25日在14:47

是的,不是,知道了。

– Dheeraj Thedijje
18年6月6日在7:29

#5 楼

如果连接到系统并且可以以root用户身份运行命令,则可以检查iptables的输出。

iptables -L -vn


这将列出防火墙规则和打开的端口目标ACCEPT和所有显式关闭的端口目标REJECT

评论


如果您使用了firewalld,则它是比较简单的firewall-cmd --query-port = port / protocol,例如防火墙cmd --query-port = 80 / tcp。

– Agostino
18年7月20日在16:00

#6 楼

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

评论


如果不返回任何输出,则为sudo前缀。

–伊利亚·林恩(Elijah Lynn)
17年6月13日在23:08

@ElijahLynn实际上,其他用户打开的任何连接都需要sudo(可能是ssh或http等服务打开的LISTEN端口)。

– Alexis Wilke
3月7日17:53

#7 楼

如果您需要编写这样的测试脚本,则Serhii Popov的解决方案(请参阅问题注释)可能是最好的,因为nc能够搜索TCP堆栈中的开放端口,而不用尝试进行实际连接。

最简单的形式是:

nc -z <ip> <port>


如果打开指定的<ip>:<port>组合(即您的服务之一正在监听),则该命令返回true。 />
所以现在您可以编写脚本来等待端口打开:

while ! nc -z <ip> <port>
do
    sleep 1
done


注1:我尝试了-w命令行选项,并且似乎什么也没做。无论哪种方式,命令都会立即返回。我认为-w-z没有用。

注2:为帮助调试,请尝试使用-v命令行选项。

评论


如果端口未打开并且软件包被丢弃,-w非常有用,否则nc将永远等待。

–卡尔·霍尔伯格
7月15日20:02

也许只有我一个人,但是使用-z似乎没有任何作用。您是什么意思“包裹被丢弃”?您是说“丢包”吗?如果端口关闭,为什么会收到数据包?

– Alexis Wilke
7月15日22:47