20Feb/111
iwlist scan perl wrapper
The output of /sbin/iwlist scan is too much for me in most of the cases: I just want to know which WiFis are present, quality and open/passneeded state.
So here is a small perl script for it, the ESSIDs printed in descending order of quality which changed from 1-70 to 1-100.
#!/usr/bin/perl use warnings; use strict; open(LIST, "/sbin/iwlist scan 2>&1 |") or die "Failed: $!\n"; my %wifis; my $essid; while () { if (/ESSID\:\"(.*)\"/) { $essid = $1; } elsif (/Quality=(\d*)\/70/) { $wifis{$essid}->{"quality"} = $1; } elsif (/Encryption key\:(\S*)/) { $wifis{$essid}->{"key"} = $1; } } sub by_quality { $wifis{$b}->{"quality"} <=> $wifis{$a}->{"quality"}; } print "\n"; foreach $essid ( sort by_quality keys %wifis) { printf '%*s %*s %-d', 30, $essid, 6, $wifis{$essid}->{"key"}=~/on/? "Pass" : "Open" , int($wifis{$essid}->{"quality"}) / 70.0 * 100; print "\n"; } print "\n";
A sample output I got at my flat:
cs0rbagomba@ramen ~ $ wifi_list
gara_dlink Pass 71
TP-Link01 Open 54
zaa Pass 50
DBnet Pass 50
anzo Pass 47
3Com Pass 22
TP-LINK_9D27F4 Pass 21
TP-LINK_TOMEC Pass 21
TNT Pass 17
TimeCapsule Pass 15
hpsetup Open 14
Pannon Cargo Pass 12
Airlive Pass 10
TP-LINK_DA3008 Open 10
Open 8
Szeretetre melto internet Pass 8
KZSNET Pass 8
CEO_iroda Pass 8
Vani2 Pass 5
GIGABYTE Open 4
csikos Pass 2
TP-LINK_E6395C Pass 2
Dante_88 Pass 2
RG60SE Open 2
default Open 2
WIFI99 Pass 1
Zsoka Pass 1
IKO Pass 1
cs0rbagomba@ramen ~ $
PS: TP-Link01 Open - sharing is caring 🙂 default settings rulz
February 27th, 2013 - 22:56
why after compiling the code, it displays me “Use of uninitialized value $essid in hash element at (my directory).pl line 11, line 9.
Use of uninitialized value $essid in hash element at (my directory).pl line 12, line 10.
Pass 100” ?