#!/bin/sh for F in $* do echo echo '###################' $F '###################' # Asking the unit for info_data.js gives a line that looks like # DATA="blahblah" # Where blahl curl -s -u admin:admin http://${F}/info_data.js | perl -e ' sub charToSixBits { return index(".ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_", $_[0]); } # Get the DATA="blah" line read(STDIN,$X,1000); $X=substr $X,6,-1; # Leave the actual data # Convert string $X (base64) to $S (binary) $S=""; while ($X) { $cc = (charToSixBits(substr($X,0,1)) << 18) + (charToSixBits(substr($X,1,1)) << 12) + (charToSixBits(substr($X,2,1)) << 6) + (charToSixBits(substr($X,3,1))); $S = $S . chr(($cc >> 16) & 255) . chr(($cc >> 8) & 255) . chr($cc & 255); $X=substr($X,4); } # Fields are: # 2 junk # 32 device name # 6 MAC # 4 IP # 4 Subnet # 4 Gateway # 2 LanTX packet count # 2 LanRX packet count # 2 WLanTX packet count # 2 WLanRX packet count # 32 SSID # 1 ntype (adhoc, infr) # 1 channel # 1 WEP # 6 Client MAC # 1 TX rate # 1 Quality # 6 BSSID ($devname, $firmware, $MAC, $IP, $Subnet, $Gateway, $LANTx, $LANRx, $WLANTx, $WLANRx, $SSID, $ntype, $channel, $WEP, $firstClient, $txrate, $quality, $BSSID) = unpack("x2 A32 a3 H12 N N N n n n n A32 c1 c1 c1 H12 c1 c1 H12", $S); printf("%12s: %s\n", "devname", $devname); printf("%12s: %d.%d.%d\n", "firmware", ord(substr($firmware,0,1)), ord(substr($firmware,1,1)), ord(substr($firmware,2,1))); printf("%12s: %s\n", "MAC", $MAC); printf("%12s: %d.%d.%d.%d\n", "IP", 255 & ($IP >> 24), 255 & ($IP >> 16), 255 & ($IP >> 8), 255 & $IP); printf("%12s: %d.%d.%d.%d\n", "Subnet", 255 & ($Subnet >> 24), 255 & ($Subnet >> 16), 255 & ($Subnet >> 8), 255 & $Subnet); printf("%12s: %d.%d.%d.%d\n", "Gateway", 255 & ($Gateway >> 24), 255 & ($Gateway >> 16), 255 & ($Gateway >> 8), 255 & $Gateway); printf("%12s: %d\n", "LANTx", $LANTx); printf("%12s: %d\n", "LANRx", $LANRx); printf("%12s: %d\n", "WLANTx", $WLANTx); printf("%12s: %d\n", "WLANRx", $WLANRx); printf("%12s: %s\n", "ntype", $ntype ? "infr" : "adhoc"); printf("%12s: %s\n", "SSID", $SSID); printf("%12s: %s\n", "channel", $channel); printf("%12s: %s\n", "WEP", $WEP ? "enable" : "disable"); printf("%12s: %d (%s Mbit/s)\n", "txrate", $txrate, ($txrate <= 1) ? "1" : ($txrate <= 3) ? "2" : ($txrate <= 7) ? "5.5" : "11"); printf("%12s: %d\n", "quality", int(0.5 + ((100 * $quality) / 92))); printf("%12s: %s\n", "BSSID", $BSSID); ' done