偷看你在干嘛!golang实现, 基于dnsmasq的dns请求获取

Able · · 7936 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

源码地址

什么是dnsmasq(摘自网络)

Dnsmasq 提供 DNS 缓存和 DHCP 服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存 DNS 请求来提高对访问过的网址的连接速度。作为DHCP 服务器,dnsmasq 可以为局域网电脑提供内网ip地址和路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,适用于个人用户或少于50台主机的网络。此外它还自带了一个 PXE 服务器。
更多详细 https://wiki.archlinux.org/index.php/Dnsmasq_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

什么是dnsmasq_admin?

这个东西是针对dnsmasq产生的日志做筛选,将用户产生的访问记录发送到指定的电脑上, 然后管理员可以审查这些网址,并且可以屏蔽这些网址的访问。

原理

这就是一个小工具, 实用go完成, 原理是这样:

  1. dnsmasq 打开调试日志,指定一个日志输出地址。
  2. 获取源码并编译得到可执行程序。
  3. 在root下执行。将程序指定到日志, 比如开机运行:/home/gao/dnsmasq_admin /var/log/dnsmasq.log > /var/log/dnsmasq_amdin.log 2>&1 &
  4. 在收到任何用户的dns访问记录时, 这个程序会主动向另外一个启动了dnsmasq_admin地方发送数据。接受的地方就可以控制服务是否要将这个域名重定向到127.0.0.1这些不可用的域名上。

这个程序分两种模式运行, 一种是分析模式, 一种是监控模式。 可以从http.go 的代码中看出目的来:

func init() {
    http.HandleFunc("/api/send", addNewFetch)   //监控位置用来接收分析模式下发送的消息。 
    http.HandleFunc("/api/addHost", addHosts)   //追加hosts到dns服务器
    http.HandleFunc("/", list)          // 查看列表
    http.HandleFunc("/ip", listWithIp)  //某个ip的列表
    go http.ListenAndServe(":22225", nil) //启动的端口。 

}

在监控模式下, 直接访问http://localhost:22225 查看所有使用这个dns服务器的ip地址

192.168.0.41
192.168.0.60

点击任意一个ip地址, 可以得到这个ip下的用户所有的dns请求。

192.168.0.60 suggestion.baidu.com Block
192.168.0.60 sdup.360.cn Block
192.168.0.60 cdndownload.alipay.com Block
192.168.0.60 stat.sd.360.cn Block
192.168.0.60 tr.p.360.cn Block
192.168.0.60 image.baidu.com Block
192.168.0.60 t10.baidu.com Block
192.168.0.60 fm.dl.126.net Block

部署

然后,怎么让人用这个dnsmasq, 你可以将路由器里面,连接外网的dns服务器地址选项填写成你的dnsmasq地址。 然后所有的dhcp用户会自动使用你的dns服务。

dnsmasq记录日志的设置

dnsmasq.conf:

log-queries
log-facility=/var/log/dnsmasq.log

更多关于dnsmasq的信息:

https://wiki.archlinux.org/index.php/Dnsmasq_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

如果你想更多的了解dnsmasq_admin

貌似你可以从这里找到我 @ablegao


有疑问加站长微信联系

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:812540095

7936 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传