無線LAN機器のMacアドレスから位置情報を割り出す

Libro + avión
今回は、無線LAN機器のMacアドレスから位置情報を割り出す方法を紹介します。

photo credit: chavezonico via photopin cc



Mac Address


Macアドレスを調べる方法は、以下のようになります。 Aircrack-ngを使えば、もっと高度なスキャンができると思いますが、最低限必要な情報は、Macアドレスなので簡易なやり方のほうがいいです。

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s



google/loc/json



sudo port install perl5 p5-json

sudo perl -MCPAN -e 'install Bundle::LWP'



#!/opt/local/bin/perl
# http://unknownplace.org/memo/2012/07/21/1/

use strict;
use warnings;
use utf8;
use 5.012;

use JSON;
use LWP::UserAgent;

my @addresses = do {
my @lines = split /\n/, qx{/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s};
shift @lines;

my @r;
push @r, (split /\s+/, $_)[2] for @lines;

@r;
};

my $query = encode_json({
version => '1.1.0',
host => 'maps.google.com',
request_address => JSON::true,
address_language => 'ja_JP',
wifi_towers => [
map +{
mac_address => $_,
signal_strength => 8,
age => 0,
}, @addresses,
],
});

my $ua = LWP::UserAgent->new;
my $res = $ua->post('http://www.google.com/loc/json', Content => $query);
$res->is_success or die $res->status_line;

use YAML;
warn Dump decode_json($res->content);



そして、先ほど調べたMacアドレスを2つほど指定します。


chmod +x google_loc.pl

google_loc.pl 00:11:22:33:44:55 AA:BB:CC:DD:EE:FF



または、以下のようにパッケージをインストールするだけでもOKです。

sudo gem install wi-fi_location



http://shokai.github.com/wifi_location/





...できない。どうやら http://www.google.com/loc/jsonが存在しないらしいです。


追記


moshが起動しなくなってました。どうやらパスがおかしくなったらしい。以下を実行しました。
sudo -H cpan

sudo cpan IO::Pty