创建一个对象列表并对每个对象调用相同的函数

时间:2021-01-25 11:28:37

标签: python python-3.x

我目前正在开发一个 dns-enumeration 项目,该项目向各种 API 发送请求。 每个 API 都在它自己的类中处理,所以现在我有 22 个类,它们都提供一个“.query(string: domain, boolean: dnsprobe)”函数,它处理对 API 的请求和处理它收到的数据。

例如,这就是“alienvault”的“.query()”函数的样子(所有函数都继承自“Source”,这是我构建的一个类,可以在需要时传递 config_obj):

class Alienvault(Source):
    @staticmethod
    def query(domain, dnsprobe):
        url = 'https://otx.alienvault.com/api/v1/indicators/domain/' + domain + '/passive_dns'
        fqdns = []

        start = timer()

        try:
            req = urllib.request.Request(url)
            response = urllib.request.urlopen(req)
            data = response.read()
            json_data = json.loads(data)

            passive_dns = json_data['passive_dns']

            for item in passive_dns:
                if item['hostname'] not in fqdns:
                    if item['hostname'].endswith(domain):
                        fqdns.append(item['hostname'])

        except urllib.error.HTTPError as error:
            print("[" + colored(u'\u0021', 'red') + "] AlienVault: " + str(error.code) + " " + error.reason)

        end = timer()
        exec_time = round((end - start), 3)

        # check if domains still exist
        probed_fqdns = []
        if dnsprobe:
            probed_fqdns = probe_fqdns(fqdns)

        return Stats("AlienVault", domain, fqdns, probed_fqdns, exec_time)

所有的类都遵循相同的模式,但每个 API 都需要不同的处理方式,例如查询功能不同。

在我的主文件中,我现在想为每个类创建一个实例,并在每个创建的对象上调用该函数以将所有 API 数据存储在一个列表中。

我想有比我目前正在做的更好的方法:

check_alienvault = True
check_Binaryedge = True
check_Bufferover = True
...

domain = 'hackertarget.com'
dnsprobe = False

if check_Alienvault:
  Alienvault_obj = sources.Alienvault()
  ret = Alienvault_obj.query(domain, dnsprobe)
  return_values.append(ret)

if Binaryedge:
  Binaryedge_obj = sources.Binaryedge()
  ret = Binaryedge_obj.query(domain, dnsprobe)
  return_values.append(ret)

if Bufferover:
  ...

因为我需要分别为所有 22 个 API 执行此操作,这会导致大量样板代码?

由于我在 Python 编程方面不如我希望的那么好,我正在努力自己解决这个问题,并感谢您提供任何先进的输入。

0 个答案:

没有答案