python - 基于 Python 的 DNS 流量嗅探器
问题描述
我正在尝试在 python 中编写 DNS 数据包嗅探器,以在找到 NXdomain 数据包时捕获信息,例如响应代码、查询、使用的传输协议、目标端口、权威名称服务器。
首先,我不知道从哪里开始。我在 youtube 上观看了一些教程,但其中大多数都在嗅探以太网帧并尝试从以太网帧内的(IP/ARP 帧)获取信息,但这些信息对我来说毫无用处,因为我想通过嗅探 DNS 数据包来捕获 DNS 信息.
任何帮助将非常感激。
解决方案
在(大多数当前)DNS 流量的情况下,它将作为 UDP 数据报的有效负载进行传输,UDP 数据报本身也作为 Internet 协议数据报的有效负载进行传输,而正是这些数据报在以太网帧内传输。
我假设您熟悉以太网帧格式,并且了解有效负载在 14 个字节的标头之后开始(假设您是指以太网,而不是 802.3)。IPv4 数据报也使用固定长度的报头,这次是 20 字节,但也可能包含所谓的选项。
UDP 协议使用一个非常简单的 16 字节标头。
因此,如果您想快速猜测一下,没有 IP 选项的帧将在 (16+20+16) == 52 字节的较低级别标头之后开始 DNS 数据包。如果要处理所有数据包,则必须学习如何使用选项计算 IP 标头的长度。
该dnspython
库值得研究,因为它能够将字节流转换为 DNS 消息,这是访问 DNS 数据包信息的一种非常方便的方式。
此答案中没有代码,因为您的问题中没有代码。也许您可以跟进一个新问题,在该问题中您应该使您实际尝试过的代码失败 - 这会给回答者一个但没有继续工作的机会。
推荐阅读
- python - 转化为列表理解
- javascript - Angular7:延迟加载不创建块
- google-sheets - 我需要自动打印当前月份的日期
- reactjs - 根据所选值反应重新渲染表单选项
- pthreads - asyncio 代码可以安全地调用使用 pthread 的本机库吗?
- swift - RxSwift Swift 5 中的平面图
- c# - c#如何防止对同一个文件的多次访问
- amazon-web-services - 由于 S3 存储桶已删除,无法检索 terraform 状态
- r - 如何从 ggplot2 中的 1-4 比例数据制作堆叠百分比列
- angularjs - $state.go 在转换钩子 (transition.Onstart) 中使用最新的 UI 路由器框架 (1.0.16)