将命令导入 nc

将命令导入 nc

我似乎搜索过许多非常相似的问题,但从未找到可行的方法。我正在尝试使用 Raspberry Pi(第二代)与 Wifi OBDII 传感器通信。我可以使用以下命令

nc -C 192.168.0.10 35000

192.168.0.10 是汽车传感器,35000 是端口。这不太重要,因为连接似乎没问题。无论如何,我可以打开一个 nc 实例,然后输入例如“0145”(传感器代码),作为回报,我会在 nc 会话的输出中获得该传感器的值(例如,我的发动机的 RPM)。这很好用。我想要做的是将文本文件中的命令传输到 nc 会话中以进行绘图。所以我的理想结果是将 RPM 值和相关时间的恒定流转储到文本文件中。我可以从那里开始工作。但是,我不知道该怎么做。我已经设置了一个包含数千行“0145”的命令。我想读取该文件并将其逐行传递给 nc(我可能可以使用 sleep 控制采样间隔),然后读取输出并将它们存储到文本文件中。我知道这个问题与 stdin、stdout 和管道有关,但无论出于什么原因,我都无法完全理解它。我绝不是这些方面的高手。我也想编写整个过程的脚本。

现在,如果我跑

cat <(echo 0145) - | nc -C 192.168.0.10 35000

这给了我想要的终端输出,但只适用于单个值。但是,当我尝试将其放入循环中时,我将 0145 放入脚本中的 $commands 并从 txt 文件中逐行获取 $commands,它就会停止工作。事实上,即使我将其保留为 0145 并且不使用变量,它也会在任何循环或 if 块中停止工作。

长话短说,我想编写脚本,逐行将 txt 文件发送到 nc 连接,然后将每个响应提取到另一个文件中。如果没有编写脚本,我可以打开该 nc 连接并每 1 秒发送 0145 并获取这些响应(仍然不知道如何将它们传递到文件),但这样做效率不高。我觉得应该有一种更简单的方法来做到这一点。我有点菜鸟,但我想我会在这里试一试。任何帮助都非常感谢

答案1

可能有很多方法可以做到这一点。

使用 netcat

问题在于网猫是它一旦检测到文件结尾就会关闭连接。GNU 实现的网猫确实有几个选择(-k或者-w -1)来无限期地保持监听实例打开,但都不起作用。什么是有效的nmap的版本网猫,称为酶联免疫吸附试验

在你的电脑上安装nmap打包,然后发出:

mkfifo return_pipe
ncat -k -l 12345 0<return_pipe| ncat -C 192.168.0.10 35000 1>return_pipe &

现在,您可以通过多种方式传输您喜欢的所有内容,

echo Ciao | ncat localhost 12345
cat somefile.txt | ncat localhost 12345 

只要你的听众配合,连接就不会中断(IE,它不会在第一个文件结束后停止监听)。或者你可以使用命名管道:从与发出第一个命令的终端不同的终端,

mkfifo mypipe
tail -f mypipe | ncat localhost 12345 &
echo Ciao > mypipe
cat somefile.txt > mypipe

返回消息来自你的设备现在位于命名管道中返回管道。 命令

tail -f return_pipe >> responses

将设备响应附加到名为回应

没有 netcat

这一点已被指出伊波尔·西尔瑟(很好!我 +1)。但我会做些不同的事情,

exec 3>/dev/tcp/192.168.0.10/35000
exec 4</dev/tcp/192.168.0.10/35000
exec 4>>somefile.out
echo "Ciao" >&3 
cat somefile.txt >&3

如果你还想跟踪你的命令,

echo Ciao | tee  -a file_with_my_commands 1>&3
cat somefile.txt | tee -a file_with_my_commands 1>&3

当你完成此次沟通后,

exec 3>&-
exec 4>&-

答案2

为什么要使用netcatBash可以使用内置别名处理 tcp 套接字。

n=0
while read -r line;do
 ((n++))
 exec 3<>/dev/tcp/192.168.0.10/35000
 echo -e "$line" >&3
 cat <&3 > response.$n
 exec 3<&-
 exec 3>&-
done < data.txt

相关内容