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

Jam*_*son 255 linux port telnet

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

jos*_*chi 215

您可以使用netstat -tuplen.

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

  • GNU netstat 知道参数 `-t`、`-u`、`-p`、`-l`、`-e` 和 `-n`。多亏了选项解析器,它可以表示为`-tuplen`。http://linux.die.net/man/8/netstat (56认同)
  • 根据文章:https://computingforgeeks.com/netstat-vs-ss-usage-guide-linux/ `netstat` 已弃用,而 `ss` 是它的替代品,因此您可以执行 `ss -an`、`ss -tuplen` 或用于 tcp 侦听套接字的 `ss -ntlp`。 (5认同)
  • 此外,`telnet` 命令通常只支持 TCP,所以如果你想检查的服务运行在另一个协议上,你就不走运了。 (4认同)
  • nc 是(更好的)telnet 的替代品。它也支持UDP。 (3认同)
  • 当我转到 `netstat` `man` 页面时,它说 `netstat` 已过时。 (2认同)
  • -t:TCP;-u:UDP;-p:显示程序;-l:仅显示监听套接字;-e:扩展(显示详细信息);-n:数字(显示 IP 而不是主机名) (2认同)

小智 119

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

telnet myserver.com 80
Run Code Online (Sandbox Code Playgroud)

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

  • 上面写着:`如果你超时或拒绝,端口没有打开` (8认同)
  • “yum install telnet”安装telnet客户端包。 (7认同)
  • 我尝试了“telnet myhost 22”并超时。但是我可以通过 ssh 进入那台机器。?! (5认同)
  • 如果您没有权限安装 telnet 怎么办?还有其他标准工具吗? (2认同)

cjc*_*cjc 39

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

netstat -nlp
Run Code Online (Sandbox Code Playgroud)

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

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

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

 telnet xxxxxxxxxxxx.co.uk 443
Run Code Online (Sandbox Code Playgroud)

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

如果该服务在那里,但您无法从外部访问它,则说明有防火墙阻止了您。在这种情况下,运行:

 iptables -L -n
Run Code Online (Sandbox Code Playgroud)

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

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

或类似的规定。不要根据某些陌生人在 Internet 上告诉您的内容盲目地运行您的防火墙命令。想想你在做什么。

如果您的防火墙允许您想要的流量,那么您的托管公司可能正在运行防火墙(例如,他们只允许 SSH (22/tcp)、HTTP (80/tcp) 和 HTTPS (443/tcp)并拒绝所有其他传入流量)。在这种情况下,您需要与他们一起打开服务台票证以解决此问题,但我认为您的 cPanel 中可能有某些内容允许这样做。


war*_*ren 16

我使用的组合netstatlsof

netstat -an | grep <portnumber>
lsof -i:<portnumber>
Run Code Online (Sandbox Code Playgroud)

查看端口是否正在使用,以及正在使用它的内容。


use*_*517 10

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

iptables -L -vn
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*lke 9

如果您需要编写这样的测试脚本,Serhii Popov 的解决方案(请参阅问题评论)可能是最好的解决方案nc它能够在 TCP 堆栈中搜索开放端口\xc2\xb3,而不是尝试实际连接。

\n

最简单的形式是:

\n
nc -z <ip> <port>\n
Run Code Online (Sandbox Code Playgroud)\n

如果找到指定的命令,则返回 true<ip>:<port>组合正在打开(即您的服务之一正在侦听),则返回 true。

\n

现在您可以编写一个脚本来等待端口打开:

\n
while ! nc -z <ip> <port>\ndo\n    sleep 1\ndone\n
Run Code Online (Sandbox Code Playgroud)\n

注 1:我尝试了-w命令行选项,但似乎没有做任何事情。无论哪种方式,命令都会立即返回。我认为 与-w没有用-z

\n

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

\n

注 3:nc -z ...实际上创建了 a socket(),然后尝试对它进行bind()connect()。如果有效,则认为端口已打开。

\n

  • 如果端口未打开并且包被丢弃,“-w”非常有用,否则“nc”将永远等待。 (2认同)

pgs*_*pgs 7

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