提问人:Firehawk 提问时间:7/1/2023 最后编辑:Firehawk 更新时间:7/2/2023 访问量:24
PHP UDP 读取 DNS 推送通知
PHP UDP Read DNS Push Notification
问:
我正在尝试编写一个必须接收“DNS 推送通知”的 PHP 脚本,RFC8490
我想阅读域名、序列号的软件包,但我不知道是否存在其他信息以及所有其他信息。
收到 UDP 包时没有任何问题:
socket_recvfrom($socket, $udpData, 2048, 0, $remoteAddress, $remotePort);
现在我想获取可读信息$updData,我已经设法使用以下脚本获取域名:
// Unpack the UDP data
$unpackedData = unpack('ntransaction_id/nflags/nqdcount/nancount/nnscount/narcount', $udpData);
// Extract the domain name from the UDP data
$pointer = 12; // Start position of the domain name in the UDP data
// Iterate over the labels in the domain name
while ($udpData[$pointer] !== "\x00") {
$labelLength = ord($udpData[$pointer]);
$label = substr($udpData, $pointer + 1, $labelLength);
$domainName .= $label . '.';
$pointer += $labelLength + 1;
}
$domainName = rtrim($domainName, '.');
还没有找到如何获取DNS推送通知的序列号,如果其他我想获取这些序列号。
有人可以帮我解决这个问题吗?
我到处寻找解决方案,但直到现在还没有找到。
串行应适用于:
// Skip the domain name to reach the Answer section
$pointer += strlen(substr($udpData, $pointer)) + 5;
// Extract the serial number from the Answer section
$serialNumber = unpack('N', substr($udpData, $pointer + 20, 4))[1];
// Output the serial number
echo "Serial Number: " . $serialNumber . "\n";
但这不起作用,无法从通知中获取正确的序列号。
示例数据:
$udpData = 'O5gkAAABAAEAAAAACnRlc3Rkb21laW4CbmwAAAYAAcAMAAYAAQAAAAAANARuczAxCGlzcGNsb3VkwBcGbm90aWZ5BmlzcHdlYsAXeJWZ4wAAqMAAABwgACTqAAAABwg=';
$udpData=base64_decode($udpData);
答: 暂无答案
评论