在 PHP 中创建 DNS 请求

Creating a DNS request in PHP

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

这个有效:

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

$data = "{$domain1}{$domain2}";

现在的问题是如何创建 $data 以使字符串长度不被硬编码。 与此类似的东西(不起作用):

$domain = "example.com";
$bits = explode(".", $domain);
$data = '';
foreach ($bits as $bit) {
     $strlen = strlen($bit);
     $data .= decoct($strlen) . $bit;
}

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

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

$sld = "example";
$tld = "com";
$packed = pack("Ca*Ca*", strlen($sld), $sld, strlen($tld), $tld);

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