Při hackování Nokie N900 mne docela štvalo pořád ručně nastavovat (a nebo spuštět skript), při připojení USB kabelu, IP adresu na počítači. Na několik sekund jsem se zamyslel, jak by se to dalo zautomatizovat.
Řešení je velmi jednoduché. V dnešních moderních distribucích se používá udev, namísto zastaralého DevFS, který má mimo jiné na starosti obsluhu zařízení, připojovaných skrze USB.
Po připojení zařízení do počítače jádro vygeneruje event, který na základě pravidel udev zpracuje a provede patřičné kroky, dle nadefinovaných pravidel.Po odpojení se automaticky odstraní veše, co bylo provedeno po připojení. A právě této vlastnosti lze s výhodou využít k automatické konfiguraci síťového spojení. Pravidla jsou obvykle uložena v /etc/udev-rules.d/.
Nejprve je tedy nutné vytovořit nový soubor, ve kterém budou definována pravidla, podle kterých se má udev chovat.
/etc/udev/rules.d/99-nokia-n900.rules
SUBSYSTEM=="net", ACTION=="add", ENV{ID_USB_DRIVER}=="cdc_ether", ENV{ID_MODEL}="N900__PC-Suite_Mode", ENV{ID_VENDOR}=="Nokia", NAME="n900", RUN+="/usr/local/sbin/n900_net.sh"
SUBSYSTEM=="net", ACTION=="add", ENV{ID_USB_DRIVER}=="cdc_phonet", ENV{ID_MODEL}="N900__PC-Suite_Mode", ENV{ID_VENDOR}=="Nokia", NAME="n900pn"
Následně vytvoříme jednoduchý skript, který bude spuštěn tímto pravidlem po připojení telefonu.
/usr/local/sbin/nokia-n900-network.sh
#!/bin/bash
if [ "${ACTION}" = "add" ]; then
/sbin/ifconfig n900 192.168.2.14
fi
Nyní je vhodné udev informovat o tom, že má znovu načíst pravidla, abychom nemuseli počítač restartovat.
udevadm control --reload-rules
Nyní již můžeme N900 propojit kabelem s počítačem a ověřit, že se vše zadařilo. Ve výpisu dmesg by mělo být vidět, že telefon byl detekován, byla vytvořená patřičná zařízení usb0 a usbpn0, která byla následně přejmenována na n900 a n900pn.
usb 1-8.3: new high speed USB device using ehci_hcd and address 11
usb 1-8.3: configuration #1 chosen from 2 choices
cdc_acm 1-8.3:1.6: This device cannot do calls on its own. It is not a modem.
cdc_acm 1-8.3:1.6: ttyACM0: USB ACM device
usb0: register 'cdc_ether' at usb-0000:00:02.1-8.3, CDC Ethernet Device, e2:ef:f5:80:40:1f
udev: renamed network interface usbpn0 to n900pn
udev: renamed network interface usb0 to n900
Zkusíme pingnoput N900:
hemax@themax ~ $ ping 192.168.2.15 -c5
PING 192.168.2.15 (192.168.2.15) 56(84) bytes of data.
64 bytes from 192.168.2.15: icmp_seq=1 ttl=64 time=2.29 ms
64 bytes from 192.168.2.15: icmp_seq=2 ttl=64 time=0.494 ms
64 bytes from 192.168.2.15: icmp_seq=3 ttl=64 time=0.468 ms
64 bytes from 192.168.2.15: icmp_seq=4 ttl=64 time=0.315 ms
64 bytes from 192.168.2.15: icmp_seq=5 ttl=64 time=1.28 ms
--- 192.168.2.15 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.315/0.972/2.297/0.745 ms
themax@themax ~ $
Pokud máme nainstalované SSH telefonu, můžeme se zkusit připojit.
themax@themax ~ $ ssh root@192.168.2.15
root@192.168.2.15's password:
BusyBox v1.10.2 (Debian 3:1.10.2.legal-1osso26+0m5) built-in shell (ash)
Enter 'help' for a list of built-in commands.
Nokia-N900-02-8:~#
Hotovo:-)
Poznámky:
root přístup jsem získal instalací balíčku rootsh
Nekamenujte mne za ten ifconfig, ale bohužel, né vŠechny distribuce mají by default nainstalován i balík iproute2.