bash - 使用 Ncat 模拟 TCP 客户端流量
问题描述
我正在尝试制作一个简单的脚本来模拟 TCP 客户端,该客户端定期启动与回显服务器的连接并生成一个随机字符串以发送到服务器,然后它应该将其发送回客户端。下面是我设置的简单 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 方式的握手完成得很好,客户端发送的数据看起来很好,但是我从来没有看到来自服务器的响应或回显。似乎服务器仍然能够响应客户端关闭连接。第一个场景的捕获在这里。
如果我刚刚nc localhost 1234
在终端中运行并开始输入内容,这与场景二形成鲜明对比。在这种情况下,我可以在 Wireshark 中看到服务器按预期响应,响应发生在此处的第 6 行。
为什么我不能像在案例 2 中那样看到案例 1 中的响应?我需要如何更改我的脚本以反映这种预期的行为(如果可能的话)?最后,在场景 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
我仍然不确定我的第三个问题,但怀疑这可能是连接的新窗口大小的同步?再次感谢您的任何见解。
解决方案
推荐阅读
- cloud-foundry - PCF Staticfile_buildpack 不考虑静态文件
- javascript - 为什么 React 将我的数组视为空的?
- jquery - 将焦点添加到单击的按钮
- postgresql - PostgreSQL 序列连接到列
- python - 使用 LIKE 和 % 通配符在通过 python 执行的 mySQL 查询中转义“%”
- angular - 使用 Angular 5 轮询端点并合并接收到的数据
- android - Android Glide:使用签名进行缓存的正确方法
- python - django ORM中的子查询
- query-optimization - 检索链中作为实例或子实例或子子实例的所有项目
- zurb-foundation - 基金会 - 找不到foundation.topbar.js