| #!/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 |
| |
| } |