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

Я хотел бы удалить правило iptable (-D internet -m mac --mac-source 48:5D:60:FC:29:B0 -j RETURN), если mac отсутствует в списке ARP.

решение1

На каком языке вы хотели бы, чтобы был этот скрипт? На любом? Потому что с помощью скрипта оболочки это, мягко говоря, утомительно...

В противном случае вы могли бы сохранить результат 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');
}

Что-то вроде этого... (ЗАМЕТЬТЕ, ПРОВЕРЕНО!) Обратите внимание, какarray_diff()call это просто! Ничего подобного я не знаю в скрипте оболочки.

Вы также можете распечатать полученную таблицу обратно в файл.

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

Затем используйте это, чтобы удалить из оболочки...

Также вы можете использовать PHP для генерации первых двух файлов, используяpopen().

Связанный контент