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


209

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


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

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

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

Answers:


187

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

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


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

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

1
是的,我正在使用Windows,因此很混乱。
德克斯特(Dexter)2013年

2
nc(更好)是telnet的替代方案。它也支持UDP。
茨维托米尔·迪米特洛夫

1
与sudo:一起使用sudo netstat -tuplen。这将使您不仅拥有自己的进程,而且还拥有其他进程的进程,如果还没有显示为非root用户,它将打印其他详细信息(例如PID /程序名)。
约翰·雷德

102

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

telnet myserver.com 80

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


1
说它不承认“远程登录”是命令...
James Anderson

6
“ yum install telnet”以安装telnet客户端软件包。
cjc 2011年

8
上面写的:if you get a time out or deny, the port is not open
工业

2
如果您没有安装telnet的权限怎么办?还有其他标准工具吗?
KC Baltz 2014年

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

30

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

netstat -nlp

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

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

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

 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

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

11

我使用的组合netstatlsof

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

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


没有提示是否有sudo
Dheeraj Thedijje

1
@DheerajThedijje-然后该端口未开放
沃伦

是的,不是,知道了。
Dheeraj Thedijje

7

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

iptables -L -vn

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


而且,如果您使用防火墙保护,则更为简单firewall-cmd --query-port=port/protocol,例如firewall-cmd --query-port=80/tcp
阿戈斯蒂诺,

6

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


sudo如果没有任何输出,则添加前缀。
伊莱贾·琳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.