使用Ncat

时间:2018-05-16 02:49:04

标签: bash tcp netcat

我正在尝试创建一个简单的脚本来模拟TCP客户端,该客户端定期启动与echo服务器的连接并生成随机字符串以发送到服务器,然后将其发送回客户端。下面是我设置的简单bash脚本:

while :
do
        var="$(shuf -i 9-19 -n 1)" # generate a random number between 9-19
        rand="$(pwgen "$var" 1)" # generate a random string of size var
        echo "$rand" | nc localhost 1234 
        sleep 5
done

服务器本身就是终端中运行的简单命令:

ncat -l 1234 -k --exec "/bin/cat"

我在Wireshark中注意到方案1,TCP 3方式握手完成正常,客户端发送的数据看起来很好,但后来我从未看到来自服务器的响应或回应。似乎服务器仍然能够响应关闭连接的客户端。第一个方案的捕获是here.

如果我刚刚在终端中运行nc localhost 1234并开始输入内容,则与方案二形成对比。在这种情况下,我可以在Wireshark中看到服务器按预期响应,响应发生在line 6 here.

为什么我在案例1中看不到响应,就像我在案例2中那样?我如何更改脚本以反映此预期行为(如果可能)?最后,在方案2中,为什么服务器会两次响应客户端,首先是没有数据的[ACK],而是在包含“echo”数据后立即另一个[PSH,ACK](如第5行和第6行所示)第二次捕获)?

编辑:浏览了一些后,我想我找到了解决问题的方法。这是由于netcat退出之前可以收到https://unix.stackexchange.com/questions/289364/netcat-doesnt-print-response详细说明的响应。因此,一个简单的修复方法是更改​​脚本,使其使用-q延迟选项。

 while :
    do
            var="$(shuf -i 9-19 -n 1)" 
            rand="$(pwgen "$var" 1)" 
            echo "$rand" | nc -q 1 localhost 1234 #change here
            sleep 5
    done

我仍然不确定我遇到的第三个问题,但怀疑这可能是连接的新窗口大小的同步?再次感谢您的任何见解。

0 个答案:

没有答案