World IP Traceroute Locations

サーバに対するアクセスで、接続元IPの位置情報から地図に接続元をマッピングして表示したりする機能はよくある。Google Analyticsでは見慣れた人も多いと思う。

インターネットの通信はEnd-to-End繋がっているように見えるけど、1方のEndから送信されたデータはもう1方のEndに直接届くわけではなく、途中で色んな経路を辿っていく。例えば自分のこのサーバにアクセスしにきた’95.138.53.131’のIPアドレスは次のような経路を辿っている。

+-----------------+---------------+----------------+
| trace_ipaddr    | country       | city           |
+-----------------+---------------+----------------+
| 95.138.53.131   | Martinique    | Riviere-Salee  |(ここからの接続)
| 213.188.170.58  | France        | Presles        |
| 213.188.171.9   | Guadeloupe    | Pointe-a-Pitre |
| 77.67.69.126    | Germany       | Neu-Isenburg   |
| 141.136.109.25  | Germany       | Neu-Isenburg   |
| 199.229.229.181 | United States | Willowbrook    |
| 129.250.5.43    | United States | Englewood      |
| 129.250.3.12    | United States | Englewood      |
| 129.250.4.108   | United States | Englewood      |
| 203.105.72.229  | Japan         | Tokyo          |
| 157.7.40.137    | Japan         | Tokyo          |
| 157.7.40.113    | Japan         | Tokyo          |
| 203.189.96.2    | Japan         | Tokyo          |
+-----------------+---------------+----------------+

上から接続元のIPで次に辿る経路のIP…と続いて最後にJapan/Tokyoが来ている。例的にはこんな感じね。Martiniqueって国、初めて知ったよ…

IMG_8429

んで、この辿った経路は調べることが出来る(tracerouteというコマンドで)。ただ全ての経路が分かる訳じゃなく、分からない所もあったり(tracerouteのICMPに対応していないとか)するんだけど、大体の経路は分かる。その経路のIPアドレスから位置を取得するIP-API(Geolocation API)を叩いて、経路上の位置を特定して通信しているデータがどんな経路を辿っているかマッピングしたのがこちら。

ちなみに、アクセスデータは自分のブログにアクセスしにきている接続ログを利用している。
WebAPのログをfluentでelasticsearchに送って、golangでログを検索してlocationのデータをMySQLにツッコムといった感じで。golangからesにはelastigoを使ってみた。そして集計したMySQLのデータをopenFrameworksで描画!!といった感じ。

alltrace

ちなみに、IPと位置という関係は正確では無いです。「このIPはこの場所にある」というのは正確に特定するのは難しい(そもそも、IPのプロトコルで位置データを扱うヘッダというのは無い)。ルーティングやIPの設定で、全然違う所に配布したりも出来るわけで、その辺の正確性には欠ける。ただ、大体の国と地域はAPIで取得される位置でもOK。またtracerouteの経路情報もその時々で変わって、常に同じ経路という訳でも無い。経路はルーティングプロトコルによって変わったり再構成されていく。
これはアクセス順に動画にしてみた。

接続元IPがどの国から来ている、という絵とか動画は見たりするけど経路も含めた物は見た事がなくって面白いかなーと思ったら、スゲーことになった。
全ての経路が日本の自分サーバに集中している。色んなアクセス経路のデータが取れたから、接続元IPの国別にどういった経路を辿ってきているのかも分かる。
まずはアメリカからの経路。殆どがUSからデータが来ているけれど、一部ヨーロッパ経由で来ているものもある。
fromUSA

次はフランスから。これはフランスから直接日本に来ている場合と、アメリカ周りの大きく2パターンがあるですね。
fromFrance

次は南米の国、コロンビアから。これはUS経由のものしか無いっすね。何故か一旦ヨーロッパに向かって、その後またアメリカ大陸に来てから…という謎の往復経路もあって面白い。
fromColombia

次はパレスチナからのパケット。これは直接日本に来ているものと、ヨーロッパ、アメリカを経由している2パターンっすね。
fromPalestine

これは中国発のパケット。日本に直接来ている物と、アメリカを経由している2パターン。昔はロシア、アメリカ経由の経路が確かあったような気がするけど。
fromChina

これはイタリア発のパケット。同じくヨーロッパのフランスと同じく、直接来るパターンとUS経由の大きく2パターン。
fromItaly

経路が少ない所を見てみたらウガンダ共和国から来ている物も。インド->US経由と、香港経由の2パターンがあった。
fromUganda

最後にこれはインドから。殆どが直接でヨーロッパ、US経由が少しだけ。
fromIndia

データとして溜められたのは、
IPの位置情報 : 17208
取得した国・地域: 164
アクセスログ : 56799
経路数 : 99985

今見ているインターネットのデータ・パケットは自分と相手で直接やりとりしているんじゃなく、「世界中を駆け巡って色んな国を旅行して来ている」というのが分かる。技術の進歩で、その旅は一瞬で感じられるし気にする事も無いと思う。今この瞬間も世界中をデータが駆け巡っている。そして、自分もデータと一緒に世界中を旅行して回りたいとか思ったった。

