当前位置: 首页 > Linux, tips > 正文

获取主机对应的ip地址

最近做一个小脚本,遇到了下面的需求:

前提: 某台机器有n块网卡,每个网卡都有不同的ip地址,并且任意一个网卡都可能发生故障

需求: 在任意时刻,希望能够找到一块有效的网卡来对外通信

默认的ping程序,只能翻译出hosts文件中机器名对应的第一个地址

首先想到了dns服务器,但是貌似也不靠谱,我又不能在系统中安装自己的dns服务器

有人提出了使用其他语言中的 gethostbyname 等函数来实现

但是不管是perl、python,还是c,都太麻烦了,我要的仅仅是一个小脚本

仔细查找了资料,发现getent这个命令可以实现我要的功能

    [root@redhat-1 ~]# getent hosts h4
    10.0.0.104      h4
    10.0.1.104      h4
    192.168.11.104  h4

当然,getent不仅仅可以干这个事情,它能干的事情还有很多

    ahosts ahostsv4 ahostsv6 aliases ethers group gshadow hosts netgroup
    networks passwd protocols rpc services shadow

那么,我需要的功能就基本可以这么实现了

    get_usable_ip() {
        for ip in `/usr/bin/getent hosts $1 | cut -d" " -f1`; do
            if ping -w1 -c1 $ip > /dev/null 2>&1
            then
                echo $ip
                return 0
            fi
        done
        return 1
    }

拿出机器对应的所有ip,逐个ping一下,如果有成功的,就返回了

要是都ping不通,那也没有办法了

    分享到:

本文固定链接: http://klwang.info/get-multi-address-from-a-hostname/ | 数据库|Linux|软件开发

该日志由 klwang 于2013年09月17日发表在 Linux, tips 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 获取主机对应的ip地址 | 数据库|Linux|软件开发
关键字: ,

获取主机对应的ip地址:等您坐沙发呢!

发表评论

*
快捷键:Ctrl+Enter