我需要一个可以检查远程主机上端口状态的命令行。我试过ping xxx.xxx.xxx.xxx:161
,但它不认识“主持人”。我认为这是一个“好”的答案,直到我对一个我知道该端口打开的主机执行相同的命令。这是针对Windows上的批处理文件,它将检查远程端口的状态,然后运行使用该远程端口获取信息的命令,然后再使用远程端口检查命令,然后使用下一个服务器上的该端口获取信息的命令, 等等。我到处都看,并认为ping可能会这样做,但必须有各种版本的ping,我想因为我这样做的服务器没有显示该选项。
只是为了笑,我尝试从网站上进行基于网络的远程端口检查 - 结果对于“问题”服务器和正确的服务器都是正确的。但是,我不能在批量运行中使用它,其中包含500多个服务器IP。
我能做的事情很简单吗?我的Perl技能非常生疏(使用它或丢失它),除了批处理之外不知道任何其他基于Windows的语言。 Unix是我的技能,但必须从Widows Server 2003执行。
答案 0 :(得分:142)
您似乎正在寻找端口扫描程序,例如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
答案 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(文章)。