ネットワークデバイスの種類/名前に関係なく、基本/外部IPを取得する方法

ネットワークデバイスの種類/名前に関係なく、基本/外部IPを取得する方法
  • こんにちは。外部または少なくとも基本があることを確認する必要があります。知的財産権機械の住所が与えられると、デバイスタイプ/名前に関係ありません。私はその目的のために短いスクリプトをすばやく書いていましたが、私はそれを知る必要がありました。欠点そんなスクリプトです。そしてそこにいるかどうかより良いシステムコール外部IPアドレスを決定します。ない場合は、ホストのデフォルトIPを決定します。また、これを達成できる他のツールはありますか?
  • テーママシンは主にセントOS 5/6Gentoo 1/2

#!/bin/bash

#!/bin/bash
#Author: Hanynowsky <[email protected]>
COM1=$(dig +short myip.opendns.com @resolver1.opendns.com)
COM2=$(hostname -i 2>/dev/null)
COM3=$(ip route show 2>/dev/null | grep src | grep -vE 'eth1.*|lo' |  awk -Fsrc '{print $2}' | sed -e 's/ //g')
COM4=$(curl -s monip.org 2>/dev/null | grep -o -E '([0-9]+\.){3}[0-9]+')
COM5=$(host `hostname -f 2>/dev/null` | awk -F[aA]ddress '{print $2}' | sed 's/ //g')
COM6=$(for i in eth0 em1 bond0; do inf=`ip -4 addr show dev $i 2>/dev/null | grep inet -m1 | cut -d/ -f1 | awk '{ print $2}'`;if [[ "$inf" =~ [0-9][0-9]?* ]]; then echo "$inf";fi ;done)
if [[ "$1" =~ local ]] ;then
    COM1=$COM3
fi
if [[ "$1" =~ private ]] ;then
    COM1=$COM2
fi
if [[ "$1" =~ host ]] ;then
    COM1=$COM5
fi
IP=''
validip()
{
    local  ip=$1
    local  stat=1     
    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        ip=($ip)
        IFS=$OIFS
        [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
        stat=$?
    fi  
    if [ "$stat" -eq 0 ]; then
        echo $IP
    else
        echo $stat
    fi  
    return $stat
}
if [ -n "${COM1}" ];then
    IP=${COM1}
    eval validip $IP
    exit
fi

if [ -n "${COM2}" ];then
    IP=${COM2}
    eval validip $IP
    exit
fi
if [ -n "${COM3}" ];then
    IP=${COM3}
    eval validip $IP
    exit
fi
if [ -n "${COM4}" ];then
    IP=${COM4}
    eval validip $IP
    exit
fi

if [ -n "${COM5}" ];then
    IP=${COM5}
    eval validip $IP
    exit
fi
if [ -n "${COM6}" ];then
    IP=${COM6}
    eval validip $IP
    exit
fi
exit

関連情報