sys-host 0.5.2-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +95 -0
- data/MANIFEST +19 -0
- data/README +14 -0
- data/doc/host.txt +88 -0
- data/extconf.rb +48 -0
- data/install.rb +40 -0
- data/lib/sys/host.rb +244 -0
- data/sys-host.gemspec +47 -0
- data/test/tc_host.rb +63 -0
- metadata +61 -0
data/CHANGES
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
== 0.5.2 - 27-Jun-2006
|
2
|
+
* Added the Host.info method for Linux.
|
3
|
+
|
4
|
+
== 0.5.1 - 3-Mar-2006
|
5
|
+
* The Host.info method is now supported on Solaris.
|
6
|
+
* Moved project to RubyForge.
|
7
|
+
* Replaced INSTALL with README.
|
8
|
+
* Made documentation rdoc friendly.
|
9
|
+
|
10
|
+
== 0.5.0 - 3-Jul-2004
|
11
|
+
* Replaced Windows C extension with pure Ruby version, using WMI + OLE.
|
12
|
+
* Added an additional class method called 'info' that returns a HostInfo
|
13
|
+
struct. Currently on Windows only.
|
14
|
+
* Removed the block form of Host.ip_addr. It now simply returns an Array.
|
15
|
+
* Renamed and revamped test suite.
|
16
|
+
* Moved test.rb to doc/examples
|
17
|
+
* Removed the host.html file.
|
18
|
+
* Replaced previous exception classes with a single exception class,
|
19
|
+
HostError, and moved it under the Sys module namespace.
|
20
|
+
|
21
|
+
== 0.4.0 - 15-Jun-2003
|
22
|
+
* Added MS Windows support
|
23
|
+
* Modified extconf.rb file - generic test script now in its own file
|
24
|
+
(test/test.rb) and the dynamic rd2 stuff was removed, in addition to proper
|
25
|
+
handling for MS Windows
|
26
|
+
* rd2, txt and html docs now included by default
|
27
|
+
* Removed VERSION() class method (use the constant instead)
|
28
|
+
* Added a universal constants.h file to store VERSION info, etc, that
|
29
|
+
is common to all source files.
|
30
|
+
* Added LICENSE info
|
31
|
+
|
32
|
+
== 0.3.4 - 3-Apr-2003
|
33
|
+
* Fixed a header include issue for solaris systems that don't
|
34
|
+
define inet_ntop().
|
35
|
+
|
36
|
+
== 0.3.3 * 24-Mar-2003
|
37
|
+
* If inet_ntop() is not defined, now falls back to inet_ntoa().
|
38
|
+
|
39
|
+
== 0.3.2 - 14-Mar-2003
|
40
|
+
* Added a VERSION constant
|
41
|
+
* Modified extconf.rb script, including a bugfix for solaris
|
42
|
+
* Added a test suite (for those with testunit installed)
|
43
|
+
* Removed the sys-uname requirement
|
44
|
+
* Changelog and Manifest are now CHANGES and MANIFEST, respectively
|
45
|
+
* Minor internal layout changes
|
46
|
+
* rd2 documentation removed from C source files and put into 'doc'
|
47
|
+
directory
|
48
|
+
|
49
|
+
== 0.3.1 - 6-Jan-2003
|
50
|
+
* Fix to make code C89 compliant so that older compilers don't choke.
|
51
|
+
* Added a VERSION class method
|
52
|
+
* Added a copyright notice
|
53
|
+
* Moved README into doc/host.txt
|
54
|
+
* Minor doc changes
|
55
|
+
* Fixed extconf.rb file to include socket lib for Solaris. This was
|
56
|
+
in 0.2.0 and was mistakenly left out of 0.3.0.
|
57
|
+
|
58
|
+
== 0.3.0 - 28-Oct-2002
|
59
|
+
* Reentrant (thread-safe) support added for ip_addr() method (for Linux,
|
60
|
+
FreeBSD and Solaris currently).
|
61
|
+
* The file layout changed so that each platform has its own source file.
|
62
|
+
This was done because different platforms have different implementations
|
63
|
+
of gethostbyname_r(), if they have them at all. Some platforms (e.g.
|
64
|
+
FreeBSD) use a different function altogether.
|
65
|
+
* The file generic.c is used to create the source if the platform is not
|
66
|
+
currently supported, or if gethostbyname_r() isn't found.
|
67
|
+
* The FreeBSD implementation uses getipnodebyname() instead of
|
68
|
+
gethostbyname(), if possible. According to the man page, it's thread
|
69
|
+
safe.
|
70
|
+
* Modifications to the extconf.rb file based on the above changes.
|
71
|
+
* Added a default value of 16 for INET_ADDRSTRLEN.
|
72
|
+
* Added a README file.
|
73
|
+
|
74
|
+
== 0.2.0 - 1-Sep-2002
|
75
|
+
* Added HostException and HostAddressException classes. These are raised
|
76
|
+
in the event the gethostname or gethostbyname call fails, respectively.
|
77
|
+
* Removed some unnecessary (and warning-causing) free calls.
|
78
|
+
* Added an INSTALL file (installation instructions removed from core doc).
|
79
|
+
|
80
|
+
== 0.1.2 - 9-Aug-2002
|
81
|
+
* Got the BSD support working properly this time. Thanks to Sean
|
82
|
+
Chittenden for providing BSD access.
|
83
|
+
|
84
|
+
== 0.1.1 - 21-Jun-2002
|
85
|
+
* Fixed a bug that would cause the ip_addr to segfault on some
|
86
|
+
operating systems. Apparently ,trying to free memory on a
|
87
|
+
null pointer is a bad thing. Hey, Solaris didn't complain!
|
88
|
+
Thanks go to Han Holl for the spot.
|
89
|
+
* On *BSD systems the 'netinet/in.h' file is now included (via
|
90
|
+
the makefile). Thanks go to Magnus Stahre for the spot and
|
91
|
+
the fix.
|
92
|
+
* Changed the version number to be more "ruby compliant"
|
93
|
+
|
94
|
+
== 0.01 * 11-Jun-2002
|
95
|
+
* First release!
|
data/MANIFEST
ADDED
data/README
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
= Prerequisites
|
2
|
+
Ruby 1.8.0 or later.
|
3
|
+
Ruby 1.8.2 or later preferred on Windows.
|
4
|
+
|
5
|
+
= Installation
|
6
|
+
== Windows
|
7
|
+
ruby test\tc_host.rb (optional)
|
8
|
+
ruby install.rb
|
9
|
+
|
10
|
+
== Unix
|
11
|
+
ruby extconf.rb
|
12
|
+
make
|
13
|
+
ruby test/tc_host.rb (optional)
|
14
|
+
make install
|
data/doc/host.txt
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
== Description
|
2
|
+
Provides hostname and ip address information for a given host.
|
3
|
+
|
4
|
+
== Synopsis
|
5
|
+
require 'sys/host'
|
6
|
+
include Sys
|
7
|
+
|
8
|
+
p Host.hostname
|
9
|
+
p Host.ip_addr
|
10
|
+
|
11
|
+
# Some platforms
|
12
|
+
Host.info{ |h|
|
13
|
+
p h
|
14
|
+
}
|
15
|
+
|
16
|
+
== Constants
|
17
|
+
VERSION
|
18
|
+
Returns the current version number of this package (as a string)
|
19
|
+
|
20
|
+
== Class Methods
|
21
|
+
Host.hostname
|
22
|
+
Returns the hostname of the current host. This may or not return
|
23
|
+
the FQDN, depending on your system.
|
24
|
+
|
25
|
+
Host.ip_addr
|
26
|
+
Returns a list of IP addresses for the current host (yes, it is
|
27
|
+
possible to have more than one).
|
28
|
+
|
29
|
+
Host.info(host=localhost)
|
30
|
+
Host.info(host=localhost){ |h| ... }
|
31
|
+
Yields a HostInfo struct for each network adapter on 'host', or an array
|
32
|
+
of HostInfo struct's in non-block form. The exact members of this struct
|
33
|
+
vary depending on your platform.
|
34
|
+
|
35
|
+
== Exception Classes
|
36
|
+
HostError < StandardError
|
37
|
+
Raised in the event of a failure for any of the class methods provided
|
38
|
+
with this package. Generally speaking, it means there was a failure in
|
39
|
+
the underlying gethostname() or gethostbyname() calls.
|
40
|
+
|
41
|
+
== Future Plans
|
42
|
+
Add support for IPV6. This will be difficult unless I have access to a
|
43
|
+
system on an IPV6 network. Any help on this front appreciated.
|
44
|
+
|
45
|
+
== Notes
|
46
|
+
The Windows version of this package uses OLE + WMI. The Host.info method
|
47
|
+
returns considerably more information than the *nix versions of this
|
48
|
+
package.
|
49
|
+
|
50
|
+
== Comments and Questions
|
51
|
+
Please direct all comments and/or questions to one of the Forums on the
|
52
|
+
project home page at http://www.rubyforge.org/projects/sysutils.
|
53
|
+
|
54
|
+
== Known Bugs
|
55
|
+
None that I'm aware of.
|
56
|
+
|
57
|
+
Please log any bugs on the project home page at
|
58
|
+
http://www.rubyforge.org/projects/sysutils
|
59
|
+
|
60
|
+
== Acknowledgements
|
61
|
+
Thanks go to Mike Hall, Guy Decoux, and Matz for their help with
|
62
|
+
C extensions in general.
|
63
|
+
|
64
|
+
Thanks also go to Richard Stevens for his excellent Unix programming
|
65
|
+
books.
|
66
|
+
|
67
|
+
== License
|
68
|
+
Ruby's
|
69
|
+
|
70
|
+
== Copyright
|
71
|
+
Copyright 2002-2006, Daniel J. Berger, djberg96 at gmail dot com
|
72
|
+
|
73
|
+
All Rights Reserved. This module is free software. It may be used,
|
74
|
+
redistributed and/or modified under the same terms as Ruby itself.
|
75
|
+
|
76
|
+
== Warranty
|
77
|
+
This package is provided "as is" and without any express or
|
78
|
+
implied warranties, including, without limitation, the implied
|
79
|
+
warranties of merchantability and fitness for a particular purpose.
|
80
|
+
|
81
|
+
== Author
|
82
|
+
Daniel J. Berger
|
83
|
+
djberg96 at gmail dot com
|
84
|
+
imperator on IRC (freenode)
|
85
|
+
|
86
|
+
== See Also
|
87
|
+
gethostbyname, gethostbyname_r, gethostname, hostname (Unix)
|
88
|
+
WMI, OLE (Windows)
|
data/extconf.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require "mkmf"
|
2
|
+
require "ftools"
|
3
|
+
|
4
|
+
# Remove any symlinks that may already exist
|
5
|
+
File.delete('host.c') if File.exists?('host.c')
|
6
|
+
File.delete('constants.h') if File.exists?('constants.h')
|
7
|
+
|
8
|
+
have_func("gethostid")
|
9
|
+
|
10
|
+
case RUBY_PLATFORM
|
11
|
+
when /freebsd/i
|
12
|
+
have_func("getipnodebyname")
|
13
|
+
File.symlink("ext/freebsd.c", "host.c")
|
14
|
+
File.symlink("ext/constants.h", "constants.h")
|
15
|
+
when /sunos|solaris/i
|
16
|
+
have_library("nsl")
|
17
|
+
have_library("socket")
|
18
|
+
have_func("gethostbyname_r", "netdb.h")
|
19
|
+
have_func("gethostent_r", "netdb.h")
|
20
|
+
File.symlink("ext/sunos.c", "host.c")
|
21
|
+
File.symlink("ext/constants.h", "constants.h")
|
22
|
+
when /linux/i
|
23
|
+
have_func("gethostbyname_r", "netdb.h")
|
24
|
+
have_func("gethostent_r", "netdb.h")
|
25
|
+
File.symlink("ext/linux.c", "host.c")
|
26
|
+
File.symlink("ext/constants.h", "constants.h")
|
27
|
+
when /win32|windows|dos|mingw|cygwin/i
|
28
|
+
STDERR.puts "Run the 'install.rb' script to install on Windows systems"
|
29
|
+
else
|
30
|
+
File.symlink("ext/generic.c", "host.c")
|
31
|
+
File.symlink("ext/constants.h", "constants.h")
|
32
|
+
end
|
33
|
+
|
34
|
+
# Rename the windows.rb file to prevent 'make install' from installing it
|
35
|
+
unless RUBY_PLATFORM.match("mswin")
|
36
|
+
if File.exists?('lib/sys/windows.rb')
|
37
|
+
File.rename('lib/sys/windows.rb', 'lib/sys/windows.orig')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
have_func("inet_ntop")
|
42
|
+
|
43
|
+
# Already grabbed this from netdb.h on Solaris
|
44
|
+
unless RUBY_PLATFORM =~ /sunos|solaris/i
|
45
|
+
have_func("gethostent_r")
|
46
|
+
end
|
47
|
+
|
48
|
+
create_makefile("sys/host")
|
data/install.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
################################################
|
2
|
+
# install.rb - for sys-host
|
3
|
+
#
|
4
|
+
# For pure Ruby versions only
|
5
|
+
################################################
|
6
|
+
require 'rbconfig'
|
7
|
+
require 'ftools'
|
8
|
+
include Config
|
9
|
+
install_dir = CONFIG['sitelibdir'] + '/sys'
|
10
|
+
|
11
|
+
file = ""
|
12
|
+
|
13
|
+
case RUBY_PLATFORM
|
14
|
+
when /windows|win32|mingw|cygwin|dos/i
|
15
|
+
file = "lib/os/windows.rb"
|
16
|
+
else
|
17
|
+
STDERR.puts "Use 'extconf.rb/make/make site-install' for this platform"
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
# Create the 'sys' toplevel directory if it doesn't already exist
|
22
|
+
begin
|
23
|
+
unless File.exist?(install_dir)
|
24
|
+
Dir.mkdir(install_dir)
|
25
|
+
end
|
26
|
+
rescue Errno::EACCES => e
|
27
|
+
puts "Unable to create #{install_dir}: #{e}"
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
|
31
|
+
# Finally, copy the file to the appropriate directory
|
32
|
+
begin
|
33
|
+
File.copy(file,"#{install_dir}/host.rb")
|
34
|
+
puts "cp #{file} #{install_dir}/host.rb"
|
35
|
+
rescue Errno::EACCES => e
|
36
|
+
puts "Unable to install cpu.rb to #{install_dir}: #{e}"
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
|
40
|
+
puts "Installation successful"
|
data/lib/sys/host.rb
ADDED
@@ -0,0 +1,244 @@
|
|
1
|
+
require "win32ole"
|
2
|
+
require "socket"
|
3
|
+
require "parsedate"
|
4
|
+
|
5
|
+
module Sys
|
6
|
+
class HostError < StandardError; end
|
7
|
+
class Host
|
8
|
+
VERSION = "0.5.2"
|
9
|
+
fields = %w/
|
10
|
+
arp_always_source_route?
|
11
|
+
arp_use_ether_snap?
|
12
|
+
caption
|
13
|
+
database_path
|
14
|
+
dead_gw_detect_enabled?
|
15
|
+
default_ip_gateway
|
16
|
+
default_tos
|
17
|
+
default_ttl
|
18
|
+
description
|
19
|
+
dhcp_enabled?
|
20
|
+
dhcp_lease_expires
|
21
|
+
dhcp_lease_obtained
|
22
|
+
dhcp_server
|
23
|
+
dns_domain
|
24
|
+
dns_domain_suffix_search_order
|
25
|
+
dns_enabled_for_wins_resolution?
|
26
|
+
dns_host_name
|
27
|
+
dns_server_search_order
|
28
|
+
domain_dns_registration_enabled?
|
29
|
+
forward_buffer_memory
|
30
|
+
full_dns_registration_enabled?
|
31
|
+
gateway_cost_metric
|
32
|
+
igmp_level
|
33
|
+
index
|
34
|
+
ip_address
|
35
|
+
ip_connection_metric
|
36
|
+
ip_enabled?
|
37
|
+
ip_filter_security_enabled?
|
38
|
+
ip_port_security_enabled?
|
39
|
+
ip_sec_permit_ip_protocols
|
40
|
+
ip_sec_permit_tcp_ports
|
41
|
+
ip_sec_permit_udp_ports
|
42
|
+
ip_subnet
|
43
|
+
ip_use_zero_broadcast
|
44
|
+
ipx_address
|
45
|
+
ipx_enabled?
|
46
|
+
ipx_frame_type
|
47
|
+
ipx_media_type
|
48
|
+
ipx_network_number
|
49
|
+
ipx_virtual_net_number
|
50
|
+
keep_alive_interval
|
51
|
+
keep_alive_time
|
52
|
+
mac_address
|
53
|
+
mtu
|
54
|
+
num_forward_packets
|
55
|
+
pmtubh_detect_enabled?
|
56
|
+
pmtu_discovery_enabled?
|
57
|
+
service_name
|
58
|
+
setting_id
|
59
|
+
tcpip_netbios_options
|
60
|
+
tcp_max_connect_retransmissions
|
61
|
+
tcp_max_data_retransmissions
|
62
|
+
tcp_num_connections
|
63
|
+
tcp_use_rfc1122_urgent_pointer?
|
64
|
+
tcp_window_size
|
65
|
+
wins_enable_lm_hosts_lookup?
|
66
|
+
wins_host_lookup_file
|
67
|
+
wins_primary_server
|
68
|
+
wins_scope_id
|
69
|
+
wins_secondary_server
|
70
|
+
/
|
71
|
+
|
72
|
+
HostInfo = Struct.new("HostInfo",*fields)
|
73
|
+
|
74
|
+
def self.info(host=Socket.gethostname)
|
75
|
+
cs = "winmgmts://#{host}/root/cimv2"
|
76
|
+
begin
|
77
|
+
wmi = WIN32OLE.connect(cs)
|
78
|
+
rescue WIN32OLERuntimeError => e
|
79
|
+
raise HostError, e
|
80
|
+
else
|
81
|
+
query = "
|
82
|
+
select * from Win32_NetworkAdapterConfiguration
|
83
|
+
where IPEnabled = True
|
84
|
+
"
|
85
|
+
wmi.ExecQuery(query).each{ |nic|
|
86
|
+
dhcp_expires = nic.DHCPLeaseExpires
|
87
|
+
dhcp_lease_obtained = nic.DHCPLeaseObtained
|
88
|
+
|
89
|
+
if dhcp_expires
|
90
|
+
parsed = ParseDate.parsedate(dhcp_expires)
|
91
|
+
dhcp_expires = Time.mktime(*parsed)
|
92
|
+
end
|
93
|
+
|
94
|
+
if dhcp_lease_obtained
|
95
|
+
parsed = ParseDate.parsedate(dhcp_lease_obtained)
|
96
|
+
dhcp_lease_obtained = Time.mktime(*parsed)
|
97
|
+
end
|
98
|
+
|
99
|
+
igmp_level = nil
|
100
|
+
case nic.IGMPLevel
|
101
|
+
when 0
|
102
|
+
igmp_level = "None"
|
103
|
+
when 1
|
104
|
+
igmp_level = "IP"
|
105
|
+
when 2
|
106
|
+
igmp_level = "IP & IGMP"
|
107
|
+
end
|
108
|
+
|
109
|
+
ipx_frame_type = nil
|
110
|
+
case nic.IPXFrameType
|
111
|
+
when 0
|
112
|
+
ipx_frame_type = "Ethernet II"
|
113
|
+
when 1
|
114
|
+
ipx_frame_type = "Ethernet 802.3"
|
115
|
+
when 2
|
116
|
+
ipx_frame_type = "Ethernet 802.2"
|
117
|
+
when 3
|
118
|
+
ipx_frame_type = "Ethernet SNAP"
|
119
|
+
when 255
|
120
|
+
ipx_frame_type = "AUTO"
|
121
|
+
end
|
122
|
+
|
123
|
+
ipx_media_type = nil
|
124
|
+
case nic.IPXMediaType
|
125
|
+
when 0
|
126
|
+
ipx_media_type = "Ethernet"
|
127
|
+
when 1
|
128
|
+
ipx_media_type = "Token Ring"
|
129
|
+
when 2
|
130
|
+
ipx_media_type = "FDDI"
|
131
|
+
when 8
|
132
|
+
ipx_media_type = "ARCNET"
|
133
|
+
end
|
134
|
+
|
135
|
+
tcpip_netbios_options = nil
|
136
|
+
case nic.TcpipNetbiosOptions
|
137
|
+
when 0
|
138
|
+
tcpip_netbios_options = "EnableNetbiosViaDhcp"
|
139
|
+
when 1
|
140
|
+
tcpip_netbios_options = "EnableNetbios"
|
141
|
+
when 2
|
142
|
+
tcpip_netbios_options = "DisableNetbios"
|
143
|
+
end
|
144
|
+
|
145
|
+
yield HostInfo.new(
|
146
|
+
nic.ArpAlwaysSourceRoute,
|
147
|
+
nic.ArpUseEtherSNAP,
|
148
|
+
nic.Caption,
|
149
|
+
nic.DatabasePath,
|
150
|
+
nic.DeadGWDetectEnabled,
|
151
|
+
nic.DefaultIPGateway,
|
152
|
+
nic.DefaultTOS,
|
153
|
+
nic.DefaultTTL,
|
154
|
+
nic.Description,
|
155
|
+
nic.DHCPEnabled,
|
156
|
+
dhcp_expires,
|
157
|
+
dhcp_lease_obtained,
|
158
|
+
nic.DHCPServer,
|
159
|
+
nic.DNSDomain,
|
160
|
+
nic.DNSDomainSuffixSearchOrder,
|
161
|
+
nic.DNSEnabledForWINSResolution,
|
162
|
+
nic.DNSHostName,
|
163
|
+
nic.DNSServerSearchOrder,
|
164
|
+
nic.DomainDNSRegistrationEnabled,
|
165
|
+
nic.ForwardBufferMemory,
|
166
|
+
nic.FullDNSRegistrationEnabled,
|
167
|
+
nic.GatewayCostMetric,
|
168
|
+
igmp_level,
|
169
|
+
nic.Index,
|
170
|
+
nic.IpAddress,
|
171
|
+
nic.IPConnectionMetric,
|
172
|
+
nic.IPEnabled,
|
173
|
+
nic.IPFilterSecurityEnabled,
|
174
|
+
nic.IPPortSecurityEnabled,
|
175
|
+
nic.IPSecPermitIPProtocols,
|
176
|
+
nic.IPSecPermitTCPPorts,
|
177
|
+
nic.IPSecPermitUDPPorts,
|
178
|
+
nic.IPSubnet,
|
179
|
+
nic.IPUseZeroBroadcast,
|
180
|
+
nic.IPXAddress,
|
181
|
+
nic.IPXEnabled,
|
182
|
+
ipx_frame_type,
|
183
|
+
ipx_media_type,
|
184
|
+
nic.IPXNetworkNumber,
|
185
|
+
nic.IPXVirtualNetNumber,
|
186
|
+
nic.KeepAliveInterval,
|
187
|
+
nic.KeepAliveTime,
|
188
|
+
nic.MacAddress,
|
189
|
+
nic.MTU,
|
190
|
+
nic.NumForwardPackets,
|
191
|
+
nic.PMTUBHDetectEnabled,
|
192
|
+
nic.PMTUDiscoveryEnabled,
|
193
|
+
nic.ServiceName,
|
194
|
+
nic.SettingID,
|
195
|
+
tcpip_netbios_options,
|
196
|
+
nic.TcpMaxConnectRetransmissions,
|
197
|
+
nic.TcpMaxDataRetransmissions,
|
198
|
+
nic.TcpNumConnections,
|
199
|
+
nic.TcpUseRFC1122UrgentPointer,
|
200
|
+
nic.TcpWindowSize,
|
201
|
+
nic.WINSEnableLMHostsLookup,
|
202
|
+
nic.WINSHostLookupFile,
|
203
|
+
nic.WINSPrimaryServer,
|
204
|
+
nic.WINSScopeID,
|
205
|
+
nic.WINSSecondaryServer
|
206
|
+
)
|
207
|
+
}
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def self.hostname
|
212
|
+
begin
|
213
|
+
wmi = WIN32OLE.connect("winmgmts://")
|
214
|
+
rescue WIN32OLERuntimeError => e
|
215
|
+
raise HostError, e
|
216
|
+
else
|
217
|
+
query = "
|
218
|
+
select * from Win32_NetworkAdapterConfiguration
|
219
|
+
where IPEnabled = True
|
220
|
+
"
|
221
|
+
wmi.ExecQuery(query).each{ |nic|
|
222
|
+
return nic.DNSHostName
|
223
|
+
}
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def self.ip_addr
|
228
|
+
begin
|
229
|
+
wmi = WIN32OLE.connect("winmgmts://")
|
230
|
+
rescue WIN32OLERuntimeError => e
|
231
|
+
raise HostError, e
|
232
|
+
else
|
233
|
+
query = "
|
234
|
+
select * from Win32_NetworkAdapterConfiguration
|
235
|
+
where IPEnabled = True
|
236
|
+
"
|
237
|
+
wmi.ExecQuery(query).each{ |nic|
|
238
|
+
return nic.IPAddress
|
239
|
+
}
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
end
|
data/sys-host.gemspec
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
|
3
|
+
spec = Gem::Specification.new do |gem|
|
4
|
+
gem.name = "sys-host"
|
5
|
+
gem.version = "0.5.2"
|
6
|
+
gem.author = "Daniel J. Berger"
|
7
|
+
gem.email = "djberg96@gmail.com"
|
8
|
+
gem.homepage = "http://www.rubyforge.org/projects/sysutils"
|
9
|
+
gem.platform = Gem::Platform::RUBY
|
10
|
+
gem.summary = "Provides hostname and ip address info for a given host"
|
11
|
+
gem.description = "Provides hostname and ip address info for a given host"
|
12
|
+
gem.test_file = "test/tc_host.rb"
|
13
|
+
gem.has_rdoc = true
|
14
|
+
gem.extra_rdoc_files = ["CHANGES", "README", "MANIFEST"]
|
15
|
+
gem.rubyforge_project = "sysutils"
|
16
|
+
files = Dir["doc/*"] + Dir["test/*"] + Dir["[A-Z]*"]
|
17
|
+
files.delete_if{ |item| item.include?("CVS") }
|
18
|
+
gem.files = files
|
19
|
+
end
|
20
|
+
|
21
|
+
if $0 == __FILE__
|
22
|
+
if RUBY_PLATFORM.match("mswin")
|
23
|
+
File.rename("lib/sys/windows.rb", "lib/sys/host.rb")
|
24
|
+
spec.required_ruby_version = '>= 1.8.2'
|
25
|
+
spec.files += ["lib/sys/host.rb"]
|
26
|
+
spec.platform = Gem::Platform::WIN32
|
27
|
+
else
|
28
|
+
spec.required_ruby_version = '>= 1.8.0'
|
29
|
+
spec.extensions = ["extconf.rb"]
|
30
|
+
|
31
|
+
case RUBY_PLATFORM
|
32
|
+
when /linux/i
|
33
|
+
file = 'ext/linux.c'
|
34
|
+
when /sunos|solaris/i
|
35
|
+
file = 'ext/sunos.c'
|
36
|
+
when /freebsd/i
|
37
|
+
file = 'ext/freebsd.c'
|
38
|
+
else
|
39
|
+
file = 'ext/generic.c'
|
40
|
+
end
|
41
|
+
|
42
|
+
spec.files += ['ext/constants.h', file]
|
43
|
+
end
|
44
|
+
|
45
|
+
Gem.manage_gems
|
46
|
+
Gem::Builder.new(spec).build
|
47
|
+
end
|
data/test/tc_host.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#########################################
|
2
|
+
# tc_host.rb
|
3
|
+
#
|
4
|
+
# Test suite for sys-host, all platforms
|
5
|
+
#########################################
|
6
|
+
base = File.basename(Dir.pwd)
|
7
|
+
if base == "test" || base =~ /host.*/
|
8
|
+
require "ftools"
|
9
|
+
Dir.chdir("..") if base == "test"
|
10
|
+
Dir.mkdir("sys") unless File.exists?("sys")
|
11
|
+
|
12
|
+
if RUBY_PLATFORM.match("mswin")
|
13
|
+
File.copy("lib/windows.rb", "sys/host.rb")
|
14
|
+
else
|
15
|
+
case RUBY_PLATFORM
|
16
|
+
when /hpux/i
|
17
|
+
File.copy("host.sl","sys")
|
18
|
+
when /osx|darwin|mac/i
|
19
|
+
File.copy("host.bundle","sys")
|
20
|
+
else
|
21
|
+
File.copy("host.so","sys")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
$LOAD_PATH.unshift Dir.pwd
|
26
|
+
Dir.chdir("test") rescue nil
|
27
|
+
end
|
28
|
+
|
29
|
+
require "sys/host"
|
30
|
+
require "test/unit"
|
31
|
+
include Sys
|
32
|
+
|
33
|
+
class TC_Host < Test::Unit::TestCase
|
34
|
+
def test_version
|
35
|
+
assert_equal("0.5.2",Host::VERSION)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_hostname
|
39
|
+
assert_respond_to(Host, :hostname)
|
40
|
+
assert_nothing_raised{ Host.hostname }
|
41
|
+
assert_kind_of(String, Host.hostname)
|
42
|
+
assert_equal(`hostname`.chomp, Host.hostname) # sanity check
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_ip_addr
|
46
|
+
assert_respond_to(Host, :ip_addr)
|
47
|
+
assert_nothing_raised{ Host.ip_addr }
|
48
|
+
assert_kind_of(Array, Host.ip_addr)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_info
|
52
|
+
if RUBY_PLATFORM =~ /mswin|solaris|linux/i
|
53
|
+
assert_respond_to(Host, :info)
|
54
|
+
assert_nothing_raised{ Host.info }
|
55
|
+
assert_kind_of(Array, Host.info)
|
56
|
+
assert_kind_of(Struct::HostInfo, Host.info.first)
|
57
|
+
assert_nil(Host.info{ })
|
58
|
+
assert_nothing_raised{ 1000.times{ Host.info } }
|
59
|
+
else
|
60
|
+
puts "The 'test_info' test was skipped on this platform"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: sys-host
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.5.2
|
7
|
+
date: 2006-11-18 00:00:00 -07:00
|
8
|
+
summary: Provides hostname and ip address info for a given host
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: djberg96@gmail.com
|
12
|
+
homepage: http://www.rubyforge.org/projects/sysutils
|
13
|
+
rubyforge_project: sysutils
|
14
|
+
description: Provides hostname and ip address info for a given host
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.2
|
24
|
+
version:
|
25
|
+
platform: mswin32
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Daniel J. Berger
|
31
|
+
files:
|
32
|
+
- doc/host.txt
|
33
|
+
- test/tc_host.rb
|
34
|
+
- CHANGES
|
35
|
+
- doc
|
36
|
+
- examples
|
37
|
+
- ext
|
38
|
+
- extconf.rb
|
39
|
+
- install.rb
|
40
|
+
- lib
|
41
|
+
- MANIFEST
|
42
|
+
- README
|
43
|
+
- sys-host.gemspec
|
44
|
+
- test
|
45
|
+
- lib/sys/host.rb
|
46
|
+
test_files:
|
47
|
+
- test/tc_host.rb
|
48
|
+
rdoc_options: []
|
49
|
+
|
50
|
+
extra_rdoc_files:
|
51
|
+
- CHANGES
|
52
|
+
- README
|
53
|
+
- MANIFEST
|
54
|
+
executables: []
|
55
|
+
|
56
|
+
extensions: []
|
57
|
+
|
58
|
+
requirements: []
|
59
|
+
|
60
|
+
dependencies: []
|
61
|
+
|