dd-wrt і tcpdump

Якось знадобилося мені посніфити трафик на роутері з dd-wrt, на якому немає ані tcpdump ані USB для встановлення доп. пакетів.
Але не все так погано як здається на перший погляд.
Вставляємо цей скрипт у Administration–>Commands–>Startup script
В першій частині я замінюю дефолтний /etc/profile на свій, а в другій встановлюю libpcap та tcpdump у /tmp тобто у RAM


cat > /tmp/new_profile << 'EOF' #!/bin/sh export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tmp/usr/bin:/tmp/usr/sbin export LD_LIBRARY_PATH=/lib:/usr/lib:/opt/lib:/tmp/lib:/tmp/usr/lib export PS1='\u@\h:\w\$ ' reboot() { for f in /opt/etc/init.d/K* ; do [ -x "$f" ] && "$f" stop done echo "#!/bin/sh" > /tmp/.rc_shutdown
echo "$(nvram get rc_shutdown)" >> /tmp/.rc_shutdown
if [ -f /tmp/.rc_shutdown ]; then
chmod +x /tmp/.rc_shutdown
/tmp/.rc_shutdown
fi
/sbin/reboot
}
EOF
mount --bind /tmp/new_profile /etc/profile
sleep 20
repository=http://archive.openwrt.org/snapshots/trunk/ar71xx/generic/packages/base
mkdir /tmp/inst
for package in \
libpcap_1.7.4-1_ar71xx.ipk \
tcpdump-mini_4.9.2-1_ar71xx.ipk
do
cd /tmp/inst
wget $repository/$package
tar -zxvf $package
tar -zxvf control.tar.gz
cd ..
tar -zxvf /tmp/inst/data.tar.gz
done
rm -rf inst
chmod 777 /tmp

Увага: repository openwrt треба підбирати залежно від того яка модель роутера та яка версія dd-wrt

Тепер можна локально запустити tcpdump із записом результату в файл на іншому сервері по ssh

На сервері виконуємо:

tcpdump -A -s 0 'not port 22' -ibr0 -w - | ssh user@remotehost "cat - | gzip > /tmp/br0.pcap.gz"

Або запустити tcpdump на віддаленому роутері а вихлоп дивитися за допомогою wireshark

На своєму ПК виконуємо:


ssh root@dd-wrt LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/usr/lib /tmp/usr/sbin/tcpdump -A -s 0 'not port 22' -ibr0 -w - | sudo wireshark -k -i -