如何在Elasticsearch中查询IP范围?

dis*_*231 3 elasticsearch elasticsearch-query

我想在ELK中查询IP范围:172.16.0.0到172.31.0.0

我尝试了两种查询方法,但都失败了。

{
  "query": {
    "bool": {
      "should": [
        {
          "regexp": {
            "DstIP": "172.(3[0-1]|1[6-9]|2[0-9]).*"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
{
  "query": {
    "range": {
      "DstIP": {
        "gte": "172.16.0.0",
        "lte": "172.31.0.0"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ELK中如何查询IP范围?

ESC*_*der 7

为了使范围查询能够在 IP 值上正确工作,必须将字段数据类型定义为ip

下面是包含映射、示例文档和搜索查询的工作示例。

映射:

{
  "mappings": {
    "properties": {
      "dest": {
        "type": "ip"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

指数数据:

然后我采取了一些示例文档,如下所示:

{ "dest":"172.16.0.0"}
{ "dest":"172.31.0.0"}
{ "dest":"172.21.0.0"}
{ "dest":"172.1.0.0" }
{ "dest":"172.12.0.0"}
Run Code Online (Sandbox Code Playgroud)

搜索查询:

{
  "query": {
    "range": {
      "dest": {
        "gte": "172.16.0.0",
        "lte": "172.31.0.0"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

搜索结果 :

 "hits": [
         {
            "_index": "foo4",
            "_type": "_doc",
            "_id": "1",
            "_score": 1.0,
            "_source": {
               "dest": "172.16.0.0"
            }
         },
         {
            "_index": "foo4",
            "_type": "_doc",
            "_id": "2",
            "_score": 1.0,
            "_source": {
               "dest": "172.31.0.0"
            }
         },
         {
            "_index": "foo4",
            "_type": "_doc",
            "_id": "3",
            "_score": 1.0,
            "_source": {
               "dest": "172.21.0.0"
            }
         }
      ]
Run Code Online (Sandbox Code Playgroud)