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ポートを使っているのが原因なので
プロセスを終了する