Snippets

Yifei Huang IPLocator

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

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.