在PHP中创建DNS请求

在PHP中创建DNS请求,php,dns,packet,Php,Dns,Packet,我正在尝试编写一个函数来创建DNS请求,然后通过套接字将其发送到DNS服务器。我只添加了代码的相关部分 这项工作: $domain1 = 'example'; $domain2 = 'com'; $data = "\7{$domain1}\3{$domain2}"; 现在的问题是如何创建$data,以便字符串长度不被硬编码。 类似于此(不起作用): 我希望我的解释是正确的,因为我不确定它是如何工作的。您可能需要这个函数。此函数允许您轻松地表示打包到PHP字符串中的二进制数据。假设每个长度为1

我正在尝试编写一个函数来创建DNS请求,然后通过套接字将其发送到DNS服务器。我只添加了代码的相关部分

这项工作:

$domain1 = 'example';
$domain2 = 'com';

$data = "\7{$domain1}\3{$domain2}";
现在的问题是如何创建$data,以便字符串长度不被硬编码。 类似于此(不起作用):

我希望我的解释是正确的,因为我不确定它是如何工作的。

您可能需要这个函数。此函数允许您轻松地表示打包到PHP字符串中的二进制数据。假设每个长度为1字节(我认为是):


查看各种格式字符,以确保这是您所需要的。

由于我不熟悉DNS请求,我会问什么是
6
3
,因为它肯定不是字符串长度?示例是7个字符长,并且您的函数生成的字符串没有反斜杠。我的错,应该是7和3。很抱歉,只要加上反斜杠,就会得到同样的结果。下面Dho的回答将帮助您:)这一个的预期输出是什么?谢谢。格式字符串中缺少*s。预期输出实际上是“\x07example\x03com”。
$domain = "example.com";
$bits = explode(".", $domain);
$data = '';
foreach ($bits as $bit) {
     $strlen = strlen($bit);
     $data .= decoct($strlen) . $bit;
}
$sld = "example";
$tld = "com";
$packed = pack("Ca*Ca*", strlen($sld), $sld, strlen($tld), $tld);