#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 楼
我使用netstat
和lsof
的组合: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
评论
您要问的还不太清楚。 “开放”是什么意思?您是说某个服务器正在该端口上监听吗?还是您的意思是系统防火墙允许它?还是什么?我认为服务器上的端口已被阻止,并希望再次解除阻止/打开它。
netstat -an | grep PORTNUMBER | grep -i listen如果输出为空,则说明该端口未使用。
nc -w5 -z -v