NetCat客户端通信自动化脚本故障排查咨询
脚本问题排查与修复
核心问题分析
- Case匹配条件错误:脚本中case的场景条件用双引号包裹(如
"GORGE"),但服务端发送的场景字符串是不带引号的(如GORGE),导致匹配失败,触发默认分支输出原场景名,而非对应的响应词。 - 无条件发送"y":每次循环都执行
echo "y" > nc_pipe,会在场景交互阶段额外发送无效的"y",打乱服务端的交互流程。 - 非场景消息未写入管道:收到"What do you do?"或"Ok then! Let's go!"时,仅输出到终端,未写入nc_pipe,服务端无法收到回复,导致流程中断。
- 初始文件删除无容错:开头
rm nc_pipe未加-f,若管道文件不存在会报错中断脚本。 - 分段写入易出问题:循环中逐段写入响应内容,可能因管道缓存导致输出顺序混乱。
修复后的脚本
rm -f nc_pipe s="83.136.252.123" p="40409" mkfifo nc_pipe nc $s $p < nc_pipe | while read -r nr do # 仅在收到开始提示时发送y if [[ "$nr" == *"Ok then! Let's go!"* ]]; then echo "y" > nc_pipe continue fi # 处理场景请求,先组装完整响应 arr=(${nr//, / }) ((len=${#arr[@]}-1)) response="" for i in {0..$len} do case ${arr[i]} in GORGE) response+="STOP";; PHREAK) response+="DROP";; FIRE) response+="ROLL";; "What do you do?") echo "What do you do?" > nc_pipe response="" break ;; *) response="" break ;; esac if [ $i -lt $len ]; then response+="-" fi done # 发送组装好的响应 if [[ -n "$response" ]]; then echo "$response" > nc_pipe fi done rm -f nc_pipe
关键修改说明
- 修正匹配规则:去掉场景条件的双引号,直接匹配服务端发送的原始场景字符串,确保响应映射正确。
- 控制"y"的发送时机:仅在收到
Ok then! Let's go!时发送"y",避免干扰后续场景交互。 - 统一响应写入逻辑:所有需要发送给服务端的内容都写入nc_pipe,包括交互提示消息。
- 预组装响应内容:先把多场景的响应拼接成完整字符串,再一次性写入管道,避免分段写入的顺序问题。
- 增加容错处理:删除管道文件时加
-f参数,避免文件不存在时报错;遇到未知消息直接跳过发送,避免无效输出。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

