2014年12月28日日曜日

Node.jsでGoogleのSTUNサーバを利用する

NAT内のIPアドレスやポート番号を知るために、最近だとWebRTCとかで利用されるSTUNサーバ。
GoogleもパブリックなSTUNサーバを用意している。

stun.l.google.com:19302

Node.jsだと
npm install stun
でインストールできる。(githubページ
ただgithubのexamplesフォルダ内のclient.jsを実行しても失敗する。
...client.js:31
    peer.push(packet.attrs[stun.attributes.MAPPED_ADDRESS]);
                                          ^
TypeError: Cannot read property 'MAPPED_ADDRESS' of undefined
 
原因は(いつからかわからないが)STUNサーバがMAPPED_ADDRESSではなくて、XOR_MAPPED_ADDRESSを返すようになっているから。
client.jsを実行すると、エラーメッセージの前に
Sending STUN packet
Received STUN packet: { class: 1,
  method: 256,
  attrs: { '32': <Buffer 00 01 bf 11 5c d3 78 5e> },
  tid: 769776767 }
という出力があり、attrsの32というのが、githubのlibディレクトリ内のpacket.jsに定義されているXOR_MAPPED_ADDRESS。

そもそもgithubの更新が2013年で止まっている。
こちら(https://github.com/orbitbot/node-stun )の方がXOR_MAPPED_ADDRESS対応版を作ってくれている。

cloneして動作を確かめる。



ちゃんと返ってくる。

0 件のコメント:

コメントを投稿