![如何将一个终端的输出转发到另一台可以使用 grep 的服务器?](https://linux22.com/image/174867/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%80%E4%B8%AA%E7%BB%88%E7%AB%AF%E7%9A%84%E8%BE%93%E5%87%BA%E8%BD%AC%E5%8F%91%E5%88%B0%E5%8F%A6%E4%B8%80%E5%8F%B0%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20grep%20%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我需要在某个交换机上运行 tcpdump 并将其通过带有高级正则表达式的 grep 传递。那个 switch shell 非常愚蠢,没有带 regexp 的 grep,但有一个 tcpdump 包含我需要的选项。
有没有办法在交换机终端上运行 tcpdump 并将整个输出传递到另一台 Linux 机器,例如传递到该机器上的文件,这样我就可以在线 grep 该文件并查看实时会话中发生了什么?
答案1
如果您可以通过 SSH 访问您的交换机,您只需执行以下操作
ssh switch 'tcpdump <args>' | grep <fancy pattern>
请注意,与 @DopeGhoti 提出的 netcat 解决方案相比,这可能会稍微慢一些(取决于交换机的 CPU),但您的数据是加密传输的。根据您所处的工作环境以及您捕获的数据的敏感性,这可能会或可能不会产生影响。
答案2
为什么不让交换机做交换机所做的事情(移动数据包)并使用 netcat 将文本从一台主机传输到另一台主机?
假设您想在 TCP 端口 12345 上发送。在侦听器主机(remotehost.example.com
例如“”)上:
$ nc -l 12345 | grep 'pattern'
在发送方主机上:
$ /path/to/somejob | nc remotehost.example.com 12345