全球ip地址查询与区域判断

注:在项目中,会用到全球ip地址,地址来源网址:http://ip.bczs.net/countrylist,感谢该网址提供如此全的地址

自己找ip找的也很辛苦,将爬虫爬下来的数据上传上来,以供大家使用。

(1)通过爬虫,将上面网址中的地址与对应的ip段爬下来,大家可以点击下载使用

链接:https://pan.baidu.com/s/1d34HTQDfuwGbHyXHx7GSBQ 密码:edbc

(2)用netaddr中的IPRange,来批量判断地址所属范围

"""
此模块用以判断ip的所属范围
"""

from netaddr import IPRange
import json


def gen_ipdataset():
    """
    此方法用以从本地文件读取数据,构建ipdataSET,用以后续的ip判断处理
    :return:
    """
    # 从本地文件读取json格式的文件:注,由于数据太长显示不完全,会导致第一行不显示国家名
    with open('F:/SCRMproject/code/ip_count.json', 'r') as file:
        ipCount = json.load(file)

    # 生成新的字典,构建成ipdataset:
    ipDataSet = {}
    for key, valueLists in ipCount.items():
        # 构建IPRange
        newValueLists = []
        for valueList in valueLists:
            newValueLists.append(IPRange(valueList[0], valueList[1]))
        ipDataSet['{}'.format(key)] = newValueLists
    return ipDataSet


def ip_nation_identity(ipAddr, ipDataSet):
    """
    此函数用以判断ip地址所属国家
    :param ipAddr: 字符串类型,一个ip地址
    :param ipDataSet: 一个ip国家所属范围字典,如:{'美国': [IPRange('3.0.0.0', '4.255.255.255'), IPRange('5.35.192.0', '5.35.199.255')],
                                               '中国':[IPrange('1.0.1.0','1.0.3.255'),IPrange('1.0.8.0', '1.0.15.255')}
    :return:返回所属国家的名字,如'中国'
    """

    for nation, ipRangeList in ipDataSet.items():
        for ipRange in ipRangeList:
            if ipAddr in ipRange:
                return nation
    return 'unkown_nation'


if __name__ == '__main__':

    ipDataSet = gen_ipdataset()
    print(ip_nation_identity('1.0.1.0', ipDataSet))
    print(ip_nation_identity('4.255.255.255', ipDataSet))
    print(ip_nation_identity('0', ipDataSet))
输出结果:
中国
美国
unkown_nation

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值