2011-01-27 20 views
0

は私がip_arrayに対するiptablesの出力を実行し、結果を取得したいIPリストの配列awkの配列出力

ip_array=['192.168.1.100' '192.168.1.101' '192.168.1.102' '192.168.1.103' '192.168.1.104' '192.168.1.105' '192.168.1.106' '192.168.1.107' '192.168.1.108' '192.168.1.109' '192.168.1.110'] 

を持っています。私はawkの

iptables -L RRDIPT -vnx -t filter |awk '!/destination/{a[$9]+=$2}END{for(item in a){total+=a[item];dl[item]=a[item];printf item"-"a[item]}}' 

が、IPアドレスからを使用してバイトの情報を得ることができることを学んだ私の前のポストから 例えば

pkts  bytes target  prot opt in  out  source    destination 
    83276 4337105 RETURN  0 -- *  *  192.168.1.106  0.0.0.0/0 
    166008 230477883 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.106 
     0  0 RETURN  0 -- *  *  192.168.1.107  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.107 
     0  0 RETURN  0 -- *  *  192.168.1.103  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.103 
     99  9144 RETURN  0 -- *  *  192.168.1.102  0.0.0.0/0 
     79 11590 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.102 
     0  0 RETURN  0 -- *  *  192.168.1.101  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.101 
    994874 51992106 RETURN  0 -- *  *  192.168.1.100  0.0.0.0/0 
2398169 3594009427 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.100 
     0  0 RETURN  0 -- *  *  192.168.1.106  0.0.0.0/0 
     0  0 RETURN  0 -- *  *  0.0.0.0/0   192.168.1.106 

は私が私の出力が同じ形式であることを望む変化し続けます..

私は以下の出力

を見たい
i.e bytesof 192.168.1.100, bytesof 192.168.1.102, bytesof 192.168.1.103, bytesof 192.168.1.104.......bytesof 192.168.1.110 

0は、私は、グローバル配列としてdl宣言アレイ

iptables -L RRDIPT -vnx -t filter |awk '!/destination/{a[$9]+=$2}END{for(item in a){if(item==ip_array[i]){dl[i]=a[item];printf dl[i];}else{dl[i]=0}i+=i;}}' 

を使用してみましたが、私は、さらなる処理のために例えばdl[0]値にアクセスするように見えることはできません。

誰でも手助けできますか?

+0

:P – Shoban

+0

私はおびえすぎて、質問 – Javanator

+0

私は十分に勇敢だが形式にしています;) - しかし、今、他の誰かがそれに答える;) – ocodo

答えて

1

これを試してみてください:

iptables ... | awk 'BEGIN { base="192.168.1"; startrange=100; endrange=110 } NR > 1 { a[$9] += $2} END {for (i=startrange; i<=endrange; i++) {ip = base "." i; if (! a[ip]) a[ip] = 0; print ip, a[ip]}}' 

変更startrangeendrange値があなたに合うように。

出力例:私は質問をフォーマット怖い

192.168.1.100 9196 
192.168.1.101 0 
192.168.1.102 0 
192.168.1.103 0 
192.168.1.104 21009126 
192.168.1.105 0 
192.168.1.106 0 
192.168.1.107 10333 
192.168.1.108 0 
192.168.1.109 0 
192.168.1.110 120 
+0

よく働く。本当にあなたの助けに感謝します... – Linus

+0

@user:私はそれが役立ってうれしいです。あなたの質問に対する回答を受け入れたものとしてマークすることを忘れないでください(受け入れ可能な場合)。 –