A Problem in Parsing CNAME with Libpcap: 一些 CNAME 似乎缺少 TLD
A Problem in Parsing CNAME with Libpcap: some CNAMEs seems missing TLD
我正在使用 libpcap 编写 DNS 回复解析器,发现某些 CNAME 的 TLD 似乎从相应的 DNS 数据包负载中丢失。示例数据包的 wireshark dissection 中显示了一个示例,其中 wireshark 显示实际的 CNAME 是
prd-push-access-net5-175542503.us-east-1.elb.amazonaws.com
但我只能找到
prd-push-access-net5-175542503.us-east-1.elb.amazonaws
(即没有“.com”)在有效载荷的相应部分。我想知道一个人(以及 wireshark 如何)如何从这个有效负载中解析完整的 CNAME(带有“.com”)?
(此 CNAME 似乎格式不正确,因为根据 RFC1035,有问题的 QNAME 部分应该 "terminates with the zero length octet for the null label of the root",我想这同样适用于 CNAME?)
DNS 数据包使用名称压缩,参见 https://www.rfc-editor.org/rfc/rfc1035 4.1.4 节
在许多地方(名字出现的地方),每个标签都可以用一个指针来表示,该指针指向数据包中它已经出现的以前的位置,而不是字符串。
在你的例子中,我们可以清楚地看到数据包前面的 myfoscam.com
中的 com
。
所以对于内容(只使用结尾因为从图像中提取数据很繁琐,你应该把东西复制为文本)03656c6209616d617a6f6e617773c019c02e00
我们必须这样分析它:
03
:下面是长度为3 的字符串
656c62
:这是字符串 elb
,广告长度为 3
09
:下面是长度为9 的字符串
616d617a6f6e617773
:这是字符串amazonaws
c0
:前两位为 1(因为它的值为 192,所以大于或等于 128+64),这意味着它是两字节指针的一部分。因此,c019
是一个指向数据包中十进制偏移量 25(十六进制中的 19
)的指针。
所以如果你从整个数据包开始,并切换到偏移量 25,你应该找到序列 03636f6d
,它是 com
(前缀长度为 3)。
或者可能是别的东西,因为实际上你还有另一个指针:c02e
,所以这是消息中的偏移量 46。或者那部分完全是为了别的东西,它实际上取决于前一个指针指向的内容,它是否以空标签结束(如果它在偏移量 25 处是否为 03636f6d00
)。请参阅 RFC 中的示例(and/or 在您的问题中将所有数据包内容作为文本提供)
然后它以00
空标签结束,这意味着根(隐藏在任何名称末尾的.
)。
我正在使用 libpcap 编写 DNS 回复解析器,发现某些 CNAME 的 TLD 似乎从相应的 DNS 数据包负载中丢失。示例数据包的 wireshark dissection
prd-push-access-net5-175542503.us-east-1.elb.amazonaws.com
但我只能找到
prd-push-access-net5-175542503.us-east-1.elb.amazonaws
(即没有“.com”)在有效载荷的相应部分。我想知道一个人(以及 wireshark 如何)如何从这个有效负载中解析完整的 CNAME(带有“.com”)?
(此 CNAME 似乎格式不正确,因为根据 RFC1035,有问题的 QNAME 部分应该 "terminates with the zero length octet for the null label of the root",我想这同样适用于 CNAME?)
DNS 数据包使用名称压缩,参见 https://www.rfc-editor.org/rfc/rfc1035 4.1.4 节
在许多地方(名字出现的地方),每个标签都可以用一个指针来表示,该指针指向数据包中它已经出现的以前的位置,而不是字符串。
在你的例子中,我们可以清楚地看到数据包前面的 myfoscam.com
中的 com
。
所以对于内容(只使用结尾因为从图像中提取数据很繁琐,你应该把东西复制为文本)03656c6209616d617a6f6e617773c019c02e00
我们必须这样分析它:
03
:下面是长度为3 的字符串
656c62
:这是字符串elb
,广告长度为 309
:下面是长度为9 的字符串
616d617a6f6e617773
:这是字符串amazonaws
c0
:前两位为 1(因为它的值为 192,所以大于或等于 128+64),这意味着它是两字节指针的一部分。因此,c019
是一个指向数据包中十进制偏移量 25(十六进制中的19
)的指针。
所以如果你从整个数据包开始,并切换到偏移量 25,你应该找到序列 03636f6d
,它是 com
(前缀长度为 3)。
或者可能是别的东西,因为实际上你还有另一个指针:c02e
,所以这是消息中的偏移量 46。或者那部分完全是为了别的东西,它实际上取决于前一个指针指向的内容,它是否以空标签结束(如果它在偏移量 25 处是否为 03636f6d00
)。请参阅 RFC 中的示例(and/or 在您的问题中将所有数据包内容作为文本提供)
然后它以00
空标签结束,这意味着根(隐藏在任何名称末尾的.
)。