注:在项目中,会用到全球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