proc ifConfig { args } {
if { [ catch {
set interfaces [ list ]
if { [ file executable /usr/sbin/ifconfig ] } {
catch { ::exec /usr/sbin/ifconfig -a } data
} elseif { [ file executable /sbin/ifconfig ] } {
catch { ::exec /sbin/ifconfig -a } data
} else {
return -code error "can't find 'ifconfig' executable!"
}
set fid [ open /etc/hosts r ]
set hostdata [ read $fid [ file size /etc/hosts ] ]
::close $fid
foreach line [ split $hostdata "\n" ] {
array set hosts \
[ list [ lindex $line 0 ] [ lrange $line 1 end ] ]
}
foreach line [ split $data "\n" ] {
regexp {^(lo |[a-z]+\d+)} $line -> if
set if [ string trim $if ]
if { [ regexp {^\s+inet\s+(?:addr:)?(\S+)} $line -> ip ] } {
if { [ info exists hosts($ip) ] } {
lappend interfaces [ list $if $ip $hosts($ip) ]
} else {
lappend interfaces [ list $if $ip dhcp ]
}
}
}
} err ] } {
return -code error "ifConfig: $err"
}
return $interfaces
}