class IP2Region(): ''' 解析ip地址:lookup(ip)方法将ip转化成("省份","地区") ''' def __init__(self): self.filename = 'qqwry.dat' self.dat_path = os.path.join(base_config.BASE_PATH, 'utils', self.filename) self.q = QQwry() if os.path.exists(self.dat_path): self.q.load_file(self.dat_path) print(self.q) else: print('初始化更新ip库') self.update_dat() self.reload_dat() return def get_lastone(self): ''' 返回最后一条数据,最后一条通常为数据的版本号 没有数据则返回一个None :return: ''' version = self.q.get_lastone() return version def update_dat(self): ''' 异步更新,使用线程或者celery更新IP数据库源 :return:(bool) 成功后返回一个正整数,是文件的字节数;失败则返回一个负整数。 ''' result = updateQQwry(self.dat_path) if result > 0: print('ip库更新成功') return True print('ip库更新失败,网络出现故障') return False def lookup(self, ip): ''' 解析ip地址 :param ip(str): 要解析的ip地址 :return: 找到则返回一个含有两个字符串的元组,如:('国家', '省份')没有找到结果,则返回一个None ''' return self.q.lookup(ip) def reload_dat(self): ''' 重载IP数据源,当IPdat数据更新的时候,使用此方法更新数据 :return: (bool) 重载成功返回True,重载失败返回Flase ''' self.q.clear() if not self.q.is_loaded(): self.q.load_file(self.dat_path) return True return False
if int(download_ret) < 0: print("%sDownload QQwry.dat Error:" % ret_time(), int(download_ret)) print("-1:下载copywrite.rar时出错\n" "-2:解析copywrite.rar时出错\n" "-3:下载qqwry.rar时出错\n" "-4:qqwry.rar文件大小不符合copywrite.rar的数据\n" "-5:解压缩qqwry.rar时出错\n" "-6:保存到最终文件时出错") sys.exit() else: print("%sDownload QQwry.dat Success~ Status:%s" % (ret_time(), int(download_ret))) qq_wry = QQwry() qq_wry.load_file('QQway.dat') # Run print( 'Init->IP Data: Load:%s Version:%s-%s' % (qq_wry.is_loaded(), qq_wry.get_lastone()[0], qq_wry.get_lastone()[1])) print('Init->Start Time: %s' % ret_time()) print('################################################\n') #sys.argv.append('*') #sys.argv.append('200') global SETTHREAD global ip_file global ip_info_file try: SETTHREAD = sys.argv[2] ip_file = open("./results/IP-%s段.txt" % sys.argv[1].split('-')[0], "w") ip_info_file = open("./results/IP归属地-%s段.txt" % sys.argv[1].split('-')[0], "w") iplist = ip_range(sys.argv[1].split('-')[0], sys.argv[1].split('-')[1]) print("%sScan IP:%s Thread:%s" % (ret_time(), sys.argv[1], sys.argv[2])) print(ret_time() + 'Will scan ' + str(len(iplist)) + " host .. Sleep 1sec...\n")