本文目的:

通过分析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. IP=114.114.114.114
  3. 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. 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)" | 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. import urllib,re, sys
  9. def getip(ip= '114.114.114.114'):
  10. url  =  "http://ip.qq.com/cgi-bin/searchip"
  11. data =  "searchip1="+ip
  12. html =  urllib.urlopen(url, data).read().decode("gb2312")
  13. pat  =  re.compile(r'<span>(.*)</span></p>')
  14. result= re.findall(pat, html)
  15. print ip +": " +  result[0].encode("utf-8").replace('&nbsp;', '')
  16. #getip('8.8.8.8')
  17. getip()
  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. import urllib, re, simplejson
  10. #获取出口ip地址
  11. html=  urllib.urlopen('http://ip.qq.com').read()
  12. pat =  re.compile('red">([0-9]+.[0-9]+.[0-9]+.[0-9]+)</span>')
  13. ip  = re.findall(pat, html)
  14. ip =  ip[0]
  15. #获取ip地址归属地解析
  16. url  =   'http://ip.taobao.com/service/getIpInfo.php?ip=%s' % ip
  17. f  =  urllib.urlopen(url).read()
  18. s=  simplejson.loads(f)
  19. 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,如需转载请自行联系原作者

获取ip地址解析归属地相关推荐

  1. Java获取IP及归属地

    最近我们发现各大社交平台都出现了一个新的功能:IP属地. 比如某乎: 这个IP属地是怎么做到的呢?今天我来教教你,保证你看完直呼Easy~ 技术栈 1.Java网络编程 2.Servlet 具体实现 ...

  2. Java获取IP以及地址属地(全网无BUG)

    点赞再看,养成习惯,大家好,我是辰兮!今天介绍如何获取访问人员的IP地址以及归属地(千万不要用这种方法做坏事噢!) 文章目录 思路 一.获取IP地址 二.获取归属地 三.测试 总结 思路 通过此网站: ...

  3. 【Java】获取IP以及归属地

    获取IP地址(两种方式) 首先使用基于Spring Boot搭建项目,在controller添加HttpServletRequest请求参数: package com.wxz.utils;import ...

  4. php获取ip地址归属地

    获取api数据使用的是CURL模拟百度蜘蛛抓取,防止接口被屏蔽使用 function Go($url){$ch = curl_init();//随机生成IP$ip = rand(0,255).'.'. ...

  5. python解析IP地址归属地

    一.使用免费淘宝地址库 免费的嘛总是不如收费的好,自己玩玩记录一下 哪里不好? https://ip.taobao.com//outGetIpInfo?ip=xxx 把 xxx 替换成想要查找的IP地 ...

  6. php查询ip归属地api接口_【php】利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地...

    本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地>(点击打开链接)为姊妹篇,只是后端编程语言换成了php. 做出同样的效果,打开页面,得 ...

  7. php新浪获取ip接口,【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地...

    [php]利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地 本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地 ...

  8. Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)

    目录 引言 获取ip地址 使用ServerHttpRequest获取ip完整地址: 获取ip地址的源代码 接口调用源代码 使用HttpServletRequest获取ip完整地址 获取ip地址的源代码 ...

  9. Java 中是如何获取 IP 属地的

    细心的小伙伴可能会发现,抖音新上线了 IP 属地的功能,小伙伴在发表动态.发表评论以及聊天的时候,都会显示自己的 IP 属地信息 下面,我就来讲讲,Java 中是如何获取 IP 属地的,主要分为以下几 ...

最新文章

  1. gridContro使用随记
  2. js构造函数内存在的闭包
  3. python中sys模块是什么内容_python中sys模块是做什么用的
  4. nodejs文件的读取
  5. arcpy.mapping常用四大件-MapsurroundElement
  6. 两个list取交集_Java基础面试题-说说你知道的几个Java集合类:list、set、queue、map...
  7. ‘module‘ object has no attribute ‘computation‘
  8. 史蒂夫·乔布斯传txt下载
  9. nginx直接打印输出_Nginx 日志打印POST数据
  10. latex添加代码注释_在代码中添加注释:好的,坏的和丑陋的。
  11. 《车载图像采集仿真应用指南》之基于图像采集的座舱测试
  12. BH1750FVI光强度传感器及其STM32驱动程序
  13. opencv 数学形态学(2) 膨胀运算:dilate
  14. 数据挖掘的10个常见问题
  15. 网页上显示word和Excel
  16. 一次代码评审,差点过不了试用期!
  17. 跨站脚本(XSS)攻击
  18. Java技术Jsoup爬取数据手动登录
  19. 10岁男孩开灯睡觉骨龄发育慢4年上热搜,开灯睡觉都有什么危害?
  20. JQuery实现手风琴

热门文章

  1. linux内核引入模块机制,Linux内核设备驱动之Linux内核模块加载机制笔记整理
  2. 什么是电子路径用于连接计算机主板上的芯片,计算机的组成部分及功能346.doc...
  3. tkmbatis 日志_mybatis打印sql日志
  4. mysql+dump+选项_详解MySQL数据备份之mysqldump使用方法
  5. html5复选框样式,11种炫酷CSS3复选框checkbox样式美化效果
  6. android 汉字转字节,android实现汉字转拼音功能 带多音字识别
  7. ios与html数据交互,iOS iOS与html进行交互
  8. 常量指针与指向常量的指针
  9. Appium之创建、连接夜神模拟器
  10. C++ 各种构造函数