国家和外部IP Bash脚本

时间:2016-07-29 22:44:10

标签: linux bash shell ip wan

我根据我在INTERNET上找到的内容和一些bash教程创建了一个脚本,它将显示我的外部IP及其所在的国家/地区。

脚本看起来像这样:

#!/bin/bash

wanip=$(dig +short myip.opendns.com @resolver1.opendns.com);
echo "$wanip" > /root/Documents/filewanip;
iplist="/root/Documents/filewanip"

while read IP;do
whois "$IP"
done < "$iplist" | grep "country" >geoloc
cat geoloc filewanip
rm filewanip geoloc

输出如下: 国家:荷兰 183.64.132.80

问题是我不想使用文件来执行此操作,因为文件结构明显会因系统而异。 如何以优雅的方式进行检查,以便进行检查并将其存储到变量中,然后直接显示到shell中?

John Connor

1 个答案:

答案 0 :(得分:1)

据我了解,您的目标是消除临时文件的使用。在那种情况下:

#!/bin/bash
wanip=$(dig +short myip.opendns.com @resolver1.opendns.com);
echo "$wanip" | while read ip; do
    echo "$ip $(whois "$ip" | awk ' /[Cc]ountry/{print $2}')"
done

上面写的就好像dig为您的IP返回多个地址一样。如果不是这种情况,则while循环是多余的。

如果您只期望一个IP,那么:

#!/bin/bash
ip=$(dig +short myip.opendns.com @resolver1.opendns.com);
echo "$ip $(whois "$ip" | awk ' /[Cc]ountry/{print $2}')"

注意:

  • 我将IP转换为ip,因为最好使用较低或混合大小写的名称作为shell变量。

  • 我的whois会返回包含国家/地区的行,而不是国家/地区。所以,我搜索了国家不区分大小写。