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