}
sys_interfaces_all() {
-(
- if which ip > /dev/null; then
- ip link | awk -F'(: )|@' '/^[^ ]/{print $2}'
-
- elif which ifconfig > /dev/null; then
- #ifconfig | awk '/^[^ ]/{print $1}'
- ifconfig | awk '/^[a-z][^:]+: flags=[0-9]+<[A-Z]+,BROADCAST/{sub(":$","",$1);print $1}'
-
- fi
-) | awk '!x[$0]++ && $1 !~ /^(lo)$/ {print}' | while read int; do
-
- infos=$( (ip addr show "$int" || ifconfig "$int") 2> /dev/null )
-
- mac=$(echo "$infos" | awk '/ether ([^ ]+)/{print $2}')
- [ -z "$mac" ] && continue
- ip=$(echo "$infos" | awk '/^[\t ]*inet /{sub("^[^0-9]*","",$2); sub("/[0-9]+","",$2); {print $2; exit; printf $2" "}}')
-
- printf '%s\t%s\t%s\n' "$int" "$mac" "$ip"
-done
+ ip -d -j a | sed "s/ifindex/\nifindex/g" | awk '\
+BEGIN{i=0; j=0}\
+/"link_type":"loopback"/{next}\
+/"info_kind":"veth"/{next}\
+0{print $0; next}
+i!=j{print ""}\
+/"ifname":/{i++}\
+match($0, /"ifname":"([^"]+)"/, m) {printf "%s\t", m[1]}\
+match($0, /"address":"([^"]+)"/, m) {printf "%s\t", m[1]}\
+match($0, /"local":"([0-9\.]+)"/, m) {printf "%s", m[1]}\
+0{print "";print i}
+'
}
sys_ips() {