检查远程主机上一个端口的状态

我需要一个可以检查远程主机端口状态的命令行。 我尝试了ping xxx.xxx.xxx.xxx:161但它不能识别“主机”。 我认为这是一个“好”的答案,直到我对一个我知道该端口打开的主机执行相同的命令。 这是针对Windows上的一个batch file,它将检查远程端口的状态,然后运行使用该远程端口获取信息的命令,然后再次执行远程端口检查命令,然后使用下一个服务器上该端口的命令获取信息, 等等。 我已经到处寻找,并认为ping可能会做到这一点,但必须有各种版本的ping,我认为作为服务器,我这样做并没有显示该选项。

只是笑,我试图从网站的基于Web的远程端口检查器 – 结果是正确的“问题”服务器和正确的服务器。 但是,我不能在批处理中使用500多个服务器IP。

有什么我能做的很简单吗? 我的Perl技能非常生疏(使用它或丢失它),不知道除批处理以外的任何其他基于Windows的语言。 Unix是我的技能,但这必须从Widows Server 2003执行。

您似乎在寻找端口扫描程序,如nmap或netcat ,这两种扫描程序都可用于Windows,Linux和Mac OS X.

例如,在一个已知的ip上检查telnet:

 nmap -A 192.168.0.5/32 -p 23 

例如,在host.example.com上查找从20到30的开放端口:

 nc -z host.example.com 20-30 

在命令提示符中,可以使用命令telnet ..例如,要连接到端口为80的IP 192.168.10.1,

 telnet 192.168.10.1 80 

要在Windows 7及更高版本中启用telnet, 请单击 。 从链接的文章,通过控制面板 – >程序和function – > Windowsfunction – >远程login客户端启用远程login,或者只是在pipe理提示符下运行:

 dism /online /Enable-Feature /FeatureName:TelnetClient 

对于脚本的目的,我发现curl命令可以做到这一点,例如:

 $ curl -s localhost:80 >/dev/null && echo Connected. || echo Fail. Connected. $ curl -s localhost:123 >/dev/null && echo Connected. || echo Fail. Fail. 

可能它可能不适用于所有的服务,因为curl在某些情况下可能返回不同的错误代码(如注释),因此添加以下条件可以可靠地工作:

 [ "$(curl -sm5 localhost:8080 >/dev/null; echo $?)" != 7 ] && echo OK || echo FAIL 

注意:增加了-m5来设置5秒的最大连接超时时间。

如果您还想检查主机是否有效,则还需要检查6退出代码:

 $ curl -m5 foo:123; [ $? != 6 -a $? != 7 ] && echo OK || echo FAIL curl: (6) Could not resolve host: foo FAIL 

要排除返回的错误代码,只需运行: curl host:port ,例如:

 $ curl localhost:80 curl: (7) Failed to connect to localhost port 80: Connection refused 

请参阅: man curl完整列表的退出代码。

Windows + R键入cmd回车

在命令提示符下键入

 telnet "machine name/ip" "port number" 

如果端口未打开,此消息将显示:

 "Connecting To "machine name"...Could not open connection to the host, on port "port number": 

否则你将被带到开放的端口(空屏幕将显示)

使用nc命令,

 nc -zv <hostname/ip> <port/port range> For example, nc -zv localhost 27017-27019 or nc -zv localhost 27017 

你也可以使用telnet命令

 telnet <ip/host> port 

nc或“netcat”也有一个可能有用的扫描模式。

我想你正在寻找Hping( http://www.hping.org/ ),它有一个Windows版本。

“接口灵感来自于ping(8)unix命令,但hping不仅能够发送ICMP回应请求,还支持TCP,UDP,ICMP …”

如果你想查看一个TCP端口被阻塞的path(比如通过防火墙),那么ICMP可能不会是非常有用的。

在Bash中,您可以使用伪设备文件,这些文件可以打开到相关套接字的TCP连接。 语法是/dev/$tcp_udp/$host_ip/$port

下面是testingMemcached是否正在运行的简单示例:

 </dev/tcp/localhost/11211 && echo Port open || echo Port closed 

这是另一个testing,看看是否可以访问特定的网站:

 $ echo "HEAD / HTTP/1.0" > /dev/tcp/example.com/80 && echo Connection successful. Connection successful. 

有关更多信息,请查看: 高级Bash脚本指南:第29章/dev/proc

相关: testing远程系统上的端口是否可以在SU上访问(无telnet)