Вам потребуется комбинация libnetfilter_queue и правил iptables. libnetfilter_queue, через правило Iptable, выдаст вам все пакеты (в пользовательском пространстве), которые были поставлены в очередь фильтром пакетов ядра. Затем вы подождете, пока вы отправите вердикт по пакету.
После того, как вы установили netfilter_queue и написали прослушивающее пользовательское приложение, запустите правило iptable вроде
iptable -t mangle -A PREROUTING -i eth0 -j NFQUEUE --queue-num 0
Предостережение: это даст вам все пакеты, и ядро будет ждать, пока вы вынесете вердикт, или, если не запущено ни одно пользовательское приложение, просто отклоните его. Вы можете установить правило iptables на различных уровнях детализации. как src IP, протокол и т. д.
Как только вы определили, что определенный MAC-адрес должен быть заблокирован, запустите правило iptables, например (из вашего пользовательского приложения вы можете использовать system()
для запуска этого правила iptable)
iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
Пример программы на netfilter_queue здесь , чтобы вы начали. Надеюсь, это поможет.
Еще одно предупреждение: прочтите iptables или спросите об ошибке на сервере. Здесь задействовано несколько таблиц (input, output, mangle, prerouting, forward, nat и т. Д.), И я могу ошибаться, предлагая таблицу mangle для правила iptable.