Microsoftが作ったLMNNRというプロトコルのDiscovery queryの送信について調べてみました。
LLNNRは、IP multicastを使って名前解決するためのプロトコルです。
LLNNRの正式名称は「Link-Local Multicast Name Resolution」で、RFC4795で規定されています。
LLMNRのプロトコル 概要
- UDP/IPを使う。
- IPv4: マルチキャストアドレス 224.0.0.252, MAC address of 01-00-5E-00-00-FC
- IPv6: マルチキャストアドレス FF02:0:0:0:0:0:1:3 , MAC address of 33-33-00-01-00-03
- UDPを使う。 ポートは5355
- Senderは上記のアドレスとポートにDicovery queryを送信する、Responderはそれに対してレスポンスを返す。
LMNNRのDiscoveryパケット のフォーマット
- IPヘッダは宛先アドレスを224.0.0.252にする
- UDPヘッダは宛先アドレスを5355にする
- LLMNR
- id とりあえず0を設定
- flags とりあえず0を設定
- qdcount よくわからないけど1を設定
- ancount よくわからないけど0を設定
- nscount よくわからないけど0を設定
- arcount よくわからないけど0を設定
- オプションに query name の文字列、query typeに1を設定
以上の調査の結果、AndroidでLLMNRのDiscovery queryの送信ができたので良かったです。