我需要一个命令行,可以检查远程主机上的端口状态。 我试过ping xxx.xxx.xxx.xxx:161
,但它不承认“宿主”。 我认为这是一个“好”的答案,直到我做了同样的命令对我认识的那个端口开放主机。 这是Windows上的批处理文件,将检查远程端口的状态,然后运行使用命令远程端口信息,再然后远程端口检查命令,然后使用该命令的信息,下一台服务器上的端口, 等等。 我到处找,以为平安可能做到这一点,但必须有平的各种版本,我想为我的不显示选项这样的服务器。
只是为了笑,我试图从一个网站一个基于Web的远程端口检查 - ,结果为“问题”服务器和正确的服务器都正确。 但是,我不能使用,在批处理运行在它500+服务器的IP。
有什么我能做到这一点很简单? 我的Perl的技能是非常生疏(使用它或失去它),不知道除了批任何其他基于Windows的语言。 Unix的是我的技能,但是这必须从寡妇Server 2003中执行。
你似乎在寻找一个端口扫描器,如NMAP或netcat的 ,这两者都是可用于Windows,Linux和Mac OS X.
例如,检查上已知的IP远程登录:
nmap -A 192.168.0.5/32 -p 23
例如,寻找开放的端口从20到30 host.example.com:
nc -z host.example.com 20-30
在命令提示符下,你可以使用命令远程登录。例如,用80端口连接到IP 192.168.10.1,
telnet 192.168.10.1 80
要在Windows 7及以上的启动telnet 点击 。 从链接的文章,能够通过控制面板的telnet - >程序和功能 - > Windows功能 - > Telnet客户端,或者只是在管理员提示符下运行这样的:
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端口被阻止(比如通过防火墙),其中ICMP可能不是它也是非常有用的。
在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.
欲了解更多信息,请查看: 高级Bash脚本编程指南:第29章/dev
和/proc
。
相关: 测试一个远程系统上的端口是可到达的(没有远程登录)在超级用户。
更多的例子,请参阅: 如何在bash shell打开一个TCP / UDP套接字 (条)。