首页 > 解决方案 > 基于 Python 的 DNS 流量嗅探器

问题描述

我正在尝试在 python 中编写 DNS 数据包嗅探器,以在找到 NXdomain 数据包时捕获信息,例如响应代码、查询、使用的传输协议、目标端口、权威名称服务器。

首先,我不知道从哪里开始。我在 youtube 上观看了一些教程,但其中大多数都在嗅探以太网帧并尝试从以太网帧内的(IP/ARP 帧)获取信息,但这些信息对我来说毫无用处,因为我想通过嗅探 DNS 数据包来捕获 DNS 信息.

任何帮助将非常感激。

标签: pythonnetworkingdnsnetwork-programmingsniffing

解决方案


在(大多数当前)DNS 流量的情况下,它将作为 UDP 数据报的有效负载进行传输,UDP 数据报本身也作为 Internet 协议数据报的有效负载进行传输,而正是这些数据报在以太网帧内传输。

我假设您熟悉以太网帧格式,并且了解有效负载在 14 个字节的标头之后开始(假设您是指以太网,而不是 802.3)。IPv4 数据报也使用固定长度的报头,这次是 20 字节,但也可能包含所谓的选项。

UDP 协议使用一个非常简单的 16 字节标头。

因此,如果您想快速猜测一下,没有 IP 选项的帧将在 (16+20+16) == 52 字节的较低级别标头之后开始 DNS 数据包。如果要处理所有数据包,则必须学习如何使用选项计算 IP 标头的长度。

dnspython库值得研究,因为它能够将字节流转换为 DNS 消息,这是访问 DNS 数据包信息的一种非常方便的方式。

此答案中没有代码,因为您的问题中没有代码。也许您可以跟进一个新问题,在该问题中您应该使您实际尝试过的代码失败 - 这会给回答者一个但没有继续工作的机会。


推荐阅读