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')
IpReleaseAddress = Win32API.new('iphlpapi', 'IpReleaseAddress', %(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解放処理
i = 0
while i < numAdapters
# 情報を確認用
# この部分が無くてもDHCP解放はできます
adapterIndex, = ptr[4+i*(256+4),4].unpack('i')
adapterName, = ptr[4+i*(256+4)+4, 128];
p adapterIndex
puts adapterName
# DHCP解放
# 指定するネットワークアダプタに関する情報は
# GetInterfaceInfoで取得したもの
puts "release\n"
adapterPtr = ptr[4+i*(256+4), 256+4];
IpReleaseAddress.call(adapterPtr)
i = i + 1
end