检查远程主机上一个端口的状态
我需要一个可以检查远程主机端口状态的命令行。 我尝试了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)
- 我应该如何在C ++中正确使用FormatMessage()?
- 从另一个或从提示调用Windowsbatch file的几种方法。 哪一个在哪种情况下?
- Windowsbatch file文件从URL下载
- 如何在Windows中安装pkgconfiguration?
- 如何使用Windows命令行环境查找和replace文件中的文本?
- .NET 4.0是否与Windows XP SP2或更低版本兼容?
- NTFS连接点和符号链接有什么区别?
- 找不到模块'../build/Release/bson'] code:'MODULE_NOT_FOUND'} js-bson:无法加载c ++ bson扩展,使用纯JS版本
- 如何在Windows上禁用emacs中的嘟嘟声