使用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/
,如需转载,请注明出处,否则将追究法律责任。