tcpdump
ライブフィードでIPをソートして隔離したいです。
tcpdump -n -i tun0 "tcp[tcpflags] & (tcp-syn) != 0" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}
うまくいきますが、プログラムを追加しようとするとuniq
失敗します。
tcpdump -n -i tun0 "tcp[tcpflags] & (tcp-syn) != 0" | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" | uniq -u
何も返しません。
と同じですsort -u
。
この問題を解決する方法についてのアイデアはありますか?
答え1
理論的な問題があります。sort
すべての入力が処理されるまで何も印刷できません。uniq
重複した行だけが圧搾されているので(前に来る場合が多いsort
)、入力に同じ行が2回連続している場合にのみ、出力は入力とは異なります。入力が多少ランダムであれば、おそらく違いを感じないでしょう。
最善の方法は、入力を1行ずつ読み、それが表示されていることを確認する簡単なPerlプログラムです。それ以外の場合は、入力を印刷して、この入力のハッシュテーブルに追加します。
#!/usr/bin/perl
my %LINES ;
while (<STDIN>) {
if (! $LINES{$_}) {
$LINES{$_} = 1 ;
print $_ ;
}
}
もちろん、すでに見た行のリストも増え、プログラムが占めるメモリも増えます。
私はあなたがそれで何をするのかわかりませんが、現在の日付を印刷に追加し、後で入力を削除できるようにハッシュに追加すると思います。N時間。