読者です 読者をやめる 読者になる 読者になる

"Diary" インターネットさんへの恩返し

いつもソースコードコピペばかりなので,みなさまへ少しばかりの恩返しを

ローカルPC内で位置情報を取得する方法あれこれ

ハック


スポンサーリンク

ちょっとした思いつきで、PCの位置情報を知らせる何らかの方法がないか考えていた。用途は、PC紛失対策など色々使えて、なんかビジネスできないかと。。。

とは言え調べた本当の動機は、子供くさい話ですが、、、、映画の「アンフェア」USBメモリを挿すとUSB内のデータが自動転送され、その後、USBが位置情報を第3者に伝え爆発するというシーンが有り、まさにそれを作ってみようと思いったのです。
f:id:azumami:20151125003946j:plain



ところが、まぁそこら辺の専門家ではないので、技術的課題が色々有り、ひとまずPCが位置情報を知らせるにはどうしたらいいか調べてみた。

概ねネットで調べた情報から見ると以下のパターンがある。

GPSを使う

GPSは言わずと知れた衛星と通信して位置情報を取得する技術で、スマホなどにGPSモジュールが内蔵され衛星と通信して位置情報を取得する仕組み。

またUSB型でPCに指してGPS情報を取得するUSB接続GPSレシーバーといった商品があったりする。

最近ではWindows 8の機能でGPS機能を搭載したPCの場合、アプリなどで位置情報をPCとして扱え、Windowsアプリとしても使えるし、Powershellでも利用できる。PowerShellで位置情報を取得する - PowerShell Scripting Weblog

今回の目的である、USBをPCに挿したら位置情報を取得し、、、というところにおいては、USBのAutorunでPowershellとかキックさせて位置情報を取得後、位置情報をメールで飛ばすというのも可能ですね。

ただ、USBを刺した機器がGPSに対応していないPCの場合を想定すると、USBメモリファームウェアをハックしてGPSモジュールを配線して、、、とかやらないと実現はできないなぁ。そんなクラッカー的スキルはないので諦めよう。ひとまず。

Wifiを利用した位置情報を取得

近頃はスマホで位置情報機能をオンにすると、Wifiを使うとより正確に位置情報を取得できるとかって出たりする。理由はさっぱりわかっていなかったが、仕組みはこうらしい。

ユーザがいる場所周辺に飛んでいる複数Wifiホットスポット情報をスマホアプリが取得し、電波の強度なども合わせて収集をする。そのデータをWifiホットスポットと、その物理的な位置情報を管理しているデータベースと照合し、そのユーザが居る位置情報を割り出す。そのDBはGoogleなどが個別に管理していてスマホアプリ経由で利用ができる。


ぶったまげた。


そして、Googleカーが街中を走ってWifiスポット情報を収集しそのデータベースを日々更新しているとのこと。

ということで、PCの位置情報を取得するという意味では、GoogleとかがそういったAPIを出していないかぎり難しい。その流れで一応提供されているものを紹介。


ブラウザの機能を使って位置情報を取得する

GoogleJavascriptを使ったAPIでブラウザ経由で位置情報を取得できる。恐らく内々では上で書いたDBを使っているのだろう。
JavaScriptで位置情報を取得する方法(Geolocation API)

今回の目的においては、USB内にhtml/javascriptファイルを入れておいて、USBを挿したらAutorunでそのHTMLファイルを開き、javascriptのロードイベントで位置情報を取得後、データをWebサーバに送り、サーバが受け取ったデータをメールで送るといった流れ。う”~ん全部バックグラウンドでできればいいんだけど、無駄にブラウザが開くのはおしゃれではない。

結論

Autorunで、GPS搭載PC上で位置情報を取得後、メールで連絡するやり方が自分の知識では限界かと。Autorunの作り方も分からないが次はそれを調べてみよう。