Module: Win32::Resolv
- Defined in:
- lib/win32/resolv.rb,
lib/win32/resolv.rb,
lib/win32/resolv9x.rb,
resolv/resolv.c
Overview
Windows NT
Defined Under Namespace
Constant Summary collapse
- API =
Registry::API
- Error =
Registry::Error
- TCPIP_NT =
'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters'
- TCPIP_9X =
'SYSTEM\CurrentControlSet\Services\VxD\MSTCP'
- DHCP_9X =
'SYSTEM\CurrentControlSet\Services\VxD\DHCP'
- WINDOWS =
'Software\Microsoft\Windows\CurrentVersion'
Class Method Summary collapse
- .get_dhcpinfo ⇒ Object
- .get_dhcpinfo_95(reg) ⇒ Object
- .get_dhcpinfo_98(reg) ⇒ Object
- .get_dhcpinfo_key(version, reg, iflist) ⇒ Object
-
.get_hosts_dir ⇒ Object
private.
- .get_hosts_path ⇒ Object
- .get_info ⇒ Object
- .get_resolv_info ⇒ Object
Class Method Details
.get_dhcpinfo ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File '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) ⇒ Object
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/win32/resolv9x.rb', line 73 def get_dhcpinfo_95(reg) dhcp = reg.read_bin("DhcpInfo") [ API.unpackdw(dhcp[4..7]), API.unpackdw(dhcp[8..11]), 1, dhcp[45..50], reg.read_bin("OptionInfo"), ] end |
.get_dhcpinfo_98(reg) ⇒ Object
84 85 86 87 88 89 90 91 92 |
# File 'lib/win32/resolv9x.rb', line 84 def get_dhcpinfo_98(reg) [ API.unpackdw(reg.read_bin("DhcpIPAddress")), API.unpackdw(reg.read_bin("DhcpSubnetMask")), API.unpackdw(reg.read_bin("HardwareType")), reg.read_bin("HardwareAddress"), reg.read_bin("OptionInfo"), ] end |
.get_dhcpinfo_key(version, reg, iflist) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File '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 ⇒ Object
private
13 14 15 16 17 |
# File '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 ⇒ Object
14 15 16 17 18 |
# File '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 ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/win32/resolv.rb', line 88 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 ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File '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 |