获取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 "浏览器标识"
- #!/bin/bash
- IP=114.114.114.114
- 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转换
- iconv -f gb2312 -t utf-8
- 因此命令变为
- #!/bin/bash
- IP=114.114.114.114
- 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>\(.*\) \(.*\)<\/span><\/p>/\1\2\3/g"
运行结果如下
需求基本搞定,然后是细节完善,写成一个脚本,可以接参数ip地址就自动解析,此处不再写了。当然,这个用python写也许会更好。
这里提供的仅仅是一种思路,解决问题的思路,而解决问题之前,需要具备一定的基础知识
这里需要的知识:
- 1.能用抓包工具进行抓包,并进行数据包分析
- 2.熟悉curl命令
- 3.熟悉sed,grep等命令进行文本过滤
- 4.其他知识整合能力
完毕,谢谢阅读!
祝大家五一节快乐!
附录一个ip地址归属地解析的python版
- #!/usr/bin/env python
- # coding=utf8
- # Filename: monitor_idc.py
- # Last modified: 2013-04-23 16:54
- # Author: itnihao
- # Mail: itnihao@qq.com
- # Description:
- import urllib,re, sys
- def getip(ip= '114.114.114.114'):
- url = "http://ip.qq.com/cgi-bin/searchip"
- data = "searchip1="+ip
- html = urllib.urlopen(url, data).read().decode("gb2312")
- pat = re.compile(r'<span>(.*)</span></p>')
- result= re.findall(pat, html)
- print ip +": " + result[0].encode("utf-8").replace(' ', '')
- #getip('8.8.8.8')
- getip()
- taobao版本
- #!/usr/bin/env python
- # coding=utf8
- # Filename: get_out_ip.py
- # Last modified: 2013-04-28 17:02
- # Author: itnihao
- # Mail: itnihao@qq.com
- # Description:
- import urllib, re, simplejson
- #获取出口ip地址
- html= urllib.urlopen('http://ip.qq.com').read()
- pat = re.compile('red">([0-9]+.[0-9]+.[0-9]+.[0-9]+)</span>')
- ip = re.findall(pat, html)
- ip = ip[0]
- #获取ip地址归属地解析
- url = 'http://ip.taobao.com/service/getIpInfo.php?ip=%s' % ip
- f = urllib.urlopen(url).read()
- s= simplejson.loads(f)
- 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地址解析归属地相关推荐
- Java获取IP及归属地
最近我们发现各大社交平台都出现了一个新的功能:IP属地. 比如某乎: 这个IP属地是怎么做到的呢?今天我来教教你,保证你看完直呼Easy~ 技术栈 1.Java网络编程 2.Servlet 具体实现 ...
- Java获取IP以及地址属地(全网无BUG)
点赞再看,养成习惯,大家好,我是辰兮!今天介绍如何获取访问人员的IP地址以及归属地(千万不要用这种方法做坏事噢!) 文章目录 思路 一.获取IP地址 二.获取归属地 三.测试 总结 思路 通过此网站: ...
- 【Java】获取IP以及归属地
获取IP地址(两种方式) 首先使用基于Spring Boot搭建项目,在controller添加HttpServletRequest请求参数: package com.wxz.utils;import ...
- php获取ip地址归属地
获取api数据使用的是CURL模拟百度蜘蛛抓取,防止接口被屏蔽使用 function Go($url){$ch = curl_init();//随机生成IP$ip = rand(0,255).'.'. ...
- python解析IP地址归属地
一.使用免费淘宝地址库 免费的嘛总是不如收费的好,自己玩玩记录一下 哪里不好? https://ip.taobao.com//outGetIpInfo?ip=xxx 把 xxx 替换成想要查找的IP地 ...
- php查询ip归属地api接口_【php】利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地...
本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地>(点击打开链接)为姊妹篇,只是后端编程语言换成了php. 做出同样的效果,打开页面,得 ...
- php新浪获取ip接口,【php】利用新浪api接口与php获取远程数据的步骤,获取IP地址,并获取相应的IP归属地...
[php]利用新浪api接口与php获取远程数据的方法,获取IP地址,并获取相应的IP归属地 本文与<[Servlet]Javaweb中,利用新浪api接口,获取IP地址,并获取相应的IP归属地 ...
- Java如何获取IP属地 ip2region failed to create searcher with x:java.io.FileNotFoundException:( 系统找不到指定的路径)
目录 引言 获取ip地址 使用ServerHttpRequest获取ip完整地址: 获取ip地址的源代码 接口调用源代码 使用HttpServletRequest获取ip完整地址 获取ip地址的源代码 ...
- Java 中是如何获取 IP 属地的
细心的小伙伴可能会发现,抖音新上线了 IP 属地的功能,小伙伴在发表动态.发表评论以及聊天的时候,都会显示自己的 IP 属地信息 下面,我就来讲讲,Java 中是如何获取 IP 属地的,主要分为以下几 ...
最新文章
- gridContro使用随记
- js构造函数内存在的闭包
- python中sys模块是什么内容_python中sys模块是做什么用的
- nodejs文件的读取
- arcpy.mapping常用四大件-MapsurroundElement
- 两个list取交集_Java基础面试题-说说你知道的几个Java集合类:list、set、queue、map...
- ‘module‘ object has no attribute ‘computation‘
- 史蒂夫·乔布斯传txt下载
- nginx直接打印输出_Nginx 日志打印POST数据
- latex添加代码注释_在代码中添加注释:好的,坏的和丑陋的。
- 《车载图像采集仿真应用指南》之基于图像采集的座舱测试
- BH1750FVI光强度传感器及其STM32驱动程序
- opencv 数学形态学(2) 膨胀运算:dilate
- 数据挖掘的10个常见问题
- 网页上显示word和Excel
- 一次代码评审,差点过不了试用期!
- 跨站脚本(XSS)攻击
- Java技术Jsoup爬取数据手动登录
- 10岁男孩开灯睡觉骨龄发育慢4年上热搜,开灯睡觉都有什么危害?
- JQuery实现手风琴
热门文章
- linux内核引入模块机制,Linux内核设备驱动之Linux内核模块加载机制笔记整理
- 什么是电子路径用于连接计算机主板上的芯片,计算机的组成部分及功能346.doc...
- tkmbatis 日志_mybatis打印sql日志
- mysql+dump+选项_详解MySQL数据备份之mysqldump使用方法
- html5复选框样式,11种炫酷CSS3复选框checkbox样式美化效果
- android 汉字转字节,android实现汉字转拼音功能 带多音字识别
- ios与html数据交互,iOS iOS与html进行交互
- 常量指针与指向常量的指针
- Appium之创建、连接夜神模拟器
- C++ 各种构造函数