如何确定是否有任何接口正在侦听给定的IP地址?

时间:2014-06-26 13:46:19

标签: linux bash rhel5

我正在维护一个在RHEL 5上运行的bash脚本。给定一个域名,我想确保当前机器上有一个接口监听预期的IP地址。

# Check that the IP is bound to this host, to avoid running on the wrong machine.
IP=$(dig +short ${EXPECTED_SUBDOMAIN}.example.com | tail -n 1)

if ! $(/sbin/ifconfig 2>/dev/null | /bin/grep -q $IP) ; then
    echo "IP for ${EXPECTED_SUBDOMAIN} ($IP) doesn't appear to be on this host"
    exit 1
fi

当IP地址是彼此的子串时,这会中断。如果我的预期IP地址为1.2.3.4,则如果计算机具有11.2.3.41.2.3.40的IP地址(甚至子网掩码!),则不会退出。

我能看到的唯一解决方案是grep "inet addr:${IP} ",但搜索其他文字似乎很脏。

是否有更强大的方法来查找接口的IP地址(不要被子网掩码等问题搞糊涂)并进行比较?有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

在你的grep中使用单词边界:

if ! $(/sbin/ifconfig 2>/dev/null | /bin/grep -qE "\<$IP\>" ; then
...

答案 1 :(得分:0)

试试这个:

 /sbin/ip addr | grep -Po 'inet \K.*?(?=(/| ))'| /bin/grep -q "^$IP$"

如果输入也被过滤,匹配字符串的开头和结尾应解决您的问题。

PS。对于vitual ips,我发现ip addr比ifconfig更好。