DHCPクライアント作成
テスト用にDHCPクライアントを作成した。
と言ってもUDPでDHCPDISCOVERかDHCPREQUESTを投げるだけだけど。。
環境はubuntuで確認
DHCPプロトコルはここを参考
http://www.picfun.com/lan09a.html
tcpdump準備(別ターミナルで立ち上げポート67,68を監視)
sudo tcpdump port 67 or port 68 -X -s 2000
dhclientを実行してパケット確認
0x001d以降の0101....〜ffまで抜き取る
○Rubyソース
require 'socket' p Socket::INADDR_ANY p Socket::INADDR_BROADCAST sock = UDPSocket.open() sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1) sock.bind(Socket::INADDR_ANY, 68) #DISCOVER req='0101060025965b0b000000000000000000000000000000000000000006144901882200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000638253633501013d0701061449018822ff000000000000000000000000000000000000000000000000000000000000000000000000000000' msg=[] msg << req p sock.send(msg.pack("H*"), 0, Socket::INADDR_BROADCAST, 67)
hcp.rb:6:in `bind': Address already in use - bind(2) (Errno::EADDRINUSE) from dhcp.rb:6
実行時上記のエラーが発生するとdhclientが68ポートを使っているのが原因なので
プロセスを終了する