python - 我如何围绕 ngrep 编写突出显示匹配项的包装器?

标签 python perl unix networking

我刚刚了解到 ngrep ,一个很棒的程序,可让您轻松嗅探与特定字符串匹配的数据包。

唯一的问题是很难在大块输出中看到匹配项。我想编写一个包装器脚本来突出显示这些匹配项——它可以使用 ANSI 转义序列:

echo -e 'This is \e[31mRED\e[0m.'

我最熟悉 Perl,但我对 Python 或任何其他语言的解决方案非常满意。最简单的方法是这样的:

while (<STDIN>) {
   s/$keyword/\e[31m$keyword\e[0m/g;
   print;
}

但是,这不是一个好的解决方案,因为 ngrep 会在收到不匹配的数据包时打印出不带换行符的散列标记,并且上面的代码将禁止打印这些散列标记,直到脚本看到换行符。

有没有办法在不抑制哈希标记立即出现的情况下进行突出显示?

最佳答案

这似乎可以解决问题,至少比较了两个窗口,一个运行直接的 ngrep(例如 ngrep whatever),另一个通过管道传输到以下程序(使用 ngrep whatever | ngrephl target-string)。

#! /usr/bin/perl

use strict;
use warnings;

$| = 1; # autoflush on

my $keyword = shift or die "No pattern specified\n";
my $cache   = '';

while (read STDIN, my $ch, 1) {
    if ($ch eq '#') {
        $cache =~ s/($keyword)/\e[31m$1\e[0m/g;
        syswrite STDOUT, "$cache$ch";
        $cache = '';
    }
    else {
        $cache .= $ch;
    }
}

关于python - 我如何围绕 ngrep 编写突出显示匹配项的包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/214059/

相关文章:

python - 从numpy python中的稀疏矩阵生成密集矩阵

python - numpy.dot 给出大整数的错误答案

regex - 在 bash 中 Grepping 一个 20g 的文件

regex - 这个数组的正则表达式是什么

perl - 如何使 ExtUtils::Manifest 包含空目录?

Unix 删除指定目录下的所有文件夹

linux - Windows 开发人员如何最轻松地让他的软件在 Wine 下运行良好

python - 打印在 python 列表中找到的字符的两次出现

python - 如何在Python中组合数值列数据?

perl - 从另一个 Moose 对象实例化 Moose 对象的正确方法?