使用netcat将命令发送到套接字

Siv*_*ran 8 sockets shell tcp batch-file netcat

我正在向自定义协议TCP服务器发送文本命令.在下面的示例中,我发送2个命令并接收回写的响应.它在telnet和netcat中按预期工作:

$ nc 192.168.1.186 9760
command1
command2
theresponse
Run Code Online (Sandbox Code Playgroud)

我批量试用时不工作:

@echo off
cd..
cd C:\nc
nc 192.168.1.186 9760
00LI002LE99
end
Run Code Online (Sandbox Code Playgroud)

请帮帮我.

DNA*_*DNA 11

当您以nc交互方式运行时,它会从标准输入(您的终端)获取输入,因此您可以与它进行交互并发送命令.

当您在批处理脚本中运行它时,您需要将命令提供给标准输入流nc- 只需将命令放在以下行上就不会这样做; 它会尝试将它们作为完全独立的批处理命令运行.

您需要将命令放入文件中,然后将文件重定向到nc:

nc 192.168.1.186 9760 < commands.txt
Run Code Online (Sandbox Code Playgroud)

在Linux上,您可以使用"here document"将命令嵌入脚本中.

nc 192.168.1.186 9760 <<END
command1
command2
END
Run Code Online (Sandbox Code Playgroud)

但我还没有找到Windows批处理脚本的等价物.它有点难看,但您可以将命令回显到临时文件,然后将其重定向到nc:

echo command1^

command2 > commands.txt

nc 192.168.1.186 9760 < commands.txt
Run Code Online (Sandbox Code Playgroud)

该^转义字符,您可将文字换行到脚本.将换行符添加到echo命令的另一种方法(来自这个问题):

echo command1 & echo.command2 > commands.txt
Run Code Online (Sandbox Code Playgroud)

理想情况下,我们只是直接管道nc(这对我来说不太合适,但我现在无法尝试使用它nc):

echo command1 & echo.command2 | nc 192.168.1.186 9760
Run Code Online (Sandbox Code Playgroud)