如何在接收到响应后通过netcat发送文件?
我基本上想要做的是this question中描述的内容,而不是来自stdin的后续数据来自另一个文件。如何在接收到响应后通过netcat发送文件?
如果我这样做:
cat file.txt | netcat 192.168.121.15
netcat的(似乎)简单地关闭传输文件后的连接。什么是上面提到的后建议是这样的:
cat file.txt - | netcat 192.168.121.15
然而,这只是保持开放从标准输入连接,而我希望能够接收关于第一档响应之后,发送第二个文件从服务器返回。
因此,我不能只发送一堆文件一次,所以the answer to this question是不是我要找的,因为我不能改变服务器使用焦油。
netcat甚至可以这样做还是有一些其他工具,我应该使用?
TL; DR:是的,但你需要的东西比一个管道cat
cat
只是聪明串接给它的所有文件,并将它们转储到stdout
,-
代表标准输入这样的方式您参考Q /一对工作是通过连接标准输入到文件。
netcat
是一个很好的工具,用于你想要做的只要打开一个原始管道到另一个端口。我认为对你来说更好的问题是,从cat
管道输出正确的工具?
刚刚使用cat ... | netcat ...
的问题在于它是单向交易。 cat
的输出用作netcat
的输入,但输出将转到stdout
,管道不是双向的,需要交互性。
如果您希望基于服务器在您的netcat管道上的响应交互式执行操作,则可以通过编程方式与管道进行交互。
如果你愿意扩展您的工具箱我建议使用ncat
这是一个更现代的实行netcat
,具有方便的选项-e
,它允许一个命令或脚本来netcat
管的附着一点点。如果您无法通过-e
与netcat
握手,您可能需要了解一些关于命名管道的内容,并获得相同的效果I/O Redirection。
我想要写这个答案之前测试的一些这方面的东西,请参阅下面的测试/例子
我没写处理通过netcat
发送多个文件监听的服务器,我只是去假设你有这样的工作,但我可以模拟客户端的一些程序化交互,并手动执行服务器。
我的虚拟“客户” /“服务器”互动这里是基于seting up 2 ncat sessions to talk to each other
-
这个有趣的活动,我写了这个简单的交互式脚本:
#!/bin/bash i=0 while true; do read line if [[ $line == "goose" ]]; then echo "zoom" exit 0 else i=$(expr $i + 1) echo "$i ..." fi done
我开始了我的“服务器“
ncat -l -p 1337
- 我开始由交互式脚本控制的我的”客户端“
ncat localhost 1337 -e ./interact.sh
-
我用手操作 “服务器”(因为NCAT没有清楚地显示我VS O I所谱写的输入与
i:
和产量o:
):i:duck o:1 ... i:duck o:2 ... i:duck o:3 ... i:goose o:zoom
哇!非常感谢!!由于某种原因,这不适用于我的实际服务器,但它完全适用于通过ncat进行的测试,因此我可能正面临着其他一些奇怪的问题。 – user124384
使用“睡眠”而不是“读线”工作。不知道为什么它无法读取一行... – user124384
我在测试过程中注意到,while循环内读取不处理没有输入。这就是预期可能派上用场的地方,或者你已经发现,睡觉然后阅读 –
这肯定看起来像[一个XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)你已经决定解决方案是'netcat',尽管它不是一个真正的文件传输工具。 –
我认为我们被鼓励说出我们试图解决问题的方法(https://mattgemmell.com/what-have-you-tried/)。 – user124384