iptables arp 比較並執行

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: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 的結果保存在兩個不同的檔案中,然後將這兩個檔案載入到陣列中。然後它變得非常簡單,你遍歷一個數組,如果它存在/不存在於另一個數組中,則刪除。

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

類似的東西......(注意測試!)注意如何array_diff()打電話很方便!據我所知,shell 腳本中沒有任何此類內容。

您也可以將結果表列印回文件中。

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

然後用它從外殼中刪除......

您也可以使用 PHP 來產生前兩個文件波本()

相關內容