首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >netcat超时问题

netcat超时问题
EN

Stack Overflow用户
提问于 2014-06-13 05:42:28
回答 5查看 59.6K关注 0票数 24

如果连接尝试超过3秒(即端口未打开时),为什么下面的netcat命令不超时?我认为-w标志将是我所需要的。OS为OSX 10.9。

nc -v -z -w 3 127.0.0.1 5050

假设这是可行的,我计划像这样实现(不确定这是否有效,整个bash noob)

nc -v -z -w 3 127.0.0.1 5050 | /dev/null && echo "Online" || echo "Offline"

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-13 05:47:37

您需要重定向到/dev/null,而不是管道到它。尝试以下几点:

代码语言:javascript
复制
nc -v -z -w 3 127.0.0.1 5050 &> /dev/null && echo "Online" || echo "Offline"

在我的机器上,端口5050没有打开,我得到以下信息:

代码语言:javascript
复制
$ nc -v -z -w 3 localhost 5050 &> /dev/null && echo "Online" || echo "Offline"
Offline
票数 33
EN

Stack Overflow用户

发布于 2020-03-29 18:29:32

从MacOSX10.8.x开始,nc就使用-G选项来设置启动连接的超时。这与-w选项是分开的,后者设置已建立但已闲置的连接的超时。

如果您试图使用nc进行端口扫描,即nc -v -z 10.0.1.1 1-1023,它将花费超过一分钟的时间试图连接到每个没有响应的端口,除非您添加了-G超时值:

nc -v -z -G 1 10.0.1.1 1-1023

这是每一秒扫描的端口-更有用。

票数 16
EN

Stack Overflow用户

发布于 2019-05-09 15:30:28

nc : nc通常已经安装好了,但是在一些系统(如Mac )上,命令挂在无法到达的系统上,没有-G选项。如果这不起作用,请使用解决办法。

代码语言:javascript
复制
nc -v -z -w 3 127.0.0.1 22 &> /dev/null && echo "Online" || echo "Offline"

Mac:

代码语言:javascript
复制
nc -z -G 3 127.0.0.1 22  &> /dev/null && echo "Online" || echo "Offline"

替代解决方案选项:

代码语言:javascript
复制
bash -c '(sleep 3; kill $$) & exec nc -z 127.0.0.1 22' &> /dev/null
echo $?
0
bash -c '(sleep 3; kill $$) & exec nc -z 1.2.3.4 22' &> /dev/null
echo $?
143

(示例说明通过一个好的和坏的主机示例连接到端口22 ssh,使用$?以确定它是否在3秒的睡眠时间内到达主机)

或者,对于Mac用户(主要是)等,您可以在脚本中使用如下命令:

代码语言:javascript
复制
    # -- use NMAP, if not avail. go with nc --
    if command -v nmap | grep -iq nmap ; then
        nmap ${ip} -PN -p ${ssh_port} | grep -iq "open"
        res=$?
    elif command -v nc | grep -iq nc ; then
        # -- run command if fails to complete in 3 secs assume host unreachable --
        ( nc -z ${ip} ${ssh_port} ) & pid=$!
        ( sleep 3 && kill -HUP $pid ) 2>/dev/null & watcher=$!
        if wait $pid 2>/dev/null; then
            pkill -HUP -P $watcher
            wait $watcher
            # -- command finished (we have connection) --
            res=0
        else
            # -- command failed (no connection) --
            res=1
        fi
    else
        echo "Error: You must have NC or NMAP installed"
    fi

    if [[ ${res} -lt 1 ]] ;then
        success=1
        echo "testing  => $ip SUCCESS connection over port ${ssh_port}"
        break;
    else
        echo "testing => $ip FAILED connection over port ${ssh_port}"
    fi
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24198456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档