在 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);
查看各种格式字符以确保这是您需要的。
我正在尝试编写一个函数来创建 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);
查看各种格式字符以确保这是您需要的。