1

私はbashが初めてで、それを理解しようとしています。

私は次のものを持っています:

Sep 18 21:05:40 host kernel: Firewall: *Port Flood* IN=venet0 OUT= MAC= SRC=118.223.69.254 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=9398 PROTO=TCP SPT=9876 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0

SRC IP を引き出して csf -d {IP HERE} にパイプするにはどうすればよいですか

私は次のようなものを使用します

sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\).*$/\1/' /var/log/messages右?

編集:

はすべての名前なので、SPT=それを引っ張ってIPを取得する方法はありますか?

4

2 に答える 2

2

次のようなものが機能するはずです。

sed -n 's/.*SRC=\([.0-9]*\).*/\1/p' /var/log/messages | xargs csf -d

xargs標準入力からコマンドに引数を追加します。.*私の正規表現は、IP アドレスの前後の行全体と一致することに注意してください。そのため、置換を行うと、IP だけが残ります。

オプションを使用して sed 置換の末尾に-n追加すると、正規表現に一致した行のみが出力されます。p

于 2012-09-18T17:22:25.110 に答える
0

やあ、

grep(GNU grep)2.10では、フラグを使用してP、perl互換の正規表現をi作成したり、casseに依存しないテストを実行oしたり、結果を表示するだけのフラグを使用したりできます。

以下では、有効なIPのパターンを設定してから、ファイルをgrepします。

ippattern="\b(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}\b([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\b"
grep -Pio "(?<=src=)$ippattern" /var/log/messages

grep whit perl互換-Pフラグでは、(?<=XXXX)は後方参照であり、正規表現によってキャプチャされません。パターンの前にXXXXを付けたいと言っただけです。もちろん、キャプチャするパターンの前にそれを書く必要があります。

ippatternは有効なIPアドレスです。すべてのケースがキャプチャされます。

このwhillが助けてくれることを願っています

于 2012-09-18T20:56:42.653 に答える