微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何延迟pipe网连接第一个input

在Ubuntu下运行在bash下:

我有一个来源,产生了一些输出,但不是直接的。 假设这是第一个套接字上监听的netcat -l 12345 : netcat -l 12345 。

我想将其pipe理到一个外出的netcat(通过TCP连接),例如netcat -l 12345 | netcat localhost 54321 netcat -l 12345 | netcat localhost 54321 。 但棘手的是,我知道当我运行该命令时没有任何监听本地主机54321上的传入连接,但是我知道当第一个实际的字符通过pipe道到达时会有一个连接。

所以我的问题是:有没有办法:

数以千计的IP地址/接口与较慢的程序性能

在RHEL上更改用户认loginshell?

如何为Linux内核开发做贡献? 使用最新的源代码

安装MysqL gem时出错

在没有udev或libusb的Linux上的USB连接事件

延迟传出netcat的执行,直到第一个字符到达pipe道,或者

延迟传出的netcat尝试build立TCP连接,直到它接收到标准input的第一个字符? (没有人的直接select,切换到UDP是不能接受的)

提前致谢!

编辑:实际上,源比netcat更复杂,即通过各种stream修改来监听netcat。

安装RVM时出错

具有特定单词时如何将第3列replace为第1列?

我应该使用哪种工具从string中提取数据?

如何在Linux中创build一个虚拟设备?

POSIX部分写入()

使用你已经做了的研究,我评论(不知道这是你自己的问题的答案),这里是完整的delayed_netcat.sh :

#!/bin/bash read line netcat "${@}" < <(echo $line ; cat)

这首先等待输入一行,然后使用一个简单的echo前面的那一行,以“新生成”输入到实际的netcat 。 其余的stdin只是使用cat从stdin重新定向,并将其添加到netcat的输入。 它还支持将命令行选项和参数传递给“真正的” netcat 。

用法如下:

netcat -l 12345 | cmd1 | cmd2 | ... | ./delayed_netcat.sh localhost 54321

netcat被延迟到第一行被读取。 如果你真的想在读完第一个字符后启动它,那么带有read和echo的部分需要重写。

使用netcat进行端口转发或端口映射 :

ncat -l -p 12345 -c 'ncat localhost 54321'

使用socat :

socat TCP4-LISTEN:12345 TCP4:localhost:54321

该命令在第一次连接完成后退出

我已经找到了我的问题的答案,但它是可怕的…所以仍然在寻找更好的东西。

netcat -l 12345 | gawk '(NR==1){print""}{print;fflush()}' | ./delayed_netcat.sh

其中./delayed_netcat.sh :

#!/bin/sh read line netcat localhost 12345

所以read line通过等待并消耗第一个输入read line延迟netcat localhost 12345 ,并且使用gawk '(NR==1){print""}{print;fflush()}'在前面插入一个空行第一笔记录…我相信有很大的改善空间!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