blob: 21d352ad2f25eb995a8766e892b9f5b7c64840fb [file] [log] [blame]
Michael Walsha4d92102018-03-26 16:59:05 -05001#!/usr/bin/wish
2
Michael Walsh410b1782019-10-22 15:56:18 -05003# This file provides valuable host and IP manipulation procedures such as get_host_name_ip, etc.
Michael Walsha4d92102018-03-26 16:59:05 -05004
Joy Onyerikwufcb8aea2018-03-21 14:57:44 -05005my_source [list cmd.tcl data_proc.tcl]
Michael Walsha4d92102018-03-26 16:59:05 -05006
7
8proc get_host_name_ip {host {quiet 1}} {
9
Michael Walsh410b1782019-10-22 15:56:18 -050010 # Get the host name, short host name and the IP address and return them as a list.
11 # If this procedure is unable to get the requested information, it will print an error message to stderr
12 # and return blank values.
Michael Walsha4d92102018-03-26 16:59:05 -050013
14 # Example call:
15 # lassign [get_host_name_ip $host] host_name short_host_name ip_address
16
17 # Description of argument(s):
18 # host The host name or IP address to be obtained.
Michael Walsh410b1782019-10-22 15:56:18 -050019 # quiet Indicates whether status information should be printed.
Michael Walsha4d92102018-03-26 16:59:05 -050020
Joy Onyerikwufcb8aea2018-03-21 14:57:44 -050021 set print_output [expr !$quiet]
Michael Walsha4d92102018-03-26 16:59:05 -050022 lassign [cmd_fnc "host $host" "${quiet}" "" "${print_output}"] rc out_buf
23 if { $rc != 0 } { return [list "" "" ""]}
24
25 if { [regexp "has address" $out_buf] } {
26 # Host is host name.
27 # Format of output:
28 # hostname.bla.com has address n.n.n.n.
29 lassign [split $out_buf " "] host_name fill1 fill2 ip_address
30 } elseif { [regexp "domain name pointer" $out_buf] } {
31 # Host is IP address.
32 # Format of output:
33 # n.n.n.n.in-addr.arpa domain name pointer hostname.bla.com.
34 set ip_address ${host}
35 lassign [split $out_buf " "] fill0 fill1 fill2 fill3 host_name
36 set host_name [string trimright $host_name {.}]
37 }
38 # Create the short name from the host name.
39 lassign [split $host_name "."] short_host_name
40
41 return [list ${host_name} ${short_host_name} ${ip_address}]
42
43}
44
Joy Onyerikwufcb8aea2018-03-21 14:57:44 -050045
46proc get_host_domain {host username password {quiet 1}} {
47
48 # Return the domain name of the host.
49
50 # If this procedure is unable to get the requested information, it will
51 # print an error message to stderr and return a blank value.
52
53 # Description of argument(s):
54 # host The host name or IP address of the system
55 # from which the information is to be
56 # obtained.
57 # username The host username.
58 # password The host password.
59 # quiet Indicates whether status information
60 # should be printed.
61
62 set print_output [expr !$quiet]
63 lassign [cmd_fnc \
64 "sshpass -p $password ssh -o StrictHostKeyChecking=no -k $username@$host\
65 'dnsdomainname'" ${quiet} "" ${print_output}] rc domain
66 return $domain
67
68}
69
70
71proc get_host_name_servers {host username password {quiet 1}} {
72
73 # Return a list of hostname or IP addresses.
74
75 # If this procedure is unable to get the requested information, it will
76 # print an error message to stderr and return a blank value.
77
78 # Description of argument(s):
79 # host The host name or IP address of the system
80 # from which the information is to be
81 # obtained.
82 # username The host username.
83 # password The host password.
84 # quiet Indicates whether status information
85 # should be printed.
86
87 set print_output [expr !$quiet]
88 lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\
89 $username@$host\
90 grep -E '^[ ]*nameserver[ ]+' /etc/resolv.conf | awk '{print \$2}'"\
91 ${quiet} "" ${print_output}] rc name_servers
92 return [split $name_servers "\n"]
93
94}
95
96
97proc get_host_mac_address {host username password {interface {}} {quiet 1}} {
98
99 # Return the mac address of the host given a specific interface.
100
101 # If "interface" is left blank, it is set to the default interface.
102
103 # If this procedure is unable to get the requested information, it will
104 # print an error message to stderr and return a blank value.
105
106 # Description of argument(s):
107 # host The host name or IP address of the system
108 # from which the information is to be
109 # obtained.
110 # username The host username.
111 # password The host password.
112 # interface The target interface. Defaults to default
113 # interface if not set.
114 # quiet Indicates whether status information
115 # should be printed.
116
117 set print_output [expr !$quiet]
118 set_var_default interface [get_host_default_interface $host $username\
119 $password $quiet]
120 lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\
121 $username@$host 'cat /sys/class/net/$interface/address'" \
122 ${quiet} "" ${print_output}] rc mac_address
123 return $mac_address
124
125}
126
127
128proc get_host_gateway {host username password {quiet 1}} {
129
130 # Return the gateway of the host.
131
132 # If this procedure is unable to get the requested information, it will
133 # print an error message to stderr and return a blank value.
134
135 # Description of argument(s):
136 # host The host name or IP address of the system
137 # from which the information is to be
138 # obtained.
139 # username The host username.
140 # password The host password.
141 # quiet Indicates whether status information
142 # should be printed.
143
144 set print_output [expr !$quiet]
145 lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\
146 $username@$host ip route | grep -i '^default' | awk '{print \$3}'" \
147 ${quiet} "" ${print_output}] rc gateway
148 return $gateway
149
150}
151
152
153proc get_host_default_interface {host username password {quiet 1} } {
154
155 # Return the default interface of the host interface.
156
157 # If this procedure is unable to get the requested information, it will
158 # print an error message to stderr and return a blank value.
159
160 # Description of argument(s):
161 # host The host name or IP address of the system
162 # from which the information is to be
163 # obtained.
164 # username The host username.
165 # password The host password.
166 # quiet Indicates whether status information
167 # should be printed.
168
169 set print_output [expr !$quiet]
170 lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\
171 $username@$host ip route | grep -i '^default' | awk '{print \$5}'" \
172 ${quiet} "" ${print_output}] rc interface
173 return $interface
174
175}
176
177
178proc get_host_netmask {host username password {interface {}} {quiet 1}} {
179
180 # Return the subnet mask for the host.
181
182 # If this procedure is unable to get the requested information, it will
183 # print an error message to stderr and return a blank value.
184
185 # Description of argument(s):
186 # host The host name or IP address of the system
187 # from which the information is to be
188 # obtained.
189 # username The host username.
190 # password The host password.
191 # interface The target interface. Defaults to default
192 # interface if not set.
193 # quiet Indicates whether status information
194 # should be printed.
195
196 set print_output [expr !$quiet]
197 set sshpass_cmd \
198 "sshpass -p $password ssh -o StrictHostKeyChecking=no -k $username@$host"
199 set_var_default interface [get_host_default_interface $host $username\
200 $password $quiet]
201 lassign [cmd_fnc \
202 "$sshpass_cmd ifconfig $interface | grep -i mask"\
203 ${quiet} "" ${print_output}] rc out_buf
204 if {[string match *broadcast* $out_buf]} {
205 set mask_cmd "ifconfig $interface | grep ask | awk '{print \$4}'"
206 } else {
207 set mask_cmd "ifconfig $interface | grep ask | cut -d ':' -f 4"
208 }
209 lassign [cmd_fnc "$sshpass_cmd $mask_cmd" $quiet] rc netmask
210 return $netmask
211
212}