interfaces="eth0 eth1 eth2"
function push_data()
{
cmd="echo $1 $2 | curl --data-binary @- -g \
http://$s/pushgateway/metrics/job/pushgateway"
cmd+="/instance/$name"
cmd+="/mac/$mac"
echo "$cmd"
}
function wanipAddr()
{
for inf in $interfaces
do
ipv4=`ip -4 a show dev $inf 2>/dev/null | grep global | \
head -1 | tr '/' ' ' | awk '{printf "%s", $2}'`
ipv6=`ip -6 a show dev $inf 2>/dev/null | grep global | \
head -1 | tr '/' ' ' | awk '{printf "%s", $2}'`
if [[ -n $ipv4 || -n $ipv6 ]]; then
[[ -z $ipv4 ]] && ipv4="0.0.0.0"
push_ipv4 $inf $ipv4
[[ -z $ipv6 ]] && ipv6="0:0:0:0:0:0:0:0"
ipv6=`ipv6_to_dec $ipv6`
push_ipv6 $inf $ipv6
fi
done
}
function push_ipv4() {
inf=$1
ipv4=$2
hex=(${ipv4//./ })
for k in ${!hex[@]}; do
pos=`expr $k + 1`
push_data ip4_${inf}_${pos} ${hex[$k]}
done
}
function ipv6_to_dec() {
ipv6=$1
if [[ $ipv6 =~ '::' ]]; then
if [[ $ipv6 == '::1' ]]; then
echo "0:0:0:0:0:0:0:1"
else
dotsnum=$(echo $ipv6 | grep -o ":" | wc -l)
zero_group_num=$(expr 8 - $dotsnum)
zero_group=`printf '%0.s:0000' $(seq 1 $zero_group_num)`
standard=`echo $ipv6 | awk -v FS="::" -v OFS="$zero_group:" '{print $1,$2}'`
echo "$standard"
fi
elif [[ $ipv6 =~ ':' ]]; then
echo "$ipv6"
else
echo "0:0:0:0:0:0:0:0"
fi
}
function push_ipv6() {
inf=$1
ipv6=$2
hex=(${ipv6//:/ })
for k in ${!hex[@]}; do
h=$(echo -e ${hex[$k]} | sed -r 's/0*([0-9a-fA-F])/\1/')
dec=$((16
pos=`expr $k + 1`
push_data ip6_${inf}_${pos} $dec
done
}
wanipAddr