これは備忘録。
仕事の都合で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でファイルを送れなくて悩んだが、
- tftpd側に送信するファイル名と同名のファイルを作成しておく。
- 作成したファイルのアクセス許可を変更して、書き込み可能にしておく。
といった前準備を忘れているとダメらしい。
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は無効になっている。