Exemple #1
0
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
Exemple #2
0
      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")