繁体   English   中英

ElasticSearch 自动更新文档

[英]ElasticSearch updating documents in an automated way

我不知道如何提出有关我当前问题的问题,所以我想,这就是我找不到正确答案的原因。 所以请让我告诉你我的问题是什么。

我正在尝试通过使用 Zmap 和 Zgrab(如 Shodan.io、censys.io 等)来做一个简单的互联网端口扫描器。

我需要将数据存储在 ElasticSearch 中(因为我想学习如何使用它)。

在这种情况下;

我创建了一个 JSON 架构以在 ElasticSearch 中使用它,例如

{
    "value": "192.168.0.1",
    "port": [
      {
        "value": 80,
        "HTMLbody": "BODY OF THE WEB PAGE",
        "status": 200,
        "headers": {
          "content_type": "html/png",
          "content_length": 23123,
          "...": "..."
        },
        "certificate": {
          "company_names": [
            "example.com",
            "acme.io"
          ]
        }
      }
    ]
}

Elasticsearch 内部将有大约 40 亿个 IP 地址打开不同的端口。 我的问题从这里开始; 第一次初始扫描后,我需要更新现有的 IP 地址。

例如;

IP:192.168.0.1 端口:80 开放

在第二次扫描时,我扫描端口 443 并且它可能也会打开。 然后我需要根据打开的端口更新我的 Elasticsearch 文档。

到目前为止我发现了什么

我发现有一个端点是; POST /<index>/_update/<_id>但它更新单个文档。 我需要在一次扫描中更新至少超过 100.000 个文档。 它也应该是自动的。 我怎么知道一个ip地址文件的id并更新它呢?

其次,我发现;

POST <index>/_update_by_query

我考虑过使用查询来搜索 ip 地址并收集其索引号,然后按如下方式更新文档;


{

    "value": "192.168.0.1",
    "port": [
      {
        "value": 80,
        "HTMLbody": "BODY OF THE WEB PAGE",
        "status": 200,
        "headers": {
          "content_type": "html/png",
          "content_length": 23123,
          "...": "..."
        },
        "certificate": {
          "company_names": [
            "example.com",
            "acme.io"
          ]
        }
      },

      {
        "value": 443,
        "HTMLbody": "BODY OF THE SSL WEB PAGE",
        "status": 200
      }
    ]
}

理论上,我可以做到这一点,但在实践中无法编写高效的代码。 因为我一次扫描至少有 6 GB 的 JSON 文件,处理整个文件和更新 elasticsearch 需要很长时间。

有什么方法可以有效地解决这个问题吗?

请看下图

要完全回答这个问题,首先,使用 ip 地址作为_id使 sur 更新相应的文档。 您需要在端口数组中添加一个条目,因此使用_update API 来执行它,如下所示:

POST <index>/_update/192.168.0.1
{
  "script": {
    "source": "ctx._source.port.add(params.tag)",
    "lang": "painless",
    "params": {
      "tag": {
        "value": 443,
        "HTMLbody": "BODY OF THE SSL WEB PAGE",
        "status": 200
      }
    }
  }
}

这是一个更新查询,用一个小脚本向数组添加一个条目。

要使用批量,只需像此处解释的那样添加您的所有请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM