Занёс Bad Apple в зал славы «просто потому, что могу», на этот раз — в вывод traceroute. Автор развил идею из своего же поста о подмене hop’ов: если заставить ядро генерировать на лету разные IPv6-адреса для каждого ICMPv6-пакета, то traceroute превращается в покадровый дисплей.
В основе трюка — nftables и его функция numgen. В цепочке postrouting перехватывается ответный ICMPv6-пакет с кодом admin-prohibited, и с помощью numgen inc mod 3 счётчик циклически подставляет один из трёх адресов: fd00::2, fd00::3 или fd00::4. С каждым новым пакетом адрес меняется, заставляя traceroute и mtr показывать анимацию. Чтобы анимация не захлебнулась, пришлось снять ограничение ядра на частоту ICMPv6-ответов через sysctl net.ipv6.icmp.ratelimit=0 — иначе шоу закончилось бы на первом кадре.
Вторая проблема — поведение mtr. По умолчанию он показывает несколько адресов на одном hop’е, что разрушает «пиксельную» картинку. Пришлось влепить однострочный патч в исходники mtr (в файле ui/net.c), обнуляя счётчик найденных адресов, чтобы выводился только один. Грязно, зато работает.
Само видео подготовили через ffmpeg: даунскейлили до 30×11 пикселей, урезали до восьми кадров в секунду и нарезали на PNG. Python-скрипт превратил пачки кадров в монструозный набор правил для nftables — чуть больше мегабайта чистого конфига.
Автор иронизирует: Bad Apple в своём чёрно-белом стиле стал чем-то вроде Doom для взломанных платформ. Раз видео можно сносно показать даже на однобитных «дисплеях» (вкл/выкл), его пихают куда попало — от HD47780-совместимых символьных LCD до компиляций на YouTube и тематического сабреддита. А раз так, удержаться было просто невозможно.