DNSLog-GO 是一款golang编写的监控 DNS 解析记录的工具,自带WEB界面 / DNSLog-GO is a monitoring tool written in Golang that monitors DNS resolution records. It comes with a web interface.
Overview
- docker一行命令部署 - WEB界面 或者 API 模式 - 多账号,可供多人使用。或者工具扫描和人工测试,数据互不干扰 - 支持通过置DNA A记录,用于临时测试或者ns服务自解析 详细图文教程:https://mp.weixin.qq.com/s/m_UXJa0imfOi721bkBpwFg 这里 https://github.com/lanyi1998/DNSlog-GO/releases 下载最新发行版,并解压 可以从 GitHub Releases 下载适合当前操作系统的 CLI:dnslog-cli-macos.zip、dnslog-cli-linux.zip 或 dnslog-cli-windows.zip(均为 amd64)。解压后得到 dnslog-cli(Windows 为 dnslog-cli.exe),将其所在目录加入 PATH 后即可使用。 token 可能被 shell 历史记录保存。共享机器上建议临时关闭历史记录,或改用环境变量。CLI 默认把配置写入 ~/.config/dnslog-go/config.yaml,文件权限为 0600: verify-dns 和 verify-http 会先立即查询一次;未找到时默认每 500ms 重试,最多等待 10s。可以通过 --timeout 和 --interval 调整,或使用 --timeout 0 禁用轮询。 轮询期间成功查询但未命中时返回 {"found":false};请求失败或在请求过程中超时时返回非零退出码,并将错误写入标准错误。 除帮助信息外,CLI 的标准输出均为 JSON,错误写入标准错误,适合 Agent 调用。
README
简介
DNSLog-GO 是一款golang编写的监控 DNS 解析记录的工具。
支持:
- docker一行命令部署
- WEB界面 或者 API 模式
- 多账号,可供多人使用。或者工具扫描和人工测试,数据互不干扰
- 支持通过置DNA A记录,用于临时测试或者ns服务自解析
演示截图:
安装
详细图文教程:https://mp.weixin.qq.com/s/m_UXJa0imfOi721bkBpwFg
1.获取发行版
这里 https://github.com/lanyi1998/DNSlog-GO/releases 下载最新发行版,并解压
或者docker启动
wget https://raw.githubusercontent.com/lanyi1998/DNSlog-GO/master/config.yaml
#修改你的config.yaml文件
docker run -d -p 53:53 -p 53:53/udp -p 8000:8000 -v `pwd`/config.yaml:/DNSlog-GO/config.yaml --name dnslog --privileged --restart=always lanyi1998/dnslog-go:latest
2.域名与公网 IP 准备
搭建并使用 DNSLog,你需要拥有一个域名如(a.com),还需要有一个公网 IP 地址(如:1.1.1.1)
修改 a.com 的 NS 记录为
NS1.vpsip.NIP.IO
NS2.vpsip.NIP.IO
如
ns1.1.1.1.1.nip.io
ns1.1.1.1.1.nip.io
本步骤中,需要在域名提供商提供的页面进行设置,部分域名提供商只允许修改 NS 记录为已经认证过的 NS 地址。所以需要找一个支持修改 NS 记录为自己 NS 的域名提供商。
注意: NS 记录修改之后部分地区需要 24-48 小时会生效
3.修改配置文件 config.ini
Http:
host: 0.0.0.0
port: 8000
consoleDisable: false
User:
#"token":"用户对应子域名"
'admin': 'dnslog'
Dns:
domain: demo.com
ARecord:
'www': '1.1.1.1'
4.启动对应系统的客户端
注意服务端重启以后,如果修改了用户对应子域名,必须清空一下浏览器中的localStorage,否则会获取不到数据
API Python Demo
import requests
import random
import json
class DnsLog():
domain = ""
token = ""
Webserver = ""
def __init__(self, Webserver, token):
self.Webserver = Webserver # dnslog的http监听地址,格式为 ip:端口
self.token = token # token
# 检测DNSLog服务器是否正常
res = requests.post("http://" + Webserver + "/api/verifyToken", json={"token": token}).json()
if res['code'] == 401:
exit(res['msg'])
self.domain = res['data']['subdomain']
# 生成随机子域名
def randomSubDomain(self, length=5):
subDomain = ''.join(random.sample('zyxwvutsrqponmlkjihgfedcba', length)) + '.' + self.domain
return subDomain
# 验证子域名是否存在
def checkDomain(self, domain):
res = requests.post("http://" + self.Webserver + "/api/verifyDns", json={"Query": domain},
headers={"token": self.token}).json()
if res["msg"] == 'success':
return True
else:
return False
url = "https://www.baidu.com/"
dns = DnsLog("1.1.1.1:8000", "admin")
subDomain = dns.randomSubDomain()
payload = {
"b": {
"@type": "java.net.Inet4Address",
"val": subDomain
}
}
requests.post(url, json=payload)
if dns.checkDomain(subDomain):
print("存在FastJosn")
5. CLI
可以从 GitHub Releases 下载适合当前操作系统的 CLI:dnslog-cli-macos.zip、dnslog-cli-linux.zip 或 dnslog-cli-windows.zip(均为 amd64)。解压后得到 dnslog-cli(Windows 为 dnslog-cli.exe),将其所在目录加入 PATH 后即可使用。
构建 CLI:
make build-cli
使用 CLI 写入连接配置,无需手动创建配置文件:
./build/dnslog-cli config set \
--url "http://127.0.0.1:8000" \
--token "admin"
token 可能被 shell 历史记录保存。共享机器上建议临时关闭历史记录,或改用环境变量。CLI 默认把配置写入 ~/.config/dnslog-go/config.yaml,文件权限为 0600:
base_url: http://127.0.0.1:8000
token: admin
也可以通过环境变量提供配置。环境变量的优先级高于配置文件:
export DNSLOG_BASE_URL="http://127.0.0.1:8000"
export DNSLOG_TOKEN="admin"
DNSLOG_CONFIG 可以指定其他配置文件路径。常用命令:
./build/dnslog-cli verify-token
./build/dnslog-cli config path
./build/dnslog-cli get-dns
./build/dnslog-cli verify-dns abc.dnslog.demo.com
./build/dnslog-cli verify-http /dnslog/test --timeout 15s --interval 1s
./build/dnslog-cli random-domain
./build/dnslog-cli help
verify-dns 和 verify-http 会先立即查询一次;未找到时默认每 500ms 重试,最多等待 10s。可以通过 --timeout 和 --interval 调整,或使用 --timeout 0 禁用轮询。
轮询期间成功查询但未命中时返回 {"found":false};请求失败或在请求过程中超时时返回非零退出码,并将错误写入标准错误。
除帮助信息外,CLI 的标准输出均为 JSON,错误写入标准错误,适合 Agent 调用。
6. Agent Skill
仓库提供了可配合 CLI 使用的 Agent Skill:skills/dnslog-go。Skill 不保存或接收 token,CLI 会自动从环境变量或用户配置文件读取凭据。
安装 CLI:
go install github.com/lanyi1998/DNSlog-GO/cmd/dnslog-cli@latest
也可以从 GitHub Releases 下载对应系统的 dnslog-cli-*.zip,无需安装 Go。解压后将 dnslog-cli(Windows 为 dnslog-cli.exe)所在目录加入 PATH,确保 Skill 能通过 dnslog-cli 命令调用。可运行 dnslog-cli help 检查安装是否成功。
将 Skill 安装到 Codex:
mkdir -p ~/.codex/skills
cp -R skills/dnslog-go ~/.codex/skills/dnslog-go
之后可以通过 $dnslog-go 显式调用,也可以让 Agent 在处理 DNSlog-GO 任务时自动选择它。
7. Golang SDK
package main
import (
"net/http"
"github.com/lanyi1998/DNSlog-GO/pkg/sdk"
)
func main() {
client, err := sdk.NewDnsLogClient("http://127.0.0.1:8000", "admin")
if err != nil {
panic(err)
}
dnslog := client.RandomSubDomain(10)
client.RandomSSRFUrl(10)
http.Get("http://" + dnslog)
// 一个http请求一个dns
if ok, _ := client.VerifyDns(dnslog); ok {
println(">> [DNS] 验证成功", dnslog)
}
// 一个请求验证多个DNS,高效率,适用于扫描器等大批量发送dns请求的场景
if ok, _ := client.VerifyDnsV2(dnslog); ok {
println(">> [DNS] 验证成功", dnslog)
}
client.Clear()
}
Stargazers over time
404星链计划
DNSlog-Go 现已加入 404星链计划
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add lanyi1998/dnslog-go

