iptables arp の比較と実行

iptables arp の比較と実行

例:

iptables

:インターネット - [0:0] -A インターネット -m mac --mac-source 48:5D:60:FC:29:B0 -j 戻る

専念

[root@localhost:~] $ arp

アドレス HWtype HWaddress フラグ マスク Iface

10.2.0.1 エーテル 48:5D:60:FC:29:B0 C br0

ARP リストに MAC が存在しない場合は、iptable ルール (-D internet -m mac --mac-source 48:5D:60:FC:29:B0 -j RETURN) を削除したいと思います。

答え1

そのスクリプトをどの言語で書きたいですか? どれでもかまいません。シェル スクリプトでは、控えめに言っても面倒です...

あるいは、arp + grep と iptables -L の結果を 2 つの異なるファイルに保存し、その 2 つのファイルを配列に読み込むこともできます。そうすれば、配列の 1 つを調べて、もう 1 つに存在しない場合は削除するだけで、非常に簡単になります。

arp |grep br0 | perl -nle '/her   ([^ ]+)/ && print $1' >file1.txt
iptables -t mangle -L -v -n |grep MAC | perl -nle '/MAC ([^ ]+)/ && print $1' >file2.txt
php do-delete.php

そして、do-delete.php はファイルを読み込み、system() 呼び出しを実行してエントリを削除することができます。

<?php
$f1 = file("file1.txt");
$f2 = file("file2.txt");
$to_delete = array_diff($f2, $f1);
foreach($to_delete as $mac)
{
  system('iptables -t mangle -D internet -m mac --mac-source ' . $mac . ' -j RETURN');
}

こんな感じです...(注:テスト済み!)配列差分()呼び出しは簡単です! シェル スクリプトでは、このようなことは起こりません。

結果の表をファイルに出力することもできます。

file_put_contents('file3.txt', join($to_delete, "\n") . "\n");

次に、それを使用してシェルから削除を実行します...

また、PHPを使用して最初の2つのファイルを生成することもできます。開く()

関連情報