ZDNSの使い方

ZNDSはDNS lookupを高速に行うソフトウェアです.

感覚としてはZmapのDNSバージョンといった感じです.
Zmapというのは高速スキャンツールで,このツールを使うと全グローバルIPv4アドレスに対して45分でスキャン(ICMP・Any TCP Port・Any UDP Port)を行うことができると言われています.

ZDNSはZmapを公開しているThe Zmap Projectが公開しているツールの一つで,高速にDNSクエリを送信することができます(digコマンドを多数のターゲットホスト名に対して高速で行うイメージ).

今回はこのZDNSのインストール方法と使い方をまとめます.

公式リポジトリ

インストール

以下はDebian系ディストリビューションでのインストール方法です.

ZDNSはGo言語で実装されているので,まずはGo言語の実行環境を用意します.
Goはaptでインストールできます.

$ sudo apt update
$ sudo apt install golang

またGoでインストールしたバイナリはデフォルトでは$HOME/go/bin/usr/local/go/binに入るので,パスを通しておきます.

$ echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
$ source ~/.bashrc

この状態で,以下のコマンドを実行します.

$ go get github.com/zmap/zdns/zdns

go getコマンドは以下の処理を自動で行ってくれます.

  • 指定したパッケージを$GOPATH/srcへダウンロード
  • 依存パッケージを$GOPATH/srcへダウンロード
  • ソースコードのビルド

~/go/bin/zdnsが生成されていればインストール完了です.

ZDNSの使い方

ZDNSの基本的な使い方は以下のようになります.

$ echo "example.com" | zdns A
$ echo "203.0.113.1" | zdns PTR
$ zdns A -intput-file "input.txt" -output-file "output.txt"

スキャン結果はjson形式で出力されます.
内容はdigコマンドで得られる情報とほぼ変わりません.

実際に無線環境のラップトップからIPv6アドレス10000個の逆引きを
したところ,結果の出力まで16秒しかかかりませんでした.
めっちゃ早いです.IPv6にも対応しています.

ただし,高速なだけあってNOERRORが返ってくるべきところでSERVFAILTIMEOUTが返ってくることがあるので,必要に応じて-retriesオプションで再送回数などを調節しましょう(デフォルトでは1).

その他,使えるオプションは以下の通りです.

"-alexa": is input file from Alexa Top Million download
"-cache-size int": how many items can be stored in internal recursive cache (default 10000)
"-class string": DNS class to query (INET, CSNET, CHAOS, HESIOD, NONE, ANY (default INET) (default "INET")
"-conf-file string": config file for DNS servers (default "/etc/resolv.conf")
"-go-processes int": number of OS processes (GOMAXPROCS)
"-input-file string": names to read (default "-")
"-input-handler string": handler to input names (default "file")
"-iteration-timeout int": timeout for resolving a single iteration in an iterative query (default 4)
"-iterative": Perform own iteration instead of relying on recursive resolver
"-log-file string": where should JSON logs be saved
"-max-depth int": how deep should we recurse when performing iterative lookups (default 10)
"-metadata-file string": where should JSON metadata be saved
"-name-servers string": comma-delimited list of DNS servers to use
"-nanoseconds": Use nanosecond resolution timestamps
"-output-file string": where should JSON output be saved (default "-")
"-output-handler string": handler to output names (default "file")
"-prefix string": name to be prepended to what's passed in (e.g., www.)
"-retries int": how many times should zdns retry query if timeout or temporary failure (default 1)
"-threads int": number of lightweight go threads (default 1000)
"-timeout int": timeout for resolving an individual name (default 15)
"-trace": Output a trace of individual steps for each resolution
"-verbosity int": log verbosity: 1 (lowest)--5 (highest) (default 3)

注意

ZDNSは短時間に大量のパケットを生成するため,使い方やスキャン対象によっては攻撃とみなさます.上記を参考にしてZDNSを使用したことにより生じた問題について,当サイトは一切の責任を負いかねます.
十分注意して使用しましょう.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする