Python PDNS protobuf接收器到JSON流

pdns-protobuf-receiver的Python项目详细描述


PowerDNS协议接收器

License: MITPyPI - Python Version

pdns_protobuf_receiver是python3中的一个守护进程,它充当PowerDNS产品的protobuf服务器。您可以使用它来收集DNS查询和响应,并记录到syslog或json远程tcp收集器。在

目录

安装

PyPI

在pypi中,使用pip命令部署pdns_protobuf_receiver。 只支持Python3。在

pipinstallpdns-protobuf-receiver

安装后,pdns_protobuf_receiver二进制文件可用

Docker Hub

从Docker Hub拉出pdns协议接收器映像。在

^{pr2}$

部署容器

docker run -d -p 50001:50001 --name=pdns-pb01 dmachard/pdns-protobuf-receiver

容器遵循日志

docker logs pdns-pb01 -f

执行接收器

默认情况下,接收器在0.0.0.0接口和50001 tcp端口上侦听

如果要以JSON格式打印对stdout的DNS查询和响应,请执行pdns_protobuf接收器,如下所示:

# pdns_protobuf_receiver -v
2020-05-29 18:39:08,579 Start pdns protobuf receiver...
2020-05-29 18:39:08,580 Using selector: EpollSelector

如果要将protobuf消息重新发送到远程tcp收集器 启动pdns_protobuf接收器,如下所示:

# pdns_protobuf_receiver -j 10.0.0.235:6000 -v
2020-05-29 18:39:08,579 Start pdns protobuf receiver...
2020-05-29 18:39:08,580 Using selector: EpollSelector
2020-05-29 18:39:08,580 Connecting to 10.0.0.235 6000
2020-05-29 18:39:08,585 Connected to 10.0.0.235 6000

启动选项

命令行选项包括:

usage: -c [-h] [-l L] [-j J] [-v]

optional arguments:
  -h, --help  show this help message and exit
  -l L        listen protobuf dns message on tcp/ip address <ip:port>
  -j J        write JSON payload to tcp/ip address <ip:port>
  -v          verbose mode

JSON日志格式

pdns_protbuf接收器生成的每个事件的格式如下:

{"dns_message":"AUTH_QUERY","socket_family":"IPv6","socket protocol":"UDP","from_address":"0.0.0.0","to_address":"184.26.161.130","query_time":"2020-05-29 13:46:23.322","response_time":"1970-01-01 01:00:00.000","latency":0,"query_type":"A","query_name":"a13-130.akagtm.org.","return_code":"NOERROR","bytes":4}

密钥说明:

  • dns_消息:PDNS消息类型(客户端查询、客户端响应…)
  • 套接字系列:使用的IP协议(IPv4或IPv6)
  • 套接字协议:使用的传输协议(UDP或TCP)
  • 发件人地址:查询者IP地址
  • 目标地址:目标IP地址
  • 查询时间:接收查询的时间
  • 响应时间:接收响应的时间
  • 延迟:查询和响应时间之间的差异
  • 查询类型:查询类型(A、AAAA、NS…)
  • 查询名称:查询名称
  • return_code:发送回客户端的响应代码(NXDOMAIN,NOERROR,…)
  • 字节:查询或响应的字节大小

PowerDNS配置

您需要将dnsdist或pdns recursor配置为活动的远程日志记录。在

DNS列表

配置dnsdist /etc/dnsdist/dnsdist.conf,并添加以下行 使用pdns_protobuf_接收器的地址设置newRemoteLogger函数 实例。在

rl = newRemoteLogger("10.0.0.97:50001")
addAction(AllRule(),RemoteLogAction(rl))
addResponseAction(AllRule(),RemoteLogResponseAction(rl))

重新启动dnsdist。在

pdns递归器

配置powerdns递归器/etc/pdns-recursor/recursor.conf,并添加以下行

lua-config-file=/etc/pdns-recursor/recursor.lua

创建LUA文件/etc/pdns-recursor/recursor.lua 使用pdns_protobuf接收器实例的地址设置protobufServer或outgoingProtobufServer函数。在

protobufServer("10.0.0.97:50001", {logQueries=true,
                                   logResponses=true,
                                   exportTypes={'A', 'AAAA',
                                                'CNAME', 'MX', 
                                                'PTR', 'NS',
                                                'SPF', 'SRV',
                                                'TXT'}} )
outgoingProtobufServer("10.0.0.97:50001",  {logQueries=true,
                                            logResponses=true,
                                            exportTypes={'A', 'AAAA',
                                                         'CNAME', 'MX',
                                                         'PTR', 'NS',
                                                         'SPF', 'SRV',
                                                         'TXT'}})

重新启动递归器。在

关于

AuthorDenis Machard d.machard@gmail.com
PyPIhttps://pypi.org/project/pdns-protobuf-receiver/
Githubhttps://github.com/dmachard/pdns-protobuf-receiver
DockerHubhttps://hub.docker.com/r/dmachard/pdns-protobuf-receiver

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java SUN次要代码309含义   java避免为空元素生成XML自关闭标记,并生成自定义的<XML>开始标记   java使用json和restful将数组数据从本地sqlite数据库插入SQL Server   java Spring Boot 1.5.9字符编码问题   LInkedIn讨论中的java 401错误   位图Java:检查多个位向量/位集是否相交的最快方法?   macos如何让Java应用程序以图标出现在Mac OS X dock中   java如何删除netbeans中的@SuppressWarnings(“未使用的”)?   apachestorm中的java自定义序列化   java可以退出代码还是应该终止main?   递归如何在Java中递归地绘制简单的线条?   unicode在Java中确定特定字体是否可以呈现特定字符   打开并阅读带有Selenium/Katalon(Java)特定标题的电子邮件文本(来自Gmail)