eyecatch
Sat, Mar 19, 2016

ズンドコキヨシ with Pcap4J - ZUNDOKOプロトコルを実装してみた

先週くらいから巷でズンドコズンドコ騒いでいると思ってはいたが、昨日ようやくその元ネタを見た。 以下のツイートだ。 Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから 「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた — てくも (@kumiromilk) 2016年3月9日 面白い。 巷ではこれをいろんな言語で実装したりしているみたいでさらに面白い。 私もこのビッグウェーブに乗らないわけにいかないので、専門分野であるネットワーク周りを開拓しようと思い、ZUNDOKOプロトコルというものを考案して実装してみた。書いたソースはGitHubにおいた。 (adsbygoogle = window.adsbygoogle || []).push({}); ZUNDOKOプロトコル クライアントはサーバに「ズン」か「ドコ」を送る。 サーバは「ズン」を4回受信した後に「ドコ」を受信するとクライアントに「キ・ヨ・シ!」を返す。 クライアント/サーバ間でやり取りするメッセージ(Zundokoパケット)のフォーマットは下図。 0 15 31 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | zundoko (null-terminated string) | | | | | | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 要はzundokoフィールドがあるだけ。 このzundokoフィールドは20 byte固定長で、NULL (0x00)で終わるUTF-8の文字列を保持する。 このメッセージを運ぶ下位レイヤはEthernetで、EtherTypeは0x01FF。 Ethernetにした理由は実装(下記)が楽だから。 EtherTypeはIANAでExperimentalとされている範囲から適当に選んだ。もちろんIANAに登録などはしていない。 因みに、Ethernetヘッダを加えた、クライアント/サーバ間でやり取りする完全なパケットは以下の様になる。(プリアンブルとかは除く。) 0 15 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Dst Hardware Address | + + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Src Hardware Address | + +