それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

mac osx には tftp サーバーが内蔵されてるので起動してみた

tftp サーバー立てて起動イメージを配布

tftp サーバーがあれば、ルータ機器や、PXEブートなどをぱぱっと使えるので便利です。

tftp を入れようとしたら、入ってた

OSXには最初から入ってた。サーバーもクライアントも入ってた。便利な世の中なんだね。

osx の tftp の起動

sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist

起動の確認

takuya@~$ sudo lsof -i:69
Password:
COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd   1 root   37u  IPv6 0x7e0bc6654a4a7011      0t0  UDP *:tftp
launchd   1 root   39u  IPv4 0x7e0bc6654a4a7279      0t0  UDP *:tftp
launchd   1 root   40u  IPv6 0x7e0bc6654a4a7011      0t0  UDP *:tftp
launchd   1 root   41u  IPv4 0x7e0bc6654a4a7279      0t0  UDP *:tftp
takuya@~$

起動したのでアクセスしてみたい

launchd 用の 起動ファイルを見ると、 /private/tftpboot がtftpd のファイル置き場らしい。

takuya@~$ 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>

ファイルを設置してみる

echo It Works >> test.html
sudo cp test.html /private/tftpboot/index.html
rm index.html

tftp でアクセスしてみる

takuya@~/Desktop$ tftp
tftp> connect 127.0.0.1
tftp> get index.html
Received 10 bytes in 0.0 seconds
takuya@~/Desktop$ cat index.html
It Works

IPv6でも行けるようだ

takuya@~/Desktop$ tftp
tftp> connect ::1
tftp> get index.html
Received 10 bytes in 0.0 seconds
tftp> ^Dtakuya@~/Desktop$ cat index.html
It Works

使い終わったら終了しよう

69番を開けてると狙われるだけなので、ListenしてるDaemonを終了しよう。

takuya@~/Desktop$ sudo lsof -i:69
COMMAND PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd   1 root   37u  IPv4 0x7e0bc6654a4a7011      0t0  UDP *:tftp
launchd   1 root   39u  IPv6 0x7e0bc6654a4a7279      0t0  UDP *:tftp
launchd   1 root   40u  IPv4 0x7e0bc6654a4a7011      0t0  UDP *:tftp
launchd   1 root   41u  IPv6 0x7e0bc6654a4a7279      0t0  UDP *:tftp
takuya@~/Desktop$ sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
takuya@~/Desktop$ sudo lsof -i:69
takuya@~/Desktop$

ファイルも消す

takuya@~/Desktop$ rm /private/tftpboot/*

参考資料

Mac OS XでTFTPサーバーを起動する - 戦場のプログラマー