#! /usr/bin/env perl
#16:44:00.094758 1.0 Mb/s 2427 MHz 11b -53dBm signal antenna 1 Probe Request (M-PM-0M-PM-1M-PM-2M-PM-3M-PM-4M-PM-5M-QM-^QM-PM-6M-PM-7M-PM-8M-PM-9M-PM-:) [1.0 2.0 5.5 11.0 Mbit]
# 0x0000: 0018 d0b0 d0b1 d0b2 d0b3 d0b4 d0b5 d191
# 0x0010: d0b6 d0b7 d0b8 d0b9 d0ba 0104 0204 0b16
# 0x0020: 3208 0c12 1824 3048 606c 0301 072d 1a2c
# 0x0030: 0103 ff00 0000 0000 0000 0000 0000 0000
# 0x0040: 0000 0000 0000 0000 00dd 0700 50f2 0800
# 0x0050: 5400
use strict;
sub capture {
my $iface = shift;
my % hashes;
while ( 1 ) {
if ( open my $fd, "tcpdump -s0 -lnxi $iface subtype probe-req |" ) {
my @bytes;
while ( < $fd> ) {
if ( /^ \s* ( 0x\w+ ) : \s+ ( .+ ) / ) {
push @bytes, hex( $_) for $2 = ~ / \w{ 2 } / g;
}
elsif ( @bytes) {
shift @bytes;
my $essid_length = shift @bytes;
my $essid = join '' , map chr, @bytes[ 0 .. $essid_length - 1 ] ;
unless ( $hashes{ $essid} ) {
$hashes{ $essid} = 1 ;
print "$essid\n " if $essid_length;
}
@bytes = ( ) ;
}
}
close $fd;
}
sleep 2 ;
#print "try to recover tcpdump\n";
}
}
$| = 1 ;
my $iface = @ARGV ? $ARGV[ 0 ] : 'wlan0' ;
capture( $iface) ;
IyEgL3Vzci9iaW4vZW52IHBlcmwKIzE2OjQ0OjAwLjA5NDc1OCAxLjAgTWIvcyAyNDI3IE1IeiAxMWIgLTUzZEJtIHNpZ25hbCBhbnRlbm5hIDEgUHJvYmUgUmVxdWVzdCAoTS1QTS0wTS1QTS0xTS1QTS0yTS1QTS0zTS1QTS00TS1QTS01TS1RTS1eUU0tUE0tNk0tUE0tN00tUE0tOE0tUE0tOU0tUE0tOikgWzEuMCAyLjAgNS41IDExLjAgTWJpdF0KIwkweDAwMDA6ICAwMDE4IGQwYjAgZDBiMSBkMGIyIGQwYjMgZDBiNCBkMGI1IGQxOTEKIwkweDAwMTA6ICBkMGI2IGQwYjcgZDBiOCBkMGI5IGQwYmEgMDEwNCAwMjA0IDBiMTYKIwkweDAwMjA6ICAzMjA4IDBjMTIgMTgyNCAzMDQ4IDYwNmMgMDMwMSAwNzJkIDFhMmMKIwkweDAwMzA6ICAwMTAzIGZmMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAKIwkweDAwNDA6ICAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwZGQgMDcwMCA1MGYyIDA4MDAKIwkweDAwNTA6ICA1NDAwCgp1c2Ugc3RyaWN0OwoKc3ViIGNhcHR1cmUgewogICAgbXkgJGlmYWNlID0gc2hpZnQ7CiAgICBteSAlaGFzaGVzOwoJd2hpbGUgKDEpIHsKCQlpZiAob3BlbiBteSAkZmQsICJ0Y3BkdW1wIC1zMCAtbG54aSAkaWZhY2Ugc3VidHlwZSBwcm9iZS1yZXEgfCIpIHsKCQkJbXkgQGJ5dGVzOwoJCQl3aGlsZSAoPCRmZD4pIHsKCQkJCWlmICgvXlxzKigweFx3Kyk6XHMrKC4rKS8pIHsKCQkJCQlwdXNoIEBieXRlcywgaGV4KCRfKSBmb3IgJDIgPX4gL1x3ezJ9L2c7CgkJCQl9CgkJCQllbHNpZiAoQGJ5dGVzKSB7CgkJCQkJc2hpZnQgQGJ5dGVzOwoJCQkJICAgIG15ICRlc3NpZF9sZW5ndGggPSBzaGlmdCBAYnl0ZXM7CgkJCQkJbXkgJGVzc2lkID0gam9pbiAnJywgbWFwIGNociwgQGJ5dGVzWzAgLi4gJGVzc2lkX2xlbmd0aCAtIDFdOwoJCQkJICAgIHVubGVzcyAoJGhhc2hlc3skZXNzaWR9KSB7CgkJCQkJICAgICRoYXNoZXN7JGVzc2lkfSA9IDE7CgkJCQkJCXByaW50ICIkZXNzaWRcbiIgaWYgJGVzc2lkX2xlbmd0aDsKCQkJCQl9CgkJCQkJQGJ5dGVzID0gKCk7CgkJCQl9CgkJCX0KCQkJY2xvc2UgJGZkOwoJCX0KCQlzbGVlcCAyOwoJCSNwcmludCAidHJ5IHRvIHJlY292ZXIgdGNwZHVtcFxuIjsKCX0KfQoKJHwgPSAxOwpteSAkaWZhY2UgPSBAQVJHViA/ICRBUkdWWzBdIDogJ3dsYW4wJzsKY2FwdHVyZSgkaWZhY2UpOwo=