使用netcat向套接字发送命令

16

我正在向自定义协议的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
请详细说明"not working"的含义。你看到发生了什么,你期望发生什么?将你的命令放在一个名为"commands.txt"的文件中,然后运行nc 192.168.1.186 9760 < "commands.txt" - indiv
1个回答

23
运行 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 命令的方式(来自这个问题):
echo command1 & echo.command2 > commands.txt

理想情况下,我们只需直接将内容导入nc(但我无法立即尝试使用nc进行操作)。
echo command1 & echo.command2 | nc 192.168.1.186 9760

你可以尝试在Windows上使用带有换行符的echo工具将短的多行列表导入netcat。如果使用分号分隔,目标系统也可能接受所有命令都在一行上的特定命令。 - Chris Stratton
已添加了使用临时文件的建议 - 不过使用管道会更好。关于分号的想法很不错。 - DNA
我本以为是这样的,但对我来说并没有正常工作(使用sort命令而不是nc,因为我在Windows上没有安装nc),但无论如何我会编辑答案... - DNA
是的... 看来 Windows 崩溃了(惊讶!)很抱歉。 - Chris Stratton
感谢 @DNA 的回答! - Lyes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接