如何在接收到响应后通过netcat发送文件?

如何在接收到响应后通过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甚至可以这样做还是有一些其他工具,我应该使用?

+0

这肯定看起来像[一个XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)你已经决定解决方案是'netcat',尽管它不是一个真正的文件传输工具。 –

+0

我认为我们被鼓励说出我们试图解决问题的方法(https://mattgemmell.com/what-have-you-tried/)。 – user124384

TL; DR:是的,但你需要的东西比一个管道cat

cat只是聪明串接给它的所有文件,并将它们转储到stdout-代表标准输入这样的方式您参考Q /一对工作是通过连接标准输入到文件。

netcat是一个很好的工具,用于你想要做的只要打开一个原始管道到另一个端口。我认为对你来说更好的问题是,从cat管道输出正确的工具?

刚刚使用cat ... | netcat ...的问题在于它是单向交易。 cat的输出用作netcat的输入,但输出将转到stdout,管道不是双向的,需要交互性。

如果您希望基于服务器在您的netcat管道上的响应交互式执行操作,则可以通过编程方式与管道进行交互。

例如,您可以使用readexpect

如果你愿意扩展您的工具箱我建议使用ncat这是一个更现代的实行netcat,具有方便的选项-e,它允许一个命令或脚本来netcat管的附着一点点。如果您无法通过-enetcat握手,您可能需要了解一些关于命名管道的内容,并获得相同的效果I/O Redirection

我想要写这个答案之前测试的一些这方面的东西,请参阅下面的测试/例子

我没写处理通过netcat发送多个文件监听的服务器,我只是去假设你有这样的工作,但我可以模拟客户端的一些程序化交互,并手动执行服务器。

我的虚拟“客户” /“服务器”互动这里是基于seting up 2 ncat sessions to talk to each other

  1. 这个有趣的活动,我写了这个简单的交互式脚本:

    #!/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 
    
  2. 我开始了我的“服务器“ncat -l -p 1337

  3. 我开始由交互式脚本控制的我的”客户端“ncat localhost 1337 -e ./interact.sh
  4. 我用手操作 “服务器”(因为NCAT没有清楚地显示我VS O I所谱写的输入与i:和产量o:):

    i:duck 
    o:1 ... 
    i:duck 
    o:2 ... 
    i:duck 
    o:3 ... 
    i:goose 
    o:zoom 
    
+0

哇!非常感谢!!由于某种原因,这不适用于我的实际服务器,但它完全适用于通过ncat进行的测试,因此我可能正面临着其他一些奇怪的问题。 – user124384

+0

使用“睡眠”而不是“读线”工作。不知道为什么它无法读取一行... – user124384

+1

我在测试过程中注意到,while循环内读取不处理没有输入。这就是预期可能派上用场的地方,或者你已经发现,睡觉然后阅读 –