我正在向自定义协议TCP服务器发送文本命令。在下面的示例中,我发送2个命令并接收回写的响应。它在telnet和netcat中按预期工作:
$ nc 192.168.1.186 9760
command1
command2
theresponse
当我批量尝试时,无法正常工作:
@echo off
cd..
cd C:\nc
nc 192.168.1.186 9760
00LI002LE99
end
请帮我解决这个问题。
答案 0 :(得分:8)
当您以交互方式运行nc
时,它会从标准输入(您的终端)获取输入,因此您可以与它进行交互并发送命令。
在批处理脚本中运行它时,需要将命令提供给nc
的标准输入流 - 只需将命令放在以下行中就不会这样做;它会尝试将它们作为完全独立的批处理命令运行。
您需要将命令放入文件中,然后将文件重定向到nc
:
nc 192.168.1.186 9760 < commands.txt
在Linux上,您可以使用“here document”将命令嵌入脚本中。
nc 192.168.1.186 9760 <<END
command1
command2
END
但我没有找到Windows批处理脚本的等价物。它有点难看,但您可以将命令回显给临时文件,然后将其重定向到nc
:
echo command1^
command2 > commands.txt
nc 192.168.1.186 9760 < commands.txt
使用^
转义字符可以将文字换行符放入脚本中。将换行符添加到echo命令的另一种方法(来自this question):
echo command1 & echo.command2 > commands.txt
理想情况下,我们只是直接使用nc
(这对我来说不太合适,但我目前无法使用nc
进行尝试):
echo command1 & echo.command2 | nc 192.168.1.186 9760