首页 文章

检查远程主机上一个端口的状态[关闭]

提问于
浏览
131

我需要一个可以检查远程主机上的端口状态的命令行 . 我试过 ping xxx.xxx.xxx.xxx:161 ,但它并没有看到任何地方,并认为ping可能会这样做,但必须有各种版本的ping,我想因为我这样做的服务器没有显示该选项 .

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

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

8 回答

  • 4

    按Windows R键入 cmd 并按Enter键

    在命令提示符下键入

    telnet "machine name/ip" "port number"
    

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

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

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

  • 2

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

  • 109

    nc或'netcat'也具有可能有用的扫描模式 .

  • 15

    在命令提示符中,您可以使用命令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
    
  • 133

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

    在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 .

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

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

  • 2

    您似乎正在寻找端口扫描程序,例如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
    
  • 20

    我想你正在寻找拥有Windows版本的Hping(http://www.hping.org/) .

    “界面受到ping(8)unix命令的启发,但hping不仅能够发送ICMP回应请求 . 它支持TCP,UDP,ICMP ......”

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

相关问题