ChromecastはDIALプロトコルおよびSSDPを使っているらしい。その通信に使うTCPポート 8008宛にHTTPで特定のURLにアクセスすることでChromecastの設定情報等が得られたりする。今回はそのメモ。
ここではChromecastのIPが192.168.1.100であると仮定する。またChromecastはmDNS(avahi,Bonjour)対応なので初期設定のChromecastから名前を変えていないのであればchromecast.localでも繋がるかも。
Chromecast 1をターゲットとしているが、Chromecast 2, Chromecast Audioで通用するかどうかは不明。
SSDPでのデバイス情報
SSDP(Simple Service Discovery Protocol)用のデバイス情報を取得できる。「これはChromecastで、DIALプロトコルに対応している」という情報が入っている。
$ curl http://192.168.1.100:8008/ssdp/device-desc.xml
Chromecastの起動時間や設定情報を取得する
/setup/eureka_info?options=detailを利用する。JSONで吐き出されるので、jqコマンドがインストールされていればjqコマンドにパイプで流しこんで整形してやったほうが見やすいかも。
$ curl -s http://192.168.1.100:8008/setup/eureka_info?options=detail | jq '.'
吐き出される内容についてはこの記事の最後を参照。
参考
上記で取り上げた物の他にも再起動や初期化などのコマンドもある。
Chromecast Hacking Has Begun | fiquett.com
付録:/setup/eureka_info?options=detailで得られる情報など
jqで整形してある(一部項目は隠してある)。長いので続きを読むから。
{
"wpa_state": 10,
"wpa_id": 0,
"wpa_configured": true,
"version": 7,
"uptime": 34.86,
"uma_client_id": "********-****-****-****-************",
"tos_accepted": true,
"timezone": "Asia/Tokyo",
"time_format": 2,
"ssid": "ExampleAccessPoint",
"ssdp_udn": "********-****-****-****-************",
"signal_level": -52,
"setup_stats": {
"num_obtain_ip": 0,
"num_initial_eureka_info": 0,
"num_connected_wifi_not_saved": 0,
"num_connect_wifi": 0,
"num_check_connectivity": 0,
"historically_succeeded": true
},
"setup_state": 60,
"release_track": "stable-channel",
"public_key": "(snip)",
"has_update": false,
"ethernet_connected": false,
"detail": {
"timezone": {
"offset": 540,
"display_string": "日本標準時 (Tokyo)"
},
"model_name": "Eureka Dongle",
"manufacturer": "Google Inc.",
"locale": {
"display_string": "日本語"
},
"icon_list": [
{
"width": 98,
"url": "/setup/icon.png",
"mimetype": "image/png",
"height": 55,
"depth": 32
}
]
},
"connected": true,
"closed_caption": {},
"cast_build_revision": "1.18.55065",
"build_version": "55065",
"bssid": "**:**:**:**:**:**",
"hotspot_bssid": "**:**:**:**:**:**",
"ip_address": "192.168.1.100",
"locale": "ja",
"location": {
"longitude": 255,
"latitude": 255,
"country_code": "JP"
},
"mac_address": "**:**:**:**:**:**",
"name": "Chromecast",
"noise_level": -82,
"opt_in": {
"stats": true,
"opencast": false,
"location": false,
"crash": true
}
}