Windows・Busyboxのtftpクライアントの使い方

これは備忘録。

仕事の都合でtftpを使うことになった。Linuxマシンにtftpdを立てて、クライアントマシンからtftpでファイルを取得するのだ。クライアントが組み込みLinuxで、Busyboxのtftpぐらいしかファイル転送用のツールが無かった*1

この準備の過程でコマンドラインのtftpクライアントを2種類使ったのだけど、どれも使い方が違うので紛らわしい。なので使い方をメモしておく。

Windows付属のtftpコマンド

LinuxマシンはVirtual PCのゲストOSとしてWindows XP上で動いている。ゲストOSとホストであるXPとの間はMicrosoft Loopback Adapterを通じて接続されていて、パーソナルファイアーウォールの類は挟まっていない。

なのでtftpdを立てた直後の動作確認にはWindowsのtftpを使うとよいだろう、と勝手に判断して使ってみた。

tftpクライアントはWindows XPではデフォルトで入っている。Vista以降では機能を有効にする必要があるらしい。

使い方自体はコマンドのヘルプを見ると大体分かる。

D:\tmp>tftp /?

Transfers files to and from a remote computer running the TFTP service.

TFTP [-i] host [GET | PUT] source [destination]

  -i              Specifies binary image transfer mode (also called
                  octet). In binary image mode the file is moved
                  literally, byte by byte. Use this mode when
                  transferring binary files.
  host            Specifies the local or remote host.
  GET             Transfers the file destination on the remote host to
                  the file source on the local host.
  PUT             Transfers the file source on the local host to
                  the file destination on the remote host.
  source          Specifies the file to transfer.
  destination     Specifies where to transfer the file.


D:\tmp>_

実際にファイルを送ったり取得したりする場合はこんな感じ。

:: 192.0.2.13のtftpdからhoge.binをバイナリモードで取得する
tftp -i 192.0.2.13 get hoge.bin

:: 192.0.2.13のtftpdにfuga.txtを送る
tftp 192.0.2.13 put fuga.txt

ちなみに私はputでファイルを送れなくて悩んだが、

  1. tftpd側に送信するファイル名と同名のファイルを作成しておく。
  2. 作成したファイルのアクセス許可を変更して、書き込み可能にしておく。

といった前準備を忘れているとダメらしい。

Busyboxのtftpコマンド

実際にファイル転送をするクライアントではBusyboxのtftpを使う。

当初、Linuxのmanを参考にtftpを使おうとしたらコマンド体系が全く違っていて困惑した。ヘルプを見てみたけど使い方が微妙に分からなくて再び困惑した。

# tftp --help
BusyBox v1.16.2 (2011-02-21 12:00:38 JST) multi-call binary.

Usage: tftp [OPTIONS] HOST [PORT]

Transfer a file from/to tftp server

Options:
        -l FILE Local FILE
        -r FILE Remote FILE
        -g      Get file
        -p      Put file

# _

このヘルプだと、オプションの付け方が分かるようで微妙に分からない……。

ちょっと悩んだが、結局のところこんな風に使えばよいようだ。

# 192.0.2.13のtftpdからhoge.binを取得する
tftp -r hoge.bin -g 192.0.2.13

# 192.0.2.13のtftpdにfuga.txtを送る
tftp -l fuga.txt -p 192.0.2.13

おまけ:Linuxのtftpコマンド

man tftp :)

使ったことはないけど、manを見る限りこんな感じだろうか?

$ tftp 192.0.2.13
tftp> binary
tftp> get hoge.bin
tftp> ascii
tftp> put fuga.txt
tftp> quit

対話型操作らしい。

*1:ftpget、ftpputは無効になっている。