#! /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;
open my $fd, "tcpdump -lnxi $iface subtype probe-req |" or die $!;
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;
next unless $essid_length;
my $essid = join '' , map chr, @bytes[ 0 .. $essid_length - 1 ] ;
unless ( $hashes{ $essid} ) {
$hashes{ $essid} = 1 ;
print "$essid\n " ;
}
@bytes = ( ) ;
}
}
close $fd;
}
$| = 1 ;
my $iface = @ARGV ? $ARGV[ 0 ] : 'wlan0' ;
capture( $iface) ;
IyEgL3Vzci9iaW4vZW52IHBlcmwKIzE2OjQ0OjAwLjA5NDc1OCAxLjAgTWIvcyAyNDI3IE1IeiAxMWIgLTUzZEJtIHNpZ25hbCBhbnRlbm5hIDEgUHJvYmUgUmVxdWVzdCAoTS1QTS0wTS1QTS0xTS1QTS0yTS1QTS0zTS1QTS00TS1QTS01TS1RTS1eUU0tUE0tNk0tUE0tN00tUE0tOE0tUE0tOU0tUE0tOikgWzEuMCAyLjAgNS41IDExLjAgTWJpdF0KIwkweDAwMDA6ICAwMDE4IGQwYjAgZDBiMSBkMGIyIGQwYjMgZDBiNCBkMGI1IGQxOTEKIwkweDAwMTA6ICBkMGI2IGQwYjcgZDBiOCBkMGI5IGQwYmEgMDEwNCAwMjA0IDBiMTYKIwkweDAwMjA6ICAzMjA4IDBjMTIgMTgyNCAzMDQ4IDYwNmMgMDMwMSAwNzJkIDFhMmMKIwkweDAwMzA6ICAwMTAzIGZmMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAKIwkweDAwNDA6ICAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwZGQgMDcwMCA1MGYyIDA4MDAKIwkweDAwNTA6ICA1NDAwCgojdXNlIHN0cmljdDsKCnN1YiBjYXB0dXJlIHsKICAgIG15ICRpZmFjZSA9IHNoaWZ0OwogICAgbXkgJWhhc2hlczsKICAgIG9wZW4gbXkgJGZkLCAidGNwZHVtcCAtbG54aSAkaWZhY2Ugc3VidHlwZSBwcm9iZS1yZXEgfCIgb3IgZGllICQhOwogICAgbXkgQGJ5dGVzOwogICAgd2hpbGUgKDwkZmQ+KSB7CiAgICAgICAgaWYgKC9eXHMqKDB4XHcrKTpccysoLispLykgewogICAgICAgICAgICBwdXNoIEBieXRlcywgaGV4KCRfKSBmb3IgJDIgPX4gL1x3ezJ9L2c7CiAgICAgICAgfQogICAgICAgIGVsc2lmIChAYnl0ZXMpIHsKICAgICAgICAgICAgc2hpZnQgQGJ5dGVzOwogICAgICAgICAgICBteSAkZXNzaWRfbGVuZ3RoID0gc2hpZnQgQGJ5dGVzOwoJCQluZXh0IHVubGVzcyAkZXNzaWRfbGVuZ3RoOwogICAgICAgICAgICBteSAkZXNzaWQgPSBqb2luICcnLCBtYXAgY2hyLCBAYnl0ZXNbMCAuLiAkZXNzaWRfbGVuZ3RoIC0gMV07CiAgICAgICAgICAgIHVubGVzcyAoJGhhc2hlc3skZXNzaWR9KSB7CiAgICAgICAgICAgICAgICAkaGFzaGVzeyRlc3NpZH0gPSAxOwogICAgICAgICAgICAgICAgcHJpbnQgIiRlc3NpZFxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBAYnl0ZXMgPSAoKTsKICAgICAgICB9CiAgICB9CiAgICBjbG9zZSAkZmQ7CiAgICAKfQoKJHwgPSAxOwpteSAkaWZhY2UgPSBAQVJHViA/ICRBUkdWWzBdIDogJ3dsYW4wJzsKY2FwdHVyZSgkaWZhY2UpOwoK