Created by
Yifei Huang
|
from collections import namedtuple
import socket
IPLocation = namedtuple('IPLocation', ['first', 'last', 'country', 'province', 'city', 'isp'])
class IPLocator(object):
def __init__(self, locations):
self.locations = []
for line in locations:
range_, location_ = line.split(':')
first_, last_ = range_.split('|')
first_ = socket.inet_aton(first_)
last_ = socket.inet_aton(last_)
location_ = location_.split('|')
location_= IPLocation(
first_,
last_,
location_[0],
location_[1],
location_[2],
location_[4])
self.locations.append(location_)
def ip_location(self, ip):
low = 0
high = len(self.locations) - 1
while low <= high:
mid = (low+high)/2
mid_ip = self.locations[mid]
if ip < mid_ip.first:
high = mid-1
elif ip > mid_ip.last:
low = mid+1
else:
return mid_ip
return None
|
| 223.255.8.0|223.255.8.255:CN|北京|北京|None|DXTNET|None|None
223.255.9.0|223.255.9.255:CN|广东|深圳|宝安|DXTNET|None|None
223.255.10.0|223.255.10.255:CN|山东|济南|历下|DXTNET|None|None
223.255.11.0|223.255.11.255:CN|北京|北京|None|DXTNET|None|None
223.255.12.0|223.255.12.255:CN|重庆|重庆|江北|DXTNET|None|None
223.255.13.0|223.255.13.255:CN|北京|北京|None|DXTNET|None|None
223.255.14.0|223.255.14.255:CN|陕西|西安|雁塔|DXTNET|None|None
223.255.15.0|223.255.15.255:CN|陕西|西安|雁塔|DXTNET|None|None
223.255.16.0|223.255.16.255:CN|北京|北京|None|DXTNET|None|None
223.255.17.0|223.255.18.255:CN|湖南|长沙|雨花|DXTNET|None|None
223.255.19.0|223.255.19.255:CN|北京|北京|None|DXTNET|None|None
223.255.20.0|223.255.20.255:CN|辽宁|沈阳|于洪|DXTNET|None|None
223.255.21.0|223.255.21.255:CN|吉林|长春|朝阳|DXTNET|None|None
223.255.22.0|223.255.23.255:CN|北京|北京|None|DXTNET|None|None
223.255.24.0|223.255.24.255:CN|山东|青岛|市北|DXTNET|None|None
223.255.25.0|223.255.25.255:CN|山东|青岛|李沧|DXTNET|None|None
223.255.26.0|223.255.27.255:CN|北京|北京|None|DXTNET|None|None
|