Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
dnsmonster — 被动DNS捕获与监控工具包 | Kitploit
工具/GitHubGitHub/fenkohq/dnsmonster
数据包嗅探与分析信息收集网络安全威胁情报DNS 分析日志分析
GitHubfenkohq/dnsmonster

dnsmonster

被动DNS捕获与监控工具包

查看仓库
360601914天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

Build Status Go Version Latest Version License Open Issues

我们正在探索dnsmonster的托管SaaS解决方案! 通过分享您的反馈和需求,帮助塑造被动DNS监控的未来:参加我们的快速调查

目录

  • Dnsmonster
  • 主要功能
  • 安装
    • Linux
      • 容器
      • 手动构建
      • 静态构建
    • Windows
    • FreeBSD 和 MacOS
  • 架构
    • 使用Docker的一体化安装
      • 一体化演示
    • 企业部署
  • 配置
    • 命令行选项
    • 环境变量
    • 配置文件
    • 保留策略是什么
  • 采样与跳过
    • 预处理采样
    • 跳过域名
    • 允许域名
    • Clickhouse SELECT查询中的SAMPLE
  • 支持的输入
  • 支持的输出
  • 路线图
  • 相关项目

Dnsmonster

基于Golang的被动DNS监控框架。 dnsmonster实现了一个用于DNS流量的数据包嗅探器。它可以接受来自pcap文件、实时接口或dnstap套接字的流量, 并且可用于索引和存储每秒数十万个DNS查询,因为它已经证明能够在普通计算机上每秒索引20万+个DNS查询。它旨在可扩展、简单且易于使用,并帮助 安全团队了解企业DNS流量的详细信息。dnsmonster不旨在跟踪DNS会话,而是旨在在DNS数据包到达时立即进行索引。它也不旨在侵犯 最终用户的隐私,具有屏蔽第三层IP(IPv4和IPv6)的能力,使团队能够对聚合数据进行趋势分析,而无法将查询追溯到个人。博客文章

1.x版本之前的代码被视为测试版质量,可能会有重大更改。请访问每个标签的发布说明,查看每个版本之间的重大更改场景,以及如何减轻潜在的数据丢失。```mermaid graph TD subgraph Input B1["network input"] B2["pcap file"] B3["dnstap socket"] end

subgraph "Process"
    C1["Sampling based of ratio"]
    C2["Packet Process"]
    C3["Dispatcher"]
    O11["Output1"]
    O12["Domain Skip (optional)"]
    O13["Domain Allow (optional)"]
    O21["Output2"]
    O22["Domain Skip (optional)"]
    O23["Domain Allow (optional)"]
    O31["Output3"]
    O32["Domain Skip (optional)"]
    O33["Domain Allow (optional)"]
end

B1 --> Process
B2 --> Process
B3 --> Process

C1 --> C2
C2 --> C3
C3 --> O11
C3 --> O21
C3 --> O31

O11 --> O12 --> O13
O21 --> O22 --> O23
O31 --> O32 --> O33

subgraph Output
    Splunk
    Syslog
    H["ClickHouse"]
    Postgres
    Kafka
    I["JSON File"]
    Influx
    Elastic
    J["stdout"]
    Parquet
    Sentinel
end

O13 --> H
O23 --> I
O33 --> J
# 主要特性

- 能够使用Linux的`afpacket`和零拷贝数据包捕获。
- 支持BPF
- 能够掩盖IP地址以增强隐私
- 支持预处理采样率
- 支持“跳过”`fqdn`列表,避免将某些域/后缀/前缀写入存储
- 支持“允许”域列表,用于记录对某些域的访问
- 跳过和允许域文件/URL的热重载
- 模块化输出,每个输出流可配置逻辑。
- 使用ClickHouse的TTL属性自动数据保留策略
- 内置的Grafana仪表板,用于ClickHouse输出。
- 能够作为单个静态链接的二进制文件分发
- 能够使用环境变量、命令行选项或配置文件进行配置
- 能够使用ClickHouse的SAMPLE功能对输出进行采样
- 能够使用`prometheus`和`statstd`发送指标
- 得益于ClickHouse内置的LZ4存储,具有高压缩比
- 支持DNS over TCP、分片DNS(udp/tcp)和IPv6
- 支持通过Unix套接字或TCP的[dnstap](https://github.com/dnstap/golang-dnstap)
- 与Splunk和Microsoft Sentinel的内置SIEM集成

# 安装

## Linux

开始使用`dnsmonster`的最佳方式是从发布版块下载二进制文件。该二进制文件针对`musl`静态构建,因此应该可以在许多发行版上开箱即用。对于`afpacket`支持,您必须使用内核3.x+。任何现代Linux发行版(CentOS/RHEL 7+、Ubuntu 14.0.4.2+、Debian 7+)都附带3.x+版本,因此应该可以开箱即用。如果您的发行版无法与预编译版本一起使用,请提交包含详细信息的问题,并使用本节的[手动构建](#build-manually)手动构建`dnsmonster`。

### 容器

由于`dnsmonster`使用原始数据包捕获功能,Docker/Podman守护程序必须向容器授予该能力```
sudo docker run --rm -it --net=host --cap-add NET_RAW --cap-add NET_ADMIN --name dnsmonster ghcr.io/mosajjal/dnsmonster:latest --devName lo --stdoutOutputType=1

