トラブルシューティング/Wireshark でポート番号を特定
なぜポート番号を特定するのか?
- パブリックサーバでも問題なくマルチプレイがしたい!
- 手動でポートフォワーディングしたい!
- DMZ はセキュリティリスクがあるから使いたくない…
- UPnP もバージョンによって脆弱性があったりするので使いたくない…
- 通信エラーが発生したときに、「ポート番号」と「そのポートが使われるタイミング」を知っておけば役立つ!
LAN 内や VPN では普通に遊べるのに、パブリックサーバでは「切断されてしまう」とか「他のプレイヤーが表示されない」といった問題が発生してしまう。こういった場合でも、お互いに DMZ を設定したり UPnP を有効にすれば、問題なくマルチプレイができるようになると思います。
しかし、DMZ や UPnP にはセキュリティリスクがあり、できれば使いたくないという人もいると思います。この場合はポートフォワーディングを使用するしかありません。ポートフォワーディングを行う場合は、ゲームが使用するポート番号を正確に把握する必要があります。このポート番号は、PC 用の有名なゲーム(例えばレインボーシックスシージ)であれば公式サイトのヘルプなどに記載されていることもあります。
一方、多くの PSP のゲームは PSP を持ち寄って遊ぶ「アドホックモード」でしか通信を行わないため、本来ポート開放が必要ありません。また Pro Online Client は UPnP がデフォルトで有効なので、利用者は意識せずポート開放行い、正常にマルチプレイができてしまいます。こうした理由で、ポート番号に関する情報がネット上にもないことがほとんどです。
情報がないなら自分で調べるしかないので、メモとしてこのページに Wireshark を使ったやり方を残しておきます。
前提条件
- ループバック通信や LAN 内、VPN では正常にマルチプレイできる。
- パブリックサーバではマルチプレイに問題が発生する。
そもそも LAN 内や VPN でのマルチプレイに問題が発生する場合は、パブリックサーバではプレイできません。そのゲームのマルチプレイに PPSSPP が対応していない可能性があります。
- LAN 内で通信を行い特定する場合
- ループバック通信で特定する場合は、以下のどちらかが必要になります。
- PPSSPP v1.11 以上:v1.11 でマルチインスタンス機能が追加されました。現在はこちらがおすすめです。
- PPSSPP Luna 版:配布されているのは v1.9.3 までです!
- Wireshark
このページでは Wireshark については説明しません。使い方については、ページ下部の参考リンクを参照するか自分でググってください。
特定手順
1-A. LAN 内でアドホック通信を行う
LAN 内でのマルチプレイのやり方は、LAN 内で通信を参照してください。
パケットを絞り込むときの労力を減らすために、キャプチャを行う端末はできるだけ PPSSPP 以外の通信が行われないようにしてください(ブラウザやメッセンジャーを終了するなど)。参加する端末のプライベート IP アドレスはすべて把握しておいてください。
- Wireshark を起動して、キャプチャフィルタは使わずにキャプチャを開始
- 「LAN に接続しているアダプタ(Wi-Fi や イーサネット など)」を選択
- 下記の「アドホックサーバの通信を除外」キャプチャフィルタは使用しても OK
- アドホックサーバを立てて、この端末でマルチプレイに参加
- 他の端末でマルチプレイに参加(できれば最大人数で)
- マルチプレイ上で可能な行動すべて行う(パーティ参加やミッション開始、エリア移動など)
- このとき横目で Wireshark を眺めて、どういう行動をしたときにどのポートが使われるかを軽く見ておいてください
- 一通り終わったら、パケットキャプチャを終了してキャプチャデータをファイルとして保存する
1-B. ループバック通信を行う
ループバック通信を使ったマルチプレイのやり方は、[ループバック通信]()を参照してください。
ループバック通信の場合は、PPSSPP を起動した順にタイトルバーに「instance 2」などが表示されます。この番号が、割り当てられるループバックアドレスの最後のオクテットと連動しています(instance 2 の場合は 127.0.0.2
になる)。
- Wireshark を起動して、キャプチャフィルタは使わずにキャプチャを開始
- 「Adapter for loopback trafic capture」を選択
- 下記の「アドホックサーバの通信・ゲーム通信以外のループバック通信を除外」キャプチャフィルタは使用しても OK
- アドホックサーバを立てる
- 複数の PPSSPP を起動してマルチプレイに参加(できれば最大人数で)
- マルチプレイで可能な行動をすべて行う(パーティ参加やミッション開始、エリア移動など)
- このとき横目で Wireshark を眺めて、どういう行動をしたときにどのポートが使われるかを軽く見ておいてください
- 一通り終わったら、パケットキャプチャを終了してキャプチャデータをファイルとして保存する
2. 【Wireshark】ゲームが使用したパケットを絞り込む
キャプチャしたパケットの中には、ゲーム以外のパケットも数多く含まれています。なのでパケットの中からゲームのパケットだけを絞り込みする必要があります。そして最後に抜けがないかを確認して終了です。
しかし「ゲームのパケットを絞り込みしたあと、パケットの抜けを確認する」だと、大量のパケットから抜けを一つ一つ確認しなければいけません。できるなら「パケットの抜けを潰しながらゲームのパケットを絞り込む」のほうが楽で確実です。
表示フィルタを使えば、この「抜けをチェックしながら絞り込み」が簡単に実現できます。「ゲームが使用するポート番号」の表示フィルタを作成し、その条件を反転させて抜けをチェックしていきます。
- 表示フィルタの欄に
!()
を入力 - カッコの中にゲームの通信っぽいパケットのポート番号を追加
- 1 つ追加したら
Enter
キーを押して徐々に除外していく
- 1 つ追加したら
- ゲームの通信っぽくないパケットだけが残るまで(2)を繰り返す
- 一通り終わったら「左端の
!(
」と「右端の)
」を削除してEnter
これでゲームのパケットだけを絞り込むことができました。ここで作成した表示フィルタは、ゲームの通信エラーを調査するときに使い回せるので保存しておきましょう。
この表示フィルタをもとにキャプチャフィルタを作成すれば、ゲーム以外で大量の通信が行われていてもゲームのパケットだけキャプチャすることが可能になります。メリットは、特定のパケットしかキャプチャしないためメモリに優しい(重くなりにくい)など。デメリットは、特定のパケット以外はキャプチャしないため原因の検証には向かないことです。
キャプチャ・表示フィルタの使用における注意点
表示フィルタなどを使って通信エラーを調査するときの注意点として、相手がポートオフセットを設定しているときはパケットを除外してしまって表示できないということです。ポートオフセットは、ゲームが使用するポート番号に設定した数値だけ「加算」します。結果としてポート番号がずれるため、キャプチャフィルタや表示フィルタを使用していると、パケットが除外されて一見通信が行われていないように見えます。このような問題に出くわしたら、一度フィルタを外して一定の数値だけずれたポート番号がないか探してみてください(キャプチャフィルタの場合は外して再度キャプチャする)。
3. 【Wireshark】着信接続の確認
ゲームが使用するポート番号のうち、実際にポート開放が必要になる「ポート番号」と「プレイヤー」を特定していきます。
【おまけ】役立つ除外フィルタ
アドホックサーバの通信を除外
アドホックサーバとの通信は、宛先ポート27312/TCP
で行われます。
- キャプチャフィルタ:
not tcp port 27312
- 表示フィルタ:
!(tcp.port == 27312)
アドホックサーバの通信・ゲーム通信以外のループバック通信を除外
- キャプチャフィルタ:
not (src host 127.0.0.1 and dst host 127.0.0.1 or tcp port 27312)
- 表示フィルタ:
!(ip.dst == 127.0.0.1 && ip.src == 127.0.0.1) && !tcp.port == 27312