ザキンコのブログ

ザキンコの日記のはてなブログ版です。

東芝HDDレコのネットdeダビングの解析もどき

とりあえずポート137にUDPでNetBIOSのパケットを投げてくるので、待ち受けてそれに応答すればいいみたい。
具体的には、東芝HDDレコのダビングでLANを選択した時「NAME QUERY REQUEST」をブロードキャストしてくるので「POSITIVE NAME QUERY RESPONSE」を返せばいい。
普通のNetBIOSとは異なっていると思われる点が2点(NetBIOSにはまったく詳しくないので正しいかは保証できない)あった。
普通「NetBIOS name」は16文字(32byte)固定で、長さが16文字に足りない場合はスペース(0x20)がパディングされるが、ネットdeダビング機器の「NetBIOS name」はそれが15文字で、15文字まではスペースがパディングされるが末尾の16文字目にはNULL(0x00)が挿入されている。たぶん、これを手がかりにネットdeダビング機器かそうでないか判断していると思われる。REQUEST系のブロードキャストパケットでの「NetBIOS name」の位置は先頭から何バイト目かは固定のようだから、これを見て非ネットdeダビング機器からのリクエストは捨てているのだろう。非ネットdeダビング機器からのRESPONSE系のパケットも同様と思われる。
応答する場合、普通は「NAME TRN ID」(2byte)をそのまま返すようだが、ネットdeダビングの場合は上位バイトに自身の種類で固定(HDDレコ、DVDレコ等)の値を上書きして下位バイトだけをコピーして返すらしい。
RubyUDPの処理を書いてみたら無事にネットdeダビングに表示されたので記念にメモ。こういうプログラミングは実験みたいで楽しい。

f:id:zakinco:20120802124922j:image

参考リンク。
http://tools.ietf.org/html/rfc1002
http://tools.ietf.org/html/rfc1001
http://en.wikipedia.org/wiki/NetBIOS_over_TCP/IP
http://www.usefullcode.net/2007/03/netbios.html
http://kawara.homelinux.net/pukiwiki/pukiwiki.php?RD-XS34
http://rdwiki.rd-style.info/wiki.php?%A5%CD%A5%C3%A5%C8de%A5%C0%A5%D3%A5%F3%A5%B0

(追記 2012.8.6)
「NetBIOS name」の末尾(16文字目)はリソース・タイプの値を入れるみたい。マイクロソフトの仕様らしい。
http://support.microsoft.com/kb/163409/ja