博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取ip地址解析归属地
阅读量:5830 次
发布时间:2019-06-18

本文共 2646 字,大约阅读时间需要 8 分钟。

 

获取ip地址解析归属地

 

 
  1. 版本V1.0 
  2. 时间2013-04-29 
  3. 版权GPL 
  4. 作者itnihao 
  5. 邮箱 itnihao@qq.com 
  6. 博客 http://itnihao.blog.51cto.com 
  7. 如需重新发行,请注明以上信息,谢谢合作 

本文目的:

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

声明一下:

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

 

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

打开网站,输入要查询的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'

效果如下图

 

转载地址:http://ewedx.baihongyu.com/

你可能感兴趣的文章
android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果
查看>>
zabbix 批量web url监控
查看>>
MongoDB CookBook读书笔记之导入导出
查看>>
shell如何快速锁定所有账号
查看>>
HTML 5实现的手机摇一摇
查看>>
Linux 文件IO理解
查看>>
Ninject 2.x细说---2.绑定和作用域
查看>>
30个非常时尚的网页联系表单设计优秀示例
查看>>
使用membership(System.Web.Security)来进行角色与权限管理
查看>>
opticom 语音质量验证白皮书
查看>>
3D实时渲染中的BSP树和多边形剔除
查看>>
Frank Klemm's Dither and Noise Shaping Page: Dither and Noise Shaping In MPC/MP+
查看>>
网络抓包的部署和工具Wireshark【图书节选】
查看>>
Redis在Windows+linux平台下的安装配置
查看>>
Maven入门实战笔记-11节[6]
查看>>
Local declaration of 'content' hides instance variable
查看>>
ASP.NET中 HTML标签总结及使用
查看>>
Linux下日志系统的设计
查看>>
爬虫IP被禁的简单解决方法——切换UserAgent
查看>>
php生成word,并下载
查看>>