|  | #!/usr/bin/wish | 
|  |  | 
|  | # This file provides valuable host and IP manipulation procedures such as get_host_name_ip, etc. | 
|  |  | 
|  | my_source [list cmd.tcl data_proc.tcl] | 
|  |  | 
|  |  | 
|  | proc get_host_name_ip {host {quiet 1}} { | 
|  |  | 
|  | # Get the host name, short host name and the IP address and return them as a list. | 
|  | # If this procedure is unable to get the requested information, it will print an error message to stderr | 
|  | # and return blank values. | 
|  |  | 
|  | # Example call: | 
|  | # lassign [get_host_name_ip $host] host_name short_host_name ip_address | 
|  |  | 
|  | # Description of argument(s): | 
|  | # host                            The host name or IP address to be obtained. | 
|  | # quiet                           Indicates whether status information should be printed. | 
|  |  | 
|  | set print_output [expr !$quiet] | 
|  | lassign [cmd_fnc "host $host" "${quiet}" "" "${print_output}"] rc out_buf | 
|  | if { $rc != 0 } { return [list "" "" ""]} | 
|  |  | 
|  | if { [regexp "has address" $out_buf] } { | 
|  | # Host is host name. | 
|  | # Format of output: | 
|  | # hostname.bla.com has address n.n.n.n. | 
|  | lassign [split $out_buf " "] host_name fill1 fill2 ip_address | 
|  | } elseif { [regexp "domain name pointer" $out_buf] } { | 
|  | # Host is IP address. | 
|  | # Format of output: | 
|  | # n.n.n.n.in-addr.arpa domain name pointer hostname.bla.com. | 
|  | set ip_address ${host} | 
|  | lassign [split $out_buf " "] fill0 fill1 fill2 fill3 host_name | 
|  | set host_name [string trimright $host_name {.}] | 
|  | } | 
|  | # Create the short name from the host name. | 
|  | lassign [split $host_name "."] short_host_name | 
|  |  | 
|  | return [list ${host_name} ${short_host_name} ${ip_address}] | 
|  |  | 
|  | } | 
|  |  | 
|  |  | 
|  | proc get_host_domain {host username password {quiet 1}} { | 
|  |  | 
|  | # Return the domain name of the host. | 
|  |  | 
|  | # If this procedure is unable to get the requested information, it will | 
|  | # print an error message to stderr and return a blank value. | 
|  |  | 
|  | # Description of argument(s): | 
|  | # host                            The host name or IP address of the system | 
|  | #                                 from which the information is to be | 
|  | #                                 obtained. | 
|  | # username                        The host username. | 
|  | # password                        The host password. | 
|  | # quiet                           Indicates whether status information | 
|  | #                                 should be printed. | 
|  |  | 
|  | set print_output [expr !$quiet] | 
|  | lassign [cmd_fnc \ | 
|  | "sshpass -p $password ssh -o StrictHostKeyChecking=no -k $username@$host\ | 
|  | 'dnsdomainname'" ${quiet} "" ${print_output}] rc domain | 
|  | return $domain | 
|  |  | 
|  | } | 
|  |  | 
|  |  | 
|  | proc get_host_name_servers {host username password {quiet 1}} { | 
|  |  | 
|  | # Return a list of hostname or IP addresses. | 
|  |  | 
|  | # If this procedure is unable to get the requested information, it will | 
|  | # print an error message to stderr and return a blank value. | 
|  |  | 
|  | # Description of argument(s): | 
|  | # host                            The host name or IP address of the system | 
|  | #                                 from which the information is to be | 
|  | #                                 obtained. | 
|  | # username                        The host username. | 
|  | # password                        The host password. | 
|  | # quiet                           Indicates whether status information | 
|  | #                                 should be printed. | 
|  |  | 
|  | set print_output [expr !$quiet] | 
|  | lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\ | 
|  | $username@$host\ | 
|  | grep -E '^[ ]*nameserver[ ]+' /etc/resolv.conf | awk '{print \$2}'"\ | 
|  | ${quiet} "" ${print_output}] rc name_servers | 
|  | return [split $name_servers "\n"] | 
|  |  | 
|  | } | 
|  |  | 
|  |  | 
|  | proc get_host_mac_address {host username password {interface {}} {quiet 1}} { | 
|  |  | 
|  | # Return the mac address of the host given a specific interface. | 
|  |  | 
|  | # If "interface" is left blank, it is set to the default interface. | 
|  |  | 
|  | # If this procedure is unable to get the requested information, it will | 
|  | # print an error message to stderr and return a blank value. | 
|  |  | 
|  | # Description of argument(s): | 
|  | # host                            The host name or IP address of the system | 
|  | #                                 from which the information is to be | 
|  | #                                 obtained. | 
|  | # username                        The host username. | 
|  | # password                        The host password. | 
|  | # interface                       The target interface. Defaults to default | 
|  | #                                 interface if not set. | 
|  | # quiet                           Indicates whether status information | 
|  | #                                 should be printed. | 
|  |  | 
|  | set print_output [expr !$quiet] | 
|  | set_var_default interface [get_host_default_interface $host $username\ | 
|  | $password $quiet] | 
|  | lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\ | 
|  | $username@$host 'cat /sys/class/net/$interface/address'" \ | 
|  | ${quiet} "" ${print_output}] rc mac_address | 
|  | return $mac_address | 
|  |  | 
|  | } | 
|  |  | 
|  |  | 
|  | proc get_host_gateway {host username password {quiet 1}} { | 
|  |  | 
|  | # Return the gateway of the host. | 
|  |  | 
|  | # If this procedure is unable to get the requested information, it will | 
|  | # print an error message to stderr and return a blank value. | 
|  |  | 
|  | # Description of argument(s): | 
|  | # host                            The host name or IP address of the system | 
|  | #                                 from which the information is to be | 
|  | #                                 obtained. | 
|  | # username                        The host username. | 
|  | # password                        The host password. | 
|  | # quiet                           Indicates whether status information | 
|  | #                                 should be printed. | 
|  |  | 
|  | set print_output [expr !$quiet] | 
|  | lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\ | 
|  | $username@$host ip route | grep -i '^default' | awk '{print \$3}'" \ | 
|  | ${quiet} "" ${print_output}] rc gateway | 
|  | return $gateway | 
|  |  | 
|  | } | 
|  |  | 
|  |  | 
|  | proc get_host_default_interface {host username password {quiet 1} } { | 
|  |  | 
|  | # Return the default interface of the host interface. | 
|  |  | 
|  | # If this procedure is unable to get the requested information, it will | 
|  | # print an error message to stderr and return a blank value. | 
|  |  | 
|  | # Description of argument(s): | 
|  | # host                            The host name or IP address of the system | 
|  | #                                 from which the information is to be | 
|  | #                                 obtained. | 
|  | # username                        The host username. | 
|  | # password                        The host password. | 
|  | # quiet                           Indicates whether status information | 
|  | #                                 should be printed. | 
|  |  | 
|  | set print_output [expr !$quiet] | 
|  | lassign [cmd_fnc "sshpass -p $password ssh -o StrictHostKeyChecking=no -k\ | 
|  | $username@$host ip route | grep -i '^default' | awk '{print \$5}'" \ | 
|  | ${quiet} "" ${print_output}] rc interface | 
|  | return $interface | 
|  |  | 
|  | } | 
|  |  | 
|  |  | 
|  | proc get_host_netmask {host username password {interface {}} {quiet 1}} { | 
|  |  | 
|  | # Return the subnet mask for the host. | 
|  |  | 
|  | # If this procedure is unable to get the requested information, it will | 
|  | # print an error message to stderr and return a blank value. | 
|  |  | 
|  | # Description of argument(s): | 
|  | # host                            The host name or IP address of the system | 
|  | #                                 from which the information is to be | 
|  | #                                 obtained. | 
|  | # username                        The host username. | 
|  | # password                        The host password. | 
|  | # interface                       The target interface. Defaults to default | 
|  | #                                 interface if not set. | 
|  | # quiet                           Indicates whether status information | 
|  | #                                 should be printed. | 
|  |  | 
|  | set print_output [expr !$quiet] | 
|  | set sshpass_cmd \ | 
|  | "sshpass -p $password ssh -o StrictHostKeyChecking=no -k $username@$host" | 
|  | set_var_default interface [get_host_default_interface $host $username\ | 
|  | $password $quiet] | 
|  | lassign [cmd_fnc \ | 
|  | "$sshpass_cmd ifconfig $interface | grep -i mask"\ | 
|  | ${quiet} "" ${print_output}] rc out_buf | 
|  | if {[string match *broadcast* $out_buf]} { | 
|  | set mask_cmd "ifconfig $interface | grep ask | awk '{print \$4}'" | 
|  | } else { | 
|  | set mask_cmd "ifconfig $interface | grep ask | cut -d ':' -f 4" | 
|  | } | 
|  | lassign [cmd_fnc "$sshpass_cmd $mask_cmd" $quiet] rc netmask | 
|  | return $netmask | 
|  |  | 
|  | } |