wake-up-neo.com

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

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

228
James Anderson

您可以检查进程是否在TCP或UDP端口上使用netstat -tuplen

要检查是否可以从外部访问某些端口(这可能是您想要的),可以使用端口扫描程序,例如 Nmap fromother系统。在要检查的同一台主机上运行Nmap=)对于您的目的来说是完全没有用的。

195
joschi

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

telnet myserver.com 80

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

108
Adrian Macneil

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

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中可能存在某些允许它的东西。

32
cjc

我使用netstatlsof的组合:

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

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

12
warren

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

iptables -L -vn

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

8
user9517

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

6
pgs

如果您需要编写这样的测试脚本,则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_命令行选项。

0
Alexis Wilke