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

时间:2009-07-22 21:18:47

标签: windows batch-file tcp cmd

我需要一个可以检查远程主机上端口状态的命令行。我试过ping xxx.xxx.xxx.xxx:161,但它不认识“主持人”。我认为这是一个“好”的答案,直到我对一个我知道该端口打开的主机执行相同的命令。这是针对Windows上的批处理文件,它将检查远程端口的状态,然后运行使用该远程端口获取信息的命令,然后再使用远程端口检查命令,然后使用下一个服务器上的该端口获取信息的命令, 等等。我到处都看,并认为ping可能会这样做,但必须有各种版本的ping,我想因为我这样做的服务器没有显示该选项。

只是为了笑,我尝试从网站上进行基于网络的远程端口检查 - 结果对于“问题”服务器和正确的服务器都是正确的。但是,我不能在批量运行中使用它,其中包含500多个服务器IP。

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

8 个答案:

答案 0 :(得分:142)

您似乎正在寻找端口扫描程序,例如nmapnetcat,这两种扫描程序都适用于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

答案 1 :(得分:120)

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

telnet 192.168.10.1 80

在Windows 7及更高版本click中启用telnet。从链接的文章中,通过控制面板启用telnet - >程序和功能 - > windows功能 - > telnet客户端,或者只是在管理员提示符下运行它:

dism /online /Enable-Feature /FeatureName:TelnetClient

答案 2 :(得分:24)

出于编写脚本的目的,我发现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

答案 3 :(得分:22)

Windows + R 输入cmd输入

在命令提示符下输入

telnet "machine name/ip" "port number"

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

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

否则您将进入打开的端口(将显示空白屏幕)

答案 4 :(得分:17)

使用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

答案 5 :(得分:4)

nc或'netcat'也有一种可能有用的扫描模式。

答案 6 :(得分:2)

我认为您正在寻找拥有Windows版本的Hping(http://www.hping.org/)。

  

“界面的灵感来源于   ping(8)unix命令,但hping不是   只能发送ICMP回应请求。   它支持TCP,UDP,ICMP ......“

如果您想要查看TCP端口被阻止的路径(例如防火墙),ICMP可能不在哪里,这也非常有用。

答案 7 :(得分:2)

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

以下是测试Memcached是否正在运行的简单示例:

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

这是另一项测试,看看是否可以访问特定网站:

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

有关详情,请查看:Advanced Bash-Scripting Guide: Chapter 29. /dev and /proc

相关:SuperUser上的Test if a port on a remote system is reachable (without telnet)

有关更多示例,请参阅:How to open a TCP/UDP socket in a bash shell(文章)。