Maker Faire Tokyo 2015 出し物&ドローンにプロジェクション

今年も国際展示場、ビックサイトでMaker Faire Tokyoが開催された。少し前のBayAreaは足が蜂窩織炎になって、エントリーするも行けず…事前に「また開催直前に足が腐ったらどうしよう」とか思ったけど、大丈夫っした。健康万歳。

ブースはこんな感じ。
11800207_10153000920328244_5438393463677101292_n

今年の自分の出し物は以下。

Typing Board (一番左のもの)
これはマニア層にウケた。キーボードを叩くともう一方のPCのキーボードを叩くというシンプルな物で、ソレノイドを大量にキーボードの上に並べて叩くという力技的なもの。意味あるの?(ないです。楽しそうだから作っただけ)、技術の無駄使い(褒め言葉ですw)、爆(w)みたいな反応でいい感じ。

ポスト君 (一番右のもの)
これは一般層にウケた。売り物?欲しい、作って、売って!!といった反応。作ります(というかモックは目の前にw)。250枚刷ったチラシが見事に無くなった。

ドローン(真ん中、Androidアプリ、プロジェクタで投影)
多分、全体の8割くらいの時間を事前の準備で当てた。魔法の大鍋さんのドローンをトラッキングしてプロジェクタで光を当てるというもの。

何はともあれ、こんな感じのものです。


こちら湯村さんが撮ってアップして貰えていたものです。

新里さんのDrone Tracking Projectionの捜査風景。

Posted by 伊藤 武仙 on 2015年8月1日

こちらは伊藤さんが撮ってアップして貰えたものです。
以下、写真を撮ってもらった皆さんに感謝です。

投影先のドローンはこちら
IMG_0212-1

このdroneにXtion/プロジェクターを使って投影といった感じ。
11800461_964785356905435_7964624635990862660_n

使ったアプリはこんな感じ。プログラマブルでよく利用される環境ですね。
PC : Macbook Pro
トラッキング : Xtion(OpenNI2/Depthのみ利用)
ソフト : openFrameworks 0.8.4, VDMX5

写真、動画を見てもらえればわかるとおり、Maker Faireのロゴ以外にパキパキ動く素材を投影したり。制御用の画面はこんな感じ。

これは絵の素材。他にもオリンピックマークやら何個か。

スクリーンショット 2015-08-04 11.09.07
これは横のポリゴンパキパキ(depthとトラックした3次元データから動的に生成)

スクリーンショット 2015-08-04 11.09.42
スクリーンショット 2015-08-04 11.09.30
これは縦の線をパキパキ(これも同じく動的に生成)

スクリーンショット 2015-08-04 11.09.50
これは立ってもらってキャリブレーションをしている時の

11837024_959431744119954_660052457_o

この他に位置合わせ、表示の切り替えではVDMX5を利用。パキパキの動きのあるものは、depthとトラッキングしたdroneの表面をポリゴンステップ(左のメニュー)にあるステップに応じて作成して、投影面をポリゴン化している。こういう幾何的な模様を作って動きを出すときに便利。表示するものは、キーボードのキーで切り替えるようにして、動きに応じて投影する物を変えたり、パラメータの微調整とかを合間にしていた。

事前の構想メモはこんな絵で。仮想空間上のあるエリアに入ってきたら対象とみなして、投影をする感じ。
IMG_8227

大抵のXtion/kinect物は、
1. 投影する先はあまり動かない。そして平面が多い(今回は3次元空間を動く)
2. 結果をディスプレイに写す場合がほとんどで、対象物に再フィードバック(投影)する事はあまりない。
この2点がちょっと今までとは違う感じ。再フィードバックがあるから、無駄な処理やロジックを単純化して、できるだけ追従できるようにしてみた(操作->droneの動き->トラッキング->処理->投影、この時間をできるだけ最小に)。

事前の実験だと、すげー光があたって綺麗に見えるはずだったのが、会場の環境だと青・赤がさっぱり見えなくなって、緑をベースにした物になった。暗い所だと、もっと色んな表現ができたんだけど、これは仕方なし。改善したい点はあって実験を重ねてみようかと。舞台で正面から見えるという状態だけなら前からだけでOKだけど、前後左右どこからでも見れる状態だとそうもいかないし。事前の実験はこんな感じ。

drone自体がプロジェクターを持ったり、LEDで光ったりするものは見た事があったけど、自由に投影できるとそれはそれで面白いと思われ。

他にも最新のGoPro Hero4が浮いている!!
11830883_827564247350811_1875305959_n

直前にマウンタを作って搭載するという驚異の技を見せてくれた魔法の大鍋さんスゴス。この映像をOculus Rift DK2で見るということも。会場の様子が上から見渡せる映像が!!この映像、すごく良い。とっても良い感じ。

色々とdroneはセンシティブで飛ばせる環境も限られているけど、こういう面白い使い方、楽しみ方はいっぱいあると思う。