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

kobadbadbadbadbad

モチベ維持

オンラインゲームのパケットを眺める

f:id:kobadlve:20161215015124p:plain

Aizu Advent Calendar 2016 - Qiita 14日目の記事です。

遅れてごめんなさい。。。

前日は @ywkw1717 さん、次は @slme_not_found さんです

会津クソ寒くて死にそうです。ガッキーを見て温まる。

ps4のオンラインゲームを対象にしてパケットを眺めてみました。(名前を出していいのかよくわからないw)

コンシューマゲームのパケットキャプチャ方法と眺めた結果を書きました。

一応パケットの詳細はあまり載せずに自分で見て感じたことという感じです。

気になる人は自分でキャプチャするかコンタクトくださいい。

キャプチャ方法

いろいろ方法はあると思いますが、スイッチを使ってポートミラーリングしてキャプチャしました。

使ったスイッチは NETGERA GS105E-200JPS 4000円くらい

※イメージ

f:id:kobadlve:20161215002027p:plain

Prosafe Plusユーティリティソフトウェア(Windowsのみ)が提供されていて、GUIでも簡単にミラーリングの設定ができます。

この場合だと 02ポートとPS4を繋いで、

03ポートとPCを繋いで以下のように設定するとPS4に流れるパケットがPCにも流れてきます。

f:id:kobadlve:20161215001323p:plain

キャプチャして眺める

3つのシチュエーションで考えました。

  1. マッチ検索
  2. 試合中
  3. 試合終了

1. マッチ検索

マッチ検索時はまず、UDPで自分のユーザ情報をb○ttle.netに送るために確認応答みたいなことをしてるのが見れた。

Client: [0x6a, 0x61, 0x4b, 0x00] -> Server

Server: [0x00, 0x00, 0x00, 0x00] -> Client

Client: [0x6a, 0x61, 0x4b, 0x00] -> Server

Server: [0x00, 0x00, 0x00, 0x00] -> Client

と繰り返したのちにSIP/SDPでセッションを確立してユーザ情報を渡していた。

ps4であればアカウントは作成しなくても良いはずなので、ps4ユーザは自動的に作られているのかな

次に、Blizz○rdのサーバとTCP通信が行われます。

TLS1.2で証明書はDigiCertのものを使われているのがわかった。

TCP通信では、マッチで使うサーバとかを決めてるとか?

その後、(上で決めたサーバと)UDP通信が始まり、まず自分のユーザ情報を送り、マッチに参加するユーザ名が返ってきて、参加者が共有されてるのが見えた。

そしてマッチ開始。

2. 試合中

Amazon EC2と通信していて、

ゲーム情報は全部UDP通信で進む。

RTPも流れていて、これはボイスチャットか何か?

2つのBliz○rdサーバにそれぞれUDPTCP通信を定期的にしていて、

UDPでは同じやり取りを定期的に繰り返していて、何か(回線抜きとか)の確認とか?

3. 試合終了

TCP, TLS1.2 (DigiCert)

試合中とは別のAmazon EC2サーバ(スコアサーバ?)と通信して結果を受け取ってる。

このとき同時にマッチメイキングもしていて、次のマッチにスムーズに進むようにしていた。

終わり

本当に眺めただけですが、いろんな想像(どんな通信をして何を送ってるのか)ができて楽しい。

いずれはプラグイン書いたり、詳しく解析できるようになりたい。。。

スイッチも案外安いので、コンシューマのパケット取りたい人はかってみてはいかがでしょう。

にしても、Over Watchは神ゲーでクリスマスイベントもきたし、楽しみましょう!w

参考