
예:
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를 사용하여 처음 두 파일을 생성할 수 있습니다.팝픈().