获取ip地址解析归属地

简介:

本文目的:

     通过分析ip地址归属地解析过程,分享探究问题的基本步骤,逐步认识基础知识的重要。

声明一下:

     基于本人知识视野,个人理解能力的限制,文中难免有不当之处,敬请理解。

 

    大家都知道,网上有很多可以查询ip地址归属地的网站,ip138,淘宝,qq等各大网站都提供这种查询,下面以QQ为例,来探究一下如何通过命令行来查询获取归属地的问题。

http://ip.qq.com/cgi-bin/index 打开网站,输入要查询的ip

    输入要查询的ip地址,于此同时,准备好抓包工具,以便对查询数据进行分析,此处,我开了2个抓包工具,一个是httpwatch网页抓包,一个是wireshark数据包分析。

    通过分析数据包,可以看到如下信息

 

看到绿色部分,采用post提交数据,提交的内容为searchip1=114.114.114.114

OK,此处已经找出规律了,查询采用post提交叫,内容为searchip1=X.X.X.X

那么,可以采用curl进行浏览器模拟提交数据了,命令格式如下

curl  URL  -d  "post提交内容"  -e  "refer地址"  -A "浏览器标识"

 
  1. #!/bin/bash 
  2.  
  3. IP=114.114.114.114 
  4. curl http://ip.qq.com/cgi-bin/searchip -d "searchip1=$IP" -e "http://ip.qq.com/cgi-bin/index" -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; QQDownload 718; .NET CLR 2.0.50727)" 

     说明:由于curl打开的字符和系统不符合,故无法显示汉字,

可以将结果保存为html,通过浏览器打开,将会看到解析的地址结果。

查看网页源代码

     到这里,已经替代了浏览器直接访问,初步取得成果。

     事情并未到此结束,下面继续解决字符编码问题

     将gh2312字符转换为Utf-8标准字符,借助系统iconv转换

 
  1. iconv  -f gb2312 -t utf-8 

 

  1. 因此命令变为
  2. #!/bin/bash 
  3.  
  4. IP=114.114.114.114 
  5. curl http://ip.qq.com/cgi-bin/searchip -d "searchip1=$IP" -e "http://ip.qq.com/cgi-bin/index" -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; QQDownload 718; .NET CLR 2.0.50727)" | iconv  -f gb2312 -t utf-8| grep "<p>.*"|sed "s/<p>\(.*\).*<span>\(.*\)&nbsp;\(.*\)<\/span><\/p>/\1\2\3/g"

 

运行结果如下

    需求基本搞定,然后是细节完善,写成一个脚本,可以接参数ip地址就自动解析,此处不再写了。当然,这个用python写也许会更好。

   这里提供的仅仅是一种思路,解决问题的思路,而解决问题之前,需要具备一定的基础知识

这里需要的知识:

 
  1. 1.能用抓包工具进行抓包,并进行数据包分析 
  2. 2.熟悉curl命令 
  3. 3.熟悉sed,grep等命令进行文本过滤 
  4. 4.其他知识整合能力 

完毕,谢谢阅读!

      祝大家五一节快乐!

附录一个ip地址归属地解析的python版

 

 
  1. #!/usr/bin/env python 
  2. # coding=utf8 
  3. # Filename: monitor_idc.py 
  4. # Last modified: 2013-04-23 16:54 
  5. # Author: itnihao 
  6. # Mail: itnihao@qq.com 
  7. # Description: 
  8.  
  9. import urllib,re, sys 
  10. def getip(ip= '114.114.114.114'): 
  11.     url  =  "http://ip.qq.com/cgi-bin/searchip" 
  12.     data =  "searchip1="+ip 
  13.  
  14.     html =  urllib.urlopen(url, data).read().decode("gb2312"
  15.     pat  =  re.compile(r'<span>(.*)</span></p>'
  16.     result= re.findall(pat, html) 
  17.     print ip +": " +  result[0].encode("utf-8").replace('&nbsp;'''
  18. #getip('8.8.8.8'
  19. getip()
  20.  
 
  1. taobao版本
  2. #!/usr/bin/env python 
  3. # coding=utf8 
  4. # Filename: get_out_ip.py 
  5. # Last modified: 2013-04-28 17:02 
  6. # Author: itnihao 
  7. # Mail: itnihao@qq.com 
  8. # Description: 
  9.  
  10. import urllib, re, simplejson 
  11.  
  12. #获取出口ip地址 
  13. html=  urllib.urlopen('http://ip.qq.com').read() 
  14. pat =  re.compile('red">([0-9]+.[0-9]+.[0-9]+.[0-9]+)</span>'
  15. ip  = re.findall(pat, html) 
  16.  
  17. ip =  ip[0
  18. #获取ip地址归属地解析 
  19. url  =   'http://ip.taobao.com/service/getIpInfo.php?ip=%s' % ip 
  20. f  =  urllib.urlopen(url).read() 
  21. s=  simplejson.loads(f) 
  22.  
  23. print ip+": "+s['data']['country']+s['data']['area']+s['data']['region']+s['data']['city']+s['data']['isp'

效果如下图



本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/1189770,如需转载请自行联系原作者

相关文章
|
缓存 网络协议
|
网络协议
2018公共DNS服务器地址
2018公共DNS服务器地址
122 0
2018公共DNS服务器地址
|
存储 缓存 网络协议
IP地址归属地那些事
最近各大社交平台都悄悄上线了一个新功能,就是显示用户的IP归属地,境内精确到省级,境外精确到国家或地区。在个人信息和每条评论上面都有,也是炸出来了一波xx在xx国的账号,各大号主纷纷出视频解释自己的ip归属为什么在国内,有说用代理的,有说给家人登录的,也有说在国内有工作室(团队)的......
545 0
|
网络协议 C# 移动开发
c#获取和设置网卡ip/dns等信息
  using System; using System.Windows.Forms; using System.Management; using System.
1444 0
|
Linux 虚拟化 网络协议