带连续管道的grep不起作用

Zheng Kai :

(也许是“ tcpflow”问题)

我编写了一个脚本来监视http流量,然后安装tcpflow,然后是grep

可以正常工作(例如,您应该发出http请求curl www.163.com

sudo tcpflow -p -c -i eth0 port 80 2>/dev/null | grep '^Host: '

它这样输出(连续)

Host: config.getsync.com
Host: i.stack.imgur.com
Host: www.gravatar.com
Host: www.gravatar.com

但我不能继续使用管道

不起作用(无输出)

sudo tcpflow -p -c -i eth0 port 80 2>/dev/null | grep '^Host: ' | cut -b 7- 

不起作用(无输出)

sudo tcpflow -p -c -i eth0 port 80 2>/dev/null | grep '^Host: ' | grep H

当我更换sudo tcpflow使用cat foo.txt,它的工作原理:

cat foo.txt | grep '^Host: ' | grep H

那么pipe或grep或tcpflow怎么了?


更新:

这是我的最终脚本:https : //github.com/zhengkai/config/blob/master/script/monitor_outgoing_http.sh

伊尼安语:

我认为问题是由于stdio buffering,您需要GNU stdbuf在致电之前使用grep

sudo tcpflow -p -c -i eth0 port 80 2>/dev/null | stdbuf -o0 grep '^Host: '

使用-o0,基本上意味着来自的输出(stdout)流tcpflow将没有缓冲。默认行为是在发送到管道中的下一个命令之前,自动将数据缓冲到4096个1字节的块中,这是使用覆盖的stdbuf


1.将此主题详细介绍给主题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章