macos
でtftpdサーバを稼働させる
更新履歴
- 2023/11/30 初版
- 2023/12/16 説明追加
はじめに
このドキュメントは.macOSに内蔵されているtftpdサーバを稼働させ,取得させるファイルを設置して接続テストまでの手順を示す.具体的には,PanasonicのL2スイッチPanasonic Switch-M8eG(PN28080)のファームウェアをアップデートする際に,スイッチのPanasonic Switch-M8eG(PN28080)からtftpdサーバに接続してファイルを取得する必要があり,そのために稼働させてみた.
tftprootの存在を知らなかったので,Error code 512: Access violationが出たりしたが,その対処方法についても簡単に説明してある.
tftpdを稼働する
- tftpdがmacosで動作しているか確認.
$ sudo lsof -i:69🆑
$
- 稼働してない.
- tftpdを起動して動作確認する.
$ sudo launchctl load -w
/System/Library/LaunchDaemons/tftp.plist🆑
$ sudo lsof -i:69
COMMAND PID USER FD
TYPE
DEVICE
SIZE/OFF NODE NAME
launchd 1 root 43u IPv6
0xf3a208ded70b20a7 0t0 UDP
*:tftp
launchd 1 root 44u IPv4
0xf3a208ded70b29d7 0t0 UDP
*:tftp
launchd 1 root 50u IPv6
0xf3a208ded70b20a7 0t0 UDP
*:tftp
launchd 1 root 51u IPv4
0xf3a208ded70b29d7 0t0 UDP
*:tftp
$
- 動作した.
tftpdサーバに接続してファイルの
取得をする(エラーで終わる)
- 起動したtftpdに接続して転送モードをbinaryに設定.
$ tftp🆑
tftp> connect localhost🆑
tftp> status🆑
Connected to localhost.
Mode: netascii Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> ?🆑
Commands may be abbreviated. Commands are:
connect connect to remote tftp
mode set file transfer mode
put send file
get receive file
quit exit tftp
verbose toggle verbose mode
blksize set an alternative blocksize (def.
512)
tsize toggle extended tsize
option
trace toggle packet tracing
status show current status
binary set mode to octet
ascii set mode to netascii
rexmt set per-packet
retransmission
timeout
timeout set total retransmission timeout
tout toggle extended
timeout
option
? print
help information
tftp> binary🆑
tftp> status🆑
Connected to localhost.
Mode: octet Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp>
- ファイルをgetしたりputしたりする.
tftp> get /tmp/bbb.txt
Error code 512: Access violation
tftp> put aaa.txt
Error code 256: File not found
tftp> put /tmp/bbb.txt
Error code 512: Access violation
tftp>
- tftprootディレクトリへのアクセス権がない模様.
tftprootディレクトリにファイ
ルを配置する
- tftpdはtftprootディレクトリを起点にファイルのやり取りをする模様.
- tftprootディレクトリがどこなのか,定義ファイルを確認する.
tftp> quit🆑
$ cat /System/Library/LaunchDaemons/tftp.plist🆑
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.apple.tftpd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/tftpd</string>
<string>-i</string>
<string>/private/tftpboot</string> 🈁
</array>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<true/>
</dict>
<key>InitGroups</key>
<true/>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>tftp</string>
<key>SockType</key>
<string>dgram</string>
</dict>
</dict>
</dict>
</plist>
$
- ディレクトリがわかったので存在と内容を確認.
$ ls -la /private/tftpboot🆑
total 0
drwxr-xr-x 2 root wheel 64 10 12 19:16 .
drwxr-xr-x 6 root wheel 192 11 26 03:28 ..
$
- 何も入ってなかった.
- ファームウェアファイルをtftprootディレクトリに配置する.
$ sudo mv ~/Downloads/pn28080_v100153.rom /private/tftpboot/.🆑
Password:🔑
$ ls -la /private/tftpboot🆑
total 2264
drwxr-xr-x 3 root
wheel 96 11 30 01:17 .
drwxr-xr-x 6 root
wheel
192 11 26 03:28 ..
-rw-r--r-- 1 ujpadmin staff 2314375 11 29 23:39
pn28080_v100153.rom🈁
$
tftprootディレクトリにおいた
ファイルを取得する
- tftpコマンドでtftprootディレクトリに配置したファイルを取得してみる.
$ tftp localhost🆑
tftp> mode binary🆑
tftp> status🆑
Connected to localhost.
Mode: octet Verbose: off Tracing: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> get pn28080_v100153.rom🆑
Received 2314375 bytes in 0.2 seconds
tftp> quit🆑
$ ls pn28080_v100153.rom🆑
pn28080_v100153.rom
$
- 正しく取得できた.
作業が終了したらtftpdサーバを停
止する.
$ sudo launchctl unload -w
/System/Library/LaunchDaemons/tftp.plist🆑
$ sudo lsof -i:69
$
- 停止した後にtftpコマンドで接続しても接続エラーなどが出ないので,ポートがリッスンされているか否かで確認するのが良い.