【pushgateway】shell 脚本获取设备多网口IPv4或IPv6地址,并且推送到pushgateway

#!/bin/bash
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"
        # eval "$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
}

# 改为标准格式ipv6格式,并用10进制表示
# 先看有几个位置需要补0;8-“:的数量”
# 再在位置中补":0000",并将原始ip中的 ::替换为新的值
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)
      
      # 计算需要补充几个0000
      zero_group_num=$(expr 8 - $dotsnum)
      zero_group=`printf '%0.s:0000' $(seq 1 $zero_group_num)`
      
      # 使用多个 :0000 替换 :: ,IP转为 标准IPv6地址格式
      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 
    # 去除字符串开头的 0
    h=$(echo -e ${hex[$k]} | sed -r 's/0*([0-9a-fA-F])/\1/')
    # 十六进制转十进制
    dec=$((16#"$h"))
    pos=`expr $k + 1`
    push_data ip6_${inf}_${pos} $dec
  done
}

wanipAddr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值