Module: Win32::Resolv
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Defined in: | ext/win32/lib/win32/resolv.rb, ext/win32/lib/win32/resolv.rb, ext/win32/lib/win32/resolv9x.rb, ext/win32/resolv/resolv.c |
Overview
Constant Summary
-
API =
# File 'ext/win32/lib/win32/resolv.rb', line 11Registry::API
-
DHCP_9X =
# File 'ext/win32/lib/win32/resolv9x.rb', line 7'SYSTEM\CurrentControlSet\Services\VxD\DHCP'
-
Error =
# File 'ext/win32/lib/win32/resolv.rb', line 12Registry::Error
-
TCPIP_9X =
# File 'ext/win32/lib/win32/resolv9x.rb', line 6'SYSTEM\CurrentControlSet\Services\VxD\MSTCP'
-
TCPIP_NT =
# File 'ext/win32/lib/win32/resolv.rb', line 78'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters'
-
WINDOWS =
# File 'ext/win32/lib/win32/resolv9x.rb', line 8'Software\Microsoft\Windows\CurrentVersion'
Class Method Summary
- .get_dhcpinfo
- .get_dhcpinfo_95(reg)
- .get_dhcpinfo_98(reg)
- .get_dhcpinfo_key(version, reg, iflist)
-
.get_hosts_dir
private.
- .get_hosts_path
-
.get_info
See additional method definition at file ext/win32/lib/win32/resolv.rb line 88.
- .get_resolv_info
Class Method Details
.get_dhcpinfo
[ GitHub ]# File 'ext/win32/lib/win32/resolv9x.rb', line 42
def get_dhcpinfo macaddrs = {} ipaddrs = {} WsControl.get_iflist.each do |index, macaddr, *ipaddr| macaddrs[macaddr] = 1 ipaddr.each { |ipaddr| ipaddrs[ipaddr] = 1 } end iflist = [ macaddrs, ipaddrs ] search = [] nameserver = [] version = -1 Registry::HKEY_LOCAL_MACHINE.open(DHCP_9X) do |reg| begin version = API.unpackdw(reg.read_bin("Version")) rescue Registry::Error end reg.each_key do |key, | catch(:not_used) do reg.open(key) do |regdi| dom, ns = get_dhcpinfo_key(version, regdi, iflist) search << dom if dom nameserver.concat(ns) if ns end end end end [ search, nameserver ] end
.get_dhcpinfo_95(reg)
[ GitHub ].get_dhcpinfo_98(reg)
[ GitHub ].get_dhcpinfo_key(version, reg, iflist)
[ GitHub ]# File 'ext/win32/lib/win32/resolv9x.rb', line 94
def get_dhcpinfo_key(version, reg, iflist) info = case version when 1 get_dhcpinfo_95(reg) when 2 get_dhcpinfo_98(reg) else begin get_dhcpinfo_98(reg) rescue Registry::Error get_dhcpinfo_95(reg) end end ipaddr, netmask, hwtype, macaddr, opt = info throw :not_used unless ipaddr and ipaddr != 0 and netmask and netmask != 0 and macaddr and macaddr.size == 6 and hwtype == 1 and iflist[0][macaddr] and iflist[1][ipaddr] size = opt.size idx = 0 while idx <= size opttype = opt[idx] optsize = opt[idx + 1] optval = opt[idx + 2, optsize] case opttype when 0xFF ## term break when 0x0F ## domain domain = optval.chomp("\0") when 0x06 ## dns nameserver = optval.scan(/..../).collect { |addr| "%d.%d.%d.%d" % addr.unpack('C4') } end idx += optsize + 2 end [ domain, nameserver ] rescue Registry::Error throw :not_used end
.get_hosts_dir
private
# File 'ext/win32/lib/win32/resolv9x.rb', line 13
def get_hosts_dir Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg| reg. ('DataBasePath') end end
.get_hosts_path
[ GitHub ]# File 'ext/win32/lib/win32/resolv.rb', line 14
def self.get_hosts_path path = get_hosts_dir path = File. ('hosts', path) File.exist?(path) ? path : nil end
.get_info
See additional method definition at file ext/win32/lib/win32/resolv.rb line 88.
# File 'ext/win32/lib/win32/resolv9x.rb', line 19
def get_info search = nil nameserver = get_dns_server_list Registry::HKEY_LOCAL_MACHINE.open(TCPIP_NT) do |reg| begin slist = reg.read_s('SearchList') search = slist.split(/,\s*/) unless slist.empty? rescue Registry::Error end if add_search = search.nil? search = [] begin nvdom = reg.read_s('NV Domain') unless nvdom.empty? @search = [ nvdom ] if reg.read_i('UseDomainNameDevolution') != 0 if /^\w+\./ =~ nvdom devo = $' end end end rescue Registry::Error end end reg.open('Interfaces') do |h| h.each_key do |iface, | h.open(iface) do |regif| next unless ns = %w[NameServer DhcpNameServer].find do |key| begin ns = regif.read_s(key) rescue Registry::Error else break ns.split(/[,\s]\s*/) unless ns.empty? end end next if (nameserver & ns).empty? if add_search begin [ 'Domain', 'DhcpDomain' ].each do |key| dom = regif.read_s(key) unless dom.empty? search.concat(dom.split(/,\s*/)) break end end rescue Registry::Error end end end end end search << devo if add_search and devo end [ search.uniq, nameserver.uniq ] end
.get_resolv_info
[ GitHub ]# File 'ext/win32/lib/win32/resolv.rb', line 20
def self.get_resolv_info search, nameserver = get_info if search.empty? search = nil else search.delete("") search.uniq! end if nameserver.empty? nameserver = nil else nameserver.delete("") nameserver.delete("0.0.0.0") nameserver.uniq! end [ search, nameserver ] end