iptables arp比较和执行

例:

iptables

:internet – [0:0] -A internet -m mac –mac-source 48:5D:60:FC:29:B0 -j RETURN

承诺

[root @ localhost:〜] $ arp

地址HWtype HWaddress标志掩码Iface

10.2.0.1醚48:5D:60:FC:29:B 0 C br0

如果ARP列表中的MAC不存在,我想删除iptable规则(-D internet -m mac –mac-source 48:5D:60:FC:29:B0 -j RETURN)。

你喜欢哪种语言? 任何? 因为用一个shell脚本,至less可以说…

否则,您可以将arp + grep和iptables -L的结果保存在两个不同的文件中,然后将这两个文件加载到一个数组中。 然后它变得非常容易,你通过一个数组,如果存在/不存在于另一个,然后删除。

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'); } 

像这样的东西…(注意testing!)注意array_diff()的调用很简单! 我在shell脚本中知道的那种东西。

您也可以将结果表格打印回一个文件中。

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

然后用它来从shell中删除…

你也可以使用PHP来使用popen()生成前两个文件。