People Near Me 解析 Part1
最近、People Near Meの内部構造について調査する機会があったのでここに軽くまとめておく。こんなマイナーなことに興味のある人間も少ないと思うので自分への備忘録として。People Near Meのアーキテクチャについて公開されている情報は少なく、WS-Discoveryに上に実装されているという情報程度。今回はより詳細な情報を得るためにPeople Near Me(PNM)の流すパケットについて観察し解析してみた。
とりあえず、PNMのSignIn/SignOutによるパケットフローがどうなっているのかを観察。公開情報の通り、サービスへの参加/脱退などの管理はWS-Discoveryが使用されているみたい。参加、脱退に応じてHelo/Byte/Prove/ProbeMatchメッセージが流れていたことを確認。ちなみにWS-DiscoveryのメッセージングはSOAP over UDP、Destination=ff02::c、Port=3702が基本。詳しくはSpecification参照。
WS-Discoveryパケット解析
Hello Message
- Packet Summary
Source | Destination | Protocol | Info |
---|---|---|---|
fe80::100d:43ef:d5fc:452f | ff02::c | UDP | Source port: 49375 Destination port: 3702 |
- Message Data
<?xml version="1.0" encoding="utf-8" ?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:NearMe="http://schemas.microsoft.com/p2p/2005/08/NearMe"> <soap:Header> <wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To> <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello</wsa:Action> <wsa:MessageID>urn:uuid:a148bddf-d5ac-4c15-a959-8f08f424579f</wsa:MessageID> <wsd:AppSequence InstanceId="5" MessageNumber="8"></wsd:AppSequence> </soap:Header> <soap:Body> <wsd:Hello> <wsa:EndpointReference> <wsa:Address>uuid:a0707166-1d8e-430a-899e-019b291bcad0</wsa:Address> </wsa:EndpointReference> <wsd:Types>NearMe:a4c1fbe4-6d30-46c9-8bba-b8663d615706</wsd:Types> <wsd:MetadataVersion>1</wsd:MetadataVersion> <NearMe:NearMeData>wAkAAAcAAAAUAAAACgAAABsAAABWaXN0YQAAVklTVEEtUEMAAA==</NearMe:NearMeData> </wsd:Hello> </soap:Body> </soap:Envelope>
Bye Message
- Packet Summary
Source | Destination | Protocol | Info |
---|---|---|---|
fe80::100d:43ef:d5fc:452f | ff02::c | UDP | Source port: 49375 Destination port: 3702 |
- Message Data
<?xml version="1.0" encoding="utf-8" ?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery"> <soap:Header> <wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To> <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Bye</wsa:Action> <wsa:MessageID>urn:uuid:047bc593-719a-4d19-ac2f-b1c47a4807c1</wsa:MessageID> <wsd:AppSequence InstanceId="405" SequenceId="urn:uuid:388e6fd3-9bab-4ad9-b3b2-4b13f814ab88" MessageNumber="8"></wsd:AppSequence> </soap:Header> <soap:Body> <wsd:Bye> <wsa:EndpointReference> <wsa:Address>urn:uuid:9e31c20e-8d9c-4b30-a030-0b94823a087a</wsa:Address> </wsa:EndpointReference> </wsd:Bye> </soap:Body> </soap:Envelope>
Probe Message
- Packet Summary
Source | Destination | Protocol | Info |
---|---|---|---|
fe80::100d:43ef:d5fc:452f | ff02::c | UDP | Source port: 49375 Destination port: 3702 |
- Message Data
<?xml version="1.0" encoding="utf-8" ?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:NearMe="http://schemas.microsoft.com/p2p/2005/08/NearMe"> <soap:Header> <wsa:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsa:To> <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</wsa:Action> <wsa:MessageID>urn:uuid:606b61ea-d552-4876-97ee-08058c90e3e0</wsa:MessageID> </soap:Header> <soap:Body> <wsd:Probe> <wsd:Types>NearMe:a4c1fbe4-6d30-46c9-8bba-b8663d615706</wsd:Types> </wsd:Probe> </soap:Body> </soap:Envelope>
ProbeMatch Message
- Packet Summary
Source | Destination | Protocol | Info |
---|---|---|---|
fe80::9d0d:76ac:ebc:60c | fe80::100d:43ef:d5fc:452f | UDP | Source port: 3702 Destination port: 49374 |
- Message Data
HELOと同じくNearMe:NearMeDataは不明。
<?xml version="1.0" encoding="utf-8" ?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:NearMe="http://schemas.microsoft.com/p2p/2005/08/NearMe"> <soap:Header> <wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To> <wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches</wsa:Action> <wsa:MessageID>urn:uuid:5cc237c2-0b5f-44b0-9f6e-3f863018217a</wsa:MessageID> <wsa:RelatesTo>urn:uuid:eb50636a-2548-4fca-83cc-f8b03183df24</wsa:RelatesTo> <wsd:AppSequence InstanceId="1" MessageNumber="21"></wsd:AppSequence> </soap:Header> <soap:Body> <wsd:ProbeMatches> <wsd:ProbeMatch> <wsa:EndpointReference> <wsa:Address>uuid:0192e97a-fdc1-4883-b33d-5fa2650784fa</wsa:Address> </wsa:EndpointReference> <wsd:Types>NearMe:a4c1fbe4-6d30-46c9-8bba-b8663d615706</wsd:Types> <wsd:MetadataVersion>1</wsd:MetadataVersion> <NearMe:NearMeData>wA4AAAsAAAAUAAAADAAAAB8AAABTb3VzdWtlYmUAAFNPVVNVS0UtUEMAAA==</NearMe:NearMeData> </wsd:ProbeMatch> </wsd:ProbeMatches> </soap:Body> </soap:Envelope>
PNMパケット解析
で、WS-DiscoveryによりPNMネットワークへの参加、脱退などの仕組みは実現できることが納得できたけど、PNM APIのオブジェクト公開とか、アプリケーション招待などの仕組みがまだわからないということでもう少し調査。予想としてはWS-Discoveryパケット内に組み込んでいるのだとも思ったがそうではないらしい。オブジェクトデータ、アプリケーションデータのやりとりはTCP接続でPeer対Peerでの送受信が行われる模様(下図赤線部分)。で、ここで重要なのは受け取る側は誰で、送る側は誰なのか?ということ。どうも、分散ハッシュ的な考えが使われている模様。つまり、あるオブジェクトデータを保持・管理しているのはオブジェクトデータを公開したPeerとは限らない誰かということ。オブジェクト要求するPeerは分散ハッシュのようなイメージで、オブジェクトを保持しているPeerへのインデックス情報を取得。そしてその後オブジェクトデータを管理している誰かとコネクションをはってデータを取得するようだ。ちなみにこれらの情報はp2phost.exeの上でオンメモリで管理されている模様(?)ここら辺は明日にでも図の説明を追加するつもり。
いやー。People Near Meは意外と奥が深いですね。もっと技術情報を公開してくれれば良いのですが。。。こんな逆アセンブリ&パケット解析などは邪道すぎる;
ネタ
少々古いネタはご勘弁を。。。
あと数時間後に予約開始ですね。もっとおおっぴらに発表すればいいのに。
- http://rss.rssad.jp/rss/artclk/lfgBXSTPJWCW/848ea387cb6a6a66a1cce1e28a581615?ul=NYygwFJhNHIGIamrpDIhHBL_HY5OSePEtfKR2Z_WVWit0L7eALsG0f.do6LoF.BhT1YC_rp3YXMNGZ_NPC4uMa4spbqj3bRLIwFZY58phuMcq9XMQusVQVi3INecm.gE0mUxvYq
- http://rss.rssad.jp/rss/artclk/lfgBXSTPJWCW/f18081bf0dde96c2f6dd9ceaf0402f1f?ul=So..O2By0MJhFV.XCFxJbykFUOCT0JJawstt5NFLG6hx2GhSW5bgH_uz2Tith7eKeUiGvo_SRze.DU4pRZdS7b2g7FoVmwcYC5AHabMQ0yy_6te8zse5YyRnHK4IpM7Q_E5qStG
- http://journal.mycom.co.jp/articles/2007/09/10/iPhoneNativeApp/index.html
これを機会に無線APインフラが充実してくればいうことなしです!ということでiPod Touchを早速予約。やはりネイティブ開発はしてみたいですね。
国内ではまったくの存在感をみせていないZuneに電話機能ですか。oPhoneといいよくわかりませんね。