【问题标题】:Any way to make this more efficient? Tenable API report call有什么办法可以提高效率吗? Tenable API 报告调用
【发布时间】:2021-10-26 21:42:46
【问题描述】:

我有一个执行大量数据操作的脚本,但它受到了这个函数的限制。

Tenable 生成器数组ips 的长度始终在 1000 左右,无论取舍。 ips[row]的长度为5。

我可以在此处进行任何改进以提高效率吗?我觉得这需要的时间比它应该的要长得多。

def get_ten(sc):
    now = time.time()
    ips = [sc.analysis.vulns(('ip', '=', ip), tool='sumseverity', sortDirection='desc') for ip in [x[15] for x in csv.reader(open('full.csv', 'r'))
     if x[15] != 'PrivateIpAddress']]
    row = 0
    while row < len(ips):
        scan_data = []
        scan_count = 0
        for scan in ips[row]:
            count = scan['count']
            scan_data.append(count)
            scan_count += int(count)
        row += 1
    print(time.time() - now)

输出:2702.747463464737

谢谢!

【问题讨论】:

  • 我对 Tenable 一无所知,但似乎sc.analysis.vulns 向某些 API 发送请求,对吗?如果是这样,也许异步编程可能是答案。您知道 Tenable 是否提供异步功能吗?

标签: python performance processing-efficiency


【解决方案1】:

我建议你尝试颠倒你的逻辑。

通过查看您的代码,您现在看起来像:

  1. 读取 CSV 以获取 IP。
  2. 为每个 IP 调用 sc.analysis API
  3. 处理结果

我的最佳猜测是大部分时间都用于发送 API 调用然后等待结果。相反,我建议您尝试:

  1. 调用 sc.analysis API(不过滤 ip)并读取结果以获取所有 IP(作为一组?)
  2. 读取 CSV 并获取另一组 IP。
  3. 设置联合操作以查找易受攻击的 IP 地址。

【讨论】:

  • 该调用实际上使用每个 ip 作为查找,可以说是抓取特定报告。如果没有 IP,我将无法拨打电话。
  • API docs 中没有任何内容表明需要 IP。如果可能的话,我建议您尝试一下,看看您是否可以获得多页结果。否则,由于我没有 Teneble 访问权限,因此我无能为力。如果您必须对 IP 进行逐个调用,那么您必须执行来自 @ruencomelli 的多处理/线程或异步建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多