ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux下shell获取目标IP的地区和运营商信息

Linux下shell获取目标IP的地区和运营商信息

Linux操作系统 作者:luashin 时间:2016-03-22 12:42:23 0 删除 编辑
使用ip库可以做到,但十分不方便,这里用外部url来获取相关信息。
最常见的 什么的都可以获取到目标IP的地区和运营商,适用于shell脚本的还是ip.cn舒坦。
[root@server21 ~]# curl ip.cn?ip=114.114.114.114
IP:114.114.114.114 来自:江苏省南京市 信风网络

[root@server21 ~]# curl ip.cn?ip=www.towngas.cn
IP:103.227.128.245 来自:香港特别行政区 

用curl命令就搞定了,但想把内容拆分一下给到变量使用时确发现他万恶的用了中文符号
用awk -F 倒也是可以搞定。如下:
[root@localhost ~]# cat getip.sh
#!/bin/bash
Getip=$(curl -s ip.cn?ip=$1)
IParea=$(echo $Getip|awk -F ":" '{print $3}'|awk '{print $1}')
IPisp=$(echo $Getip|awk -F ":" '{print $3}'|awk '{print $2}')
if [ ! $1 ];then
    IP=$(echo $Getip|awk -F ":" '{print $2}'|awk '{print $1}')
    echo $IP $IParea $IPisp
else
    echo $1 $IParea $IPisp
fi
[root@localhost ~]# ./getip.sh 114.114.114.114
114.114.114.114 江苏省南京市 信风网络

但还是有点不方便。于是各种百度弄了段php的代码来转换一下ip.cn的输出结果:
<!--?php
header("Content-Type: text/html;charset=utf-8");
        $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
        $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
        $ip = ($_GET["ip"]) ? $_GET["ip"] : $user_IP;
        $ch = curl_init("http://?ip=$ip");
                curl_setopt($ch,CURLOPT_USERAGENT,'curl/7.31');
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
                $output = curl_exec($ch);
                        $output2 = substr($output,5);
                        $row=split(' ',$output2);
                                $cip=$row[0];
                                $carea=substr($row[1],9);
                                $cisp=$row[2];
        $s = ($_GET["s"]) ? $_GET["s"] : "0";
                if ($s==0)
                {
                        echo "$cip $carea $cisp";
                }
                else
                {
                        $carea1=substr($carea,0,9);
                        echo "$cip $carea1 $cisp";
                }
        curl_close($ch);
?>

<!--?php
header("Content-Type: text/html;charset=utf-8");
        $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
        $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
        $ip = ($_GET["ip"]) ? $_GET["ip"] : $user_IP;
        system("curl ip.cn?ip=$ip|sed -r 's/[^ ]+://g'");
?>

[root@localhost html]# curl localhost?ip=114.114.114.114
114.114.114.114 江苏省南京市 信风网络
找个空间一放,以后用的时候直接访问自己的页面就可以了。

 直接使用curl cip.cc
或
curl ipinfo.io
直接就能显示IP的相关信息,而且ipinfo.io这个网站还提供了json之类的调用接口呢        

php代码可以在命令行执行,不需要非得建一个网站,如php -f       
除此之外,可以用awk实现“curl ip.cn?ip=114.114.114.114 2>/dev/null | awk '{gsub(":"," ");print $2" "$4" "$5}'”,结果会直接显示“114.114.114.114 江苏省南京市 信风网络”,这样就非常简单了。 

还有更简单的方法。。。。。。
curl -s ip.cn?ip=114.114.114.114|sed -r 's/[^ ]+://g'

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9034054/viewspace-2061673/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-02-18

  • 博文量
    290
  • 访问量
    1151059