【问题标题】:Country and External IP Bash script国家和外部 IP Bash 脚本
【发布时间】:2016-12-04 17:49:23
【问题描述】:

我根据我在 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 中?

约翰·康纳

【问题讨论】:

    标签: linux bash shell ip wan


    【解决方案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 返回带有国家/地区的行,而不是国家/地区。因此,我对国家/地区的搜索不区分大小写。

    【讨论】:

    • John1024 这正是我所需要的。先生,你应该得到一块饼干!我需要开始学习 awk 和 sed,现在推迟一段时间。该死的不能投票,我的排名太低了:(
    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2020-09-22
    • 2012-02-22
    • 2012-01-14
    • 2012-03-07
    • 2012-11-05
    相关资源
    最近更新 更多