iptables arp 比较并执行

iptables arp 比较并执行

例子:

iptables

:互联网-[0:0] -A internet -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

您希望该脚本使用哪种语言编写?任何语言都可以?因为使用 shell 脚本编写至少可以说很繁琐...

否则,您可以将 arp + grep 和 iptables -L 的结果保存在 2 个不同的文件中,然后将这两个文件加载到一个数组中。然后事情就变得非常简单了,您浏览其中一个数组,如果它在另一个数组中存在/不存在,则删除。

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

类似这样的...(注意测试!)注意数组差异()调用很简单!据我所知,在 shell 脚本中根本不存在这种事情。

您还可以将结果表打印到文件中。

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

然后使用它从 shell 中执行删除操作......

您也可以使用 PHP 生成前两个文件弹出()

相关内容