我正在尝试创建一个简单的脚本来模拟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
我仍然不确定我遇到的第三个问题,但怀疑这可能是连接的新窗口大小的同步?再次感谢您的任何见解。