Linux下shell獲取目標IP的地區和運營商資訊

luashin發表於2016-03-22
使用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=
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部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-2061673/,如需轉載,請註明出處,否則將追究法律責任。

相關文章