Win32環境でDHCPアドレスを取得
ここでは、Windows環境においてDHCPでIPアドレスを取得(もしくは更新)する方法を説明したいと思います。
サンプル
Win32API経由でIPHLPAPI(IP Helper API)を利用すると、DHCPでIPアドレスを取得できます。 詳細はコード中にコメントとして記述しています。
#!/usr/bin/ruby
require 'Win32API'
#require 'dl/win32'
# IPHLPAPIを利用するための準備
GetInterfaceInfo = Win32API.new('iphlpapi', 'GetInterfaceInfo', %w(p p), 'i')
IpRenewAddress = Win32API.new('iphlpapi', 'IpRenewAddress', %(p), 'i')
# 32ビットint
intPtr = "\0" * 4;
# 必要なサイズを調べるためにNULLで呼び出し
GetInterfaceInfo.call(nil, intPtr)
# 必要なサイズがintPtrに入っているのでゲット
sz = intPtr.unpack('i')
# mallocのつもり
ptr = "\0" * sz[0]
# 本番呼び出し
GetInterfaceInfo.call(ptr, intPtr)
# アダプタの数をゲット
numAdapters, = ptr.unpack('i')
p numAdapters
# 全てのネットワークアダプタに対してDHCP IPアドレス取得処理
i = 0
while i < numAdapters
# 情報を確認用
# この部分が無くてもDHCPでIPアドレス取得はできます
adapterIndex, = ptr[4+i*(256+4),4].unpack('i')
adapterName, = ptr[4+i*(256+4)+4, 128];
p adapterIndex
puts adapterName
# DHCPでIPアドレスを取得(更新)
# 指定するネットワークアダプタに関する情報は
# GetInterfaceInfoで取得したもの
puts "renew\n"
adapterPtr = ptr[4+i*(256+4), 256+4];
IpRenewAddress.call(adapterPtr)
i = i + 1
end