iptables arp 비교 및 ​​실행

iptables arp 비교 및 ​​실행

예:

iptables

:인터넷 - [0:0] -A 인터넷 -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 Cbr0

ARP 목록에 mac이 없으면 iptable 규칙(-D internet -m mac --mac-source 48:5D:60:FC:29:B0 -j RETURN)을 삭제하고 싶습니다.

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

그런 것... (테스트 참고!)배열_차이()통화는 쉽습니다! 쉘 스크립트에서 내가 아는 그런 종류의 것은 없습니다.

결과 테이블을 파일로 다시 인쇄할 수도 있습니다.

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

그런 다음 이를 사용하여 쉘에서 삭제를 수행하십시오.

또한 PHP를 사용하여 처음 두 파일을 생성할 수 있습니다.팝픈().

관련 정보