手动构建

  • 使用 libpcap: 确保已安装 go、libpcap-devel 和 linux-headers 包。这些包的名称可能因您的发行版而异。之后,只需克隆仓库并运行 `go build ./cmd/dnsmonster````sh git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster cd /tmp/dnsmonster go get go build -o dnsmonster ./cmd/dnsmonster
- 不使用 `libpcap`:
`dnsmonster` 只使用了 `libpcap` 的一个函数,即把 `tcpdump` 风格的过滤器转换为 BPF 字节码。如果你可以接受没有 BPF 支持,你可以在没有 `libpcap` 的情况下构建 `dnsmonster`。请注意,对于任何其他平台,数据包捕获会回退到 `libpcap`,因此它成为一个硬性依赖(*BSD、Windows、Darwin)```sh
git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster 
cd /tmp/dnsmonster
go get
go build -o dnsmonster -tags nolibpcap ./cmd/dnsmonster

以上构建同样适用于 ARMv7(RPi4)和 AArch64。

静态构建

如果你有 libpcap.a 的副本,你可以将其静态链接到 dnsmonster,并完全静态构建它。在下面的代码中,请将 /root/libpcap-1.9.1/libpcap.a 替换为你副本所在的位置。``` git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster cd /tmp/dnsmonster/ go get go build --ldflags "-L /root/libpcap-1.9.1/libpcap.a -linkmode external -extldflags "-I/usr/include/libnl3 -lnl-genl-3 -lnl-3 -static"" -a -o dnsmonster ./cmd/dnsmonster

有关如何创建静态链接二进制文件的更多信息,请查看[此](https://github.com/fenkohq/dnsmonster/blob/main/Dockerfile) Dockerfile。

## Windows

在 Windows 上构建与 Linux 大致相同。只需确保已安装 `npcap`。克隆仓库(`--history 1` 即可),然后运行 `go get` 和 `go build ./cmd/dnsmonster`

如前所述,Windows 版本的二进制文件依赖于 [npcap](https://nmap.org/npcap/#download) 的安装。安装后,二进制文件应该可以直接使用。它已在 Windows 10 环境中测试过,且运行无问题。要查找接口名称以提供给 `--devName` 参数并开始嗅探,您需要执行以下操作:

  - 以管理员身份打开 cmd.exe,运行以下命令:`getmac.exe`,您将看到一个包含接口 MAC 地址的表格,以及一个类似如下的“传输名称”列:`\Device\Tcpip_{16000000-0000-0000-0000-145C4638064C}`
  - 在 `cmd.exe` 中像这样运行 `dnsmonster.exe`:```sh
dnsmonster.exe --devName \Device\NPF_{16000000-0000-0000-0000-145C4638064C}

请注意,您必须将 \Tcpip 从 getmac.exe 更改为 \NPF,然后将其传递给 dnsmonster.exe。

FreeBSD and MacOS

与 Linux 和 Windows 基本类似,请确保已安装 git、libpcap 和 go,然后按照相同的说明进行操作:```sh git clone https://github.com/mosajjal/dnsmonster --depth 1 /tmp/dnsmonster cd /tmp/dnsmonster go get go build -o dnsmonster ./cmd/dnsmonster

# 架构

## 使用 Docker 进行一体化安装

![Basic AIO Diagram](https://raw.githubusercontent.com/fenkohq/dnsmonster/HEAD/static/dnsmonster-basic.svg)

在示例图中,捕获了DNS服务器流量的出/入口,之后在到达DNSMonster服务器之前添加了一个可选的流量聚合层。从DNS服务器出去的出站数据对于对DNS集群进行缓存和性能分析非常有用。如果聚合器不可用,可以将两个TAP直接连接到DNSMonster,并由两个DNSMonster代理查看流量。

运行 `./autobuild.sh` 会创建多个容器:

* 多个 `dnsmonster` 实例用于查看任何接口上的流量。接口列表将在 `autobuild.sh` 运行时提示。
* 一个 `clickhouse` 实例用于收集 `dnsmonster` 的输出,并将所有日志/数据保存到数据和日志目录。两者将在 `autobuild.sh` 运行时提示。
* 一个 `grafana` 实例用于查看 `clickhouse` 数据,并带有预构建的仪表板。

### 一体化演示

[![AIO Demo](https://raw.githubusercontent.com/fenkohq/dnsmonster/HEAD/static/aio_demo.svg)](static/aio_demo.svg)

## 企业部署

![Basic AIO Diagram](https://raw.githubusercontent.com/fenkohq/dnsmonster/HEAD/static/dnsmonster-enterprise.svg)

# 配置

DNSMonster 可以通过 3 种不同的方式进行配置:命令行选项、环境变量和配置文件。优先级顺序:

- 命令行选项(不区分大小写)
- 环境变量(始终大写)
- 配置文件(区分大小写,小写)
- 默认值(无配置)

## 命令行选项

注意,从 v0.9.5 开始,命令行参数不区分大小写

[//]: <> (start of command line options)```sh
# [capture]
# Device used to capture
--devname=

# Pcap filename to run
--pcapfile=

# dnstap socket path. Example: unix:///tmp/dnstap.sock, tcp://127.0.0.1:8080
--dnstapsocket=

# Port selected to filter packets
--port=53

# Capture Sampling by a:b. eg sampleRatio of 1:100 will process 1 percent of the incoming packets
--sampleratio=1:1

# Cleans up packet hash table used for deduplication
--dedupcleanupinterval=1m0s

# Set the dnstap socket permission, only applicable when unix:// is used
--dnstappermission=755

# Number of routines used to handle received packets
--packethandlercount=2

# Size of the tcp assembler
--tcpassemblychannelsize=10000

# Size of the tcp result channel
--tcpresultchannelsize=10000

# Number of routines used to handle tcp packets
--tcphandlercount=1
下载工具