我刚刚了解到 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/