Я пытаюсь написать функцию для создания запроса DNS, а затем отправить его на сервер DNS через сокет. Я только добавил соответствующие части кода.
Это работает:
$domain1 = 'example';
$domain2 = 'com';
$data = "\7{$domain1}\3{$domain2}";
Теперь вопрос в том, как мне создать $ data, чтобы длины строк не были жестко закодированы.
Что-то похожее на это (что не работает):
$domain = "example.com";
$bits = explode(".", $domain);
$data = '';
foreach ($bits as $bit) {
$strlen = strlen($bit);
$data .= decoct($strlen) . $bit;
}
Я надеюсь, что объяснил это правильно, поскольку я не совсем уверен, как это работает.
Вам, вероятно, понадобится пак функция. Эта функция позволяет легко представлять двоичные данные, упакованные в строку PHP. Предполагая, что длина составляет 1 байт каждая (я думаю, что они есть):
$sld = "example";
$tld = "com";
$packed = pack("Ca*Ca*", strlen($sld), $sld, strlen($tld), $tld);
Посмотрите на различные символы формата, чтобы убедиться, что это то, что вам нужно.
Других решений пока нет …