jos*_*chi 215
您可以使用netstat -tuplen.
要检查是否可以从外部访问某些端口(这可能是您想要的),您可以使用来自另一个系统的端口扫描器,例如Nmap。在您要检查的同一台主机上运行 Nmap 对您的目的来说毫无用处。
小智 119
测试 TCP 端口是否打开(包括您可能拥有的任何硬件防火墙)的最快方法是从远程计算机(例如您的桌面)键入:
telnet myserver.com 80
Run Code Online (Sandbox Code Playgroud)
这将尝试打开与该服务器上端口 80 的连接。如果您超时或拒绝,则端口未打开 :)
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
我使用的组合netstat和lsof:
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。
如果您需要编写这样的测试脚本,Serhii Popov 的解决方案(请参阅问题评论)可能是最好的解决方案nc它能够在 TCP 堆栈中搜索开放端口\xc2\xb3,而不是尝试实际连接。
最简单的形式是:
\nnc -z <ip> <port>\nRun Code Online (Sandbox Code Playgroud)\n如果找到指定的命令,则返回 true<ip>:<port>组合正在打开(即您的服务之一正在侦听),则返回 true。
现在您可以编写一个脚本来等待端口打开:
\nwhile ! nc -z <ip> <port>\ndo\n sleep 1\ndone\nRun Code Online (Sandbox Code Playgroud)\n注 1:我尝试了-w命令行选项,但似乎没有做任何事情。无论哪种方式,命令都会立即返回。我认为 与-w没有用-z。
注 2:为了帮助调试,请尝试使用-v命令行选项。
注 3:nc -z ...实际上创建了 a socket(),然后尝试对它进行bind()和connect()。如果有效,则认为端口已打开。