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

时间:2014-01-15 06:45:49

标签: shell sockets batch-file tcp netcat

我正在向自定义协议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

请帮我解决这个问题。

1 个答案:

答案 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