乗って...ネットワークパケット

質問について考えました。habrahabr.ruがブラウザーに入力されてから、同じサーバー自体でダイオードが点滅するまでに、1つのネットワークパケットを通過する必要がある国の数です



画像





旅は私の廊下にあるワイヤレスルーターから始まりました。 その後-Ukrtelecomovskyサーバー(彼は隠されたままにしたかった)。 その後、ブダペストを迂回して、パケットが米国に送られました。 彼はしばらくループし、ドイツとロンドンに飛んで、どこかにロシアに定住しました。



その仕組みとソース/デモへのリンクについては、猫の下で読んでください。





質問に対する答えは、3つのことの組み合わせでした:Tracert、ipinfodb.comサービス、およびSilverlight。 それらについて詳しく見ていきましょう。



トレーサー


Tracert(traceroute)は、指定されたサービスへのパッケージパスを表示するユーティリティです。 その実行結果は次のとおりです。

C:\Users\anvaka>tracert -d habrahabr.ru



Tracing route to habrahabr.ru [178.248.233.33]

over a maximum of 30 hops:



1 2 ms 2 ms 2 ms 192.168.1.1

2 * * * Request timed out.

3 140 ms 139 ms 142 ms 10.50.19.2

4 155 ms 157 ms 154 ms 212.162.26.1

5 175 ms 170 ms 167 ms 4.69.141.250

6 186 ms 177 ms 179 ms 4.69.140.6

7 177 ms 171 ms 168 ms 4.68.23.75

8 83 ms 83 ms 81 ms 212.162.40.142

9 91 ms 92 ms 91 ms 91.194.117.130

10 180 ms 181 ms 182 ms 178.248.233.33









彼女の作品の本質はシンプルです。 プログラムは、TTL(有効期間)パケットを1つずつ増やすたびに、一連のICMPパケット(同じping)をターゲットホスト(habrahabr.ru)に送信します。 パケットを自分自身に渡す中間サーバーは、このパラメーターを1つ減らします。 TTLがゼロに達すると、サーバーはパケットのライフタイムが終了したことを送信者に応答します。 これは、tracertが悲しいニュースを送信した人を書き留める場所です。



上記の例では、tracertは、TTLが1の3つのパケットの最初のシリーズを送信します。 廊下にある私のルーターは、すぐに「パケットの有効期限が切れました」と応答します。 ヘルメットと2番目のシリーズのパッケージを思い出しました。 TTLは2になりました。 私のルーターはパケットがさらに進むことを許可しますが、次のルーターが私たちを包み込むはずです。 これは、ターゲットホストに到達するまで続きます。



ところで、私の場合、2番目のルーターは応答したくありませんでした。 これも起こります。 多くの場合、セキュリティ上の理由から、攻撃者がネットワークアーキテクチャに関する情報を取得するのを防ぐために、管理者はそのような要求をブロックします。



IPInfoDB


tracertプログラムの出力自体は、ネットワークの問題の診断に役立ちます。 ただし、そこから中間サーバーの地理的な場所を見つけることはできません。 私が知る限り、そのような情報を備えた単一の中央リポジトリはありません(おそらく、FBIデータベースを除きます。しかし、Wikileaksにはまだ投稿していません)。 オープンAPIを備えた無料サービスの中で、私はipinfodb.comが本当に好きでした 。 RESTにより、目的のIPアドレスを転送し、多くの場合、その地理的位置を取得できます。 もちろん、予約済みアドレス(192.168.xxなど)の場合、あなたの場所は大西洋のどこかになります-それは地球の中心でなければなりません。



Silverlight


SilverlightはMicrosoftのプラットフォームであり、 HTML 5を置き換えようとしているマイナス点があります。冗談はありません。 Silverlightは長い間市場に出ており、明るいものになります( TODO自身:数年後にこの投稿を読み直してください )。 これは別のホリバーのトピックであり、とにかく、私はそれらの両方が大好きです:)



Silverlightで、私はtracertとIPInfoDBと友達になりました。 もちろん、ブラウザから直接プログラムを実行したりパッケージを送信したりする権利はありません。 このような操作には、アプリケーションに高レベルの信頼が必要です。 したがって、ブラウザの外部でのみ機能します。



tracertを実行するには、COM Automationを使用します。 そして、これは、残念ながら、マクロユーザーが動作しないアプリケーションにとどまることを意味します。 WScript.Shell



オブジェクトがCOMを介して作成され、 tracert



コマンドが実行されます。 残念ながら、スクリプトライターは私から役に立たない:標準出力の受信中にコンソールウィンドウを表示しない方法をまだ見つけていません。



tracertから新しい出力を受信するプロセスで、アプリケーションは、ジオデータを提供するためのリクエストとともにリクエストをIPInfoDBに非同期的に送信します。 データが受信されると、新しいマーカーがBing Mapsに追加されます。



画像



コードの観点から(以下のリンク)、メインの対話プロセスは次のようになります。

画像



参照資料






結論の代わりに


プログラムがパッケージルートの絶対的な信頼できる指標ではないことに注意してください。 ルート自体は、クライアント/サーバーの対話中に数回変更される場合があります。 IPInfoDBデータベースは、そのデータの正確性を保証しません。 まあ、プログラム自体は湿っています:私は、生産コードではなく、楽しみのために書きました。



まあ、まあ、ルートに沿って国/都市を示しました、まあ、それは私から何ですか? -データの視覚化に取り組んでいるとき、どのような質問に出くわすのかを疑わないことがよくあります。 つまり 視覚化は正しい答えを教えません。 むしろ、これまでに考えたことのない適切な質問を見つけるのに役立ちます。 どんな質問があり、どんな答えが見つかるかわかりません。 しかし、ここでの時間を楽しんだことを心から願っています。



ZYZHところで、記事を評価するときは、パッケージがWeb上でどのように進むかだけでなく、作成者の気分にどのように影響するかも考えてください:)



All Articles