IP归属地查询步伐

紧接上文,从几个IP地址归属地的查询,到几千IP地址归属地的查询,最后到百万级别以上的IP地址归属地查询。
1、同样几个IP地址的归属地查询就采用纯手动的方式,用百度、谷歌(科学上网需要翻墙)找几个可以提供IP地址归属地查询的WEB页面就可以了。

2、几千个ip地址可以请求公网开发的API查询接口,比如百度的IP定位API,每天限制请求次数100万:http://developer.baidu.com/map/index.php?title=webapi/ip-api
脚本如下,ip.txt存放的是ip地址一行一个,result.tmp是存放的查询结果:

#!/usr/bin/env python
import urllib,json

def getIpAddr():
	outfp = open('result.tmp', 'w')
	infp = open('ip.txt','r')
	for ip in infp:
		ip = ip.replace('\r\n', '')
		ip = ip.replace('\n', '')
		obj = urllib.urlencode({'ip':ip, 'ak':'Ij1sWn****************XGZxm2'})
		req = 'http://api.map.baidu.com/location/ip?'+obj
		f = urllib.urlopen(req)
		res = json.loads(f.read())
		if res['status']:
			print ip
			outfp.write(ip)
			outfp.write("\n")
		else:
			print res['content']['address']
			outfp.write(res['content']['address'].encode('utf8'))
			outfp.write("\n")
	infp.close()
	outfp.close()

getIpAddr()

3、百万级别的IP归属地查询,如果需要快速的查询出结果采用第二种方式是不太理想的,原因就不累述了。我安装的是一个IP查询的python模块,自带数据:https://github.com/lxyu/17monip 安装使用方法github上已经说的很清楚了,脚本如下:

#coding=utf-8
#!/user/bin/env python
import IP

def ipLocal():
	outfp = open('result.tmp', 'w')
	infp = open('ip.txt','r')
	for line in infp:
		ip = line.replace('\r\n', '')
		ip = line.replace('\n', '')
		local = IP.find(ip)
		local = local.replace("\t", '')
		outfp.write(local.encode('utf8'))
		outfp.write("\n")
	outfp.close()
	infp.close()
ipLocal()

查询速度很快,百万级别的也就1分钟左右,如果用公网开放的API查询至少要1天的时间,最后附上一个关于IP地址归属地查询有可能用到的网站http://www.ipip.net/download.html
文章出处:http://www.xiaomastack.com/2015/02/13/ipaddress/

发表评论:

你的电子邮件地址将不会被公开.

10 × 1 =