修复与更新:改变了DNS接收解析的方式,能够适应GoogleDNS、CloudFlareDNS请求时夹带DNSSEC的请求

This commit is contained in:
Enoch 2024-01-29 16:32:33 +08:00
parent 2fab753800
commit e8c16dd28c
3 changed files with 142 additions and 17 deletions

View File

@ -1,20 +1,48 @@
<?php <?php
#print_r(dns_get_record('icu',DNS_SOA)); $data='a7df00100001000000000001013103646e730457434c4d0264650000010001000029057800008000000b00080007000118007541b3';
$url='al.c919.n3n.com.cn'; $id=substr($data,0,4);
while(true){ $flag=substr($data,4,4);
preg_match("#\.(.*)#i",$url,$match);//获取根域名 $questions=substr($data,8,4);
$domin = $match[1]; $answerRRs=substr($data,12,4);
print_r($domin); $authorityRRs=substr($data,16,4);
$soa=dns_get_record($domin,DNS_SOA); $additionalRRs=substr($data,20,4);
if(array_key_exists('0',$soa)){ $startbyte=24;
if(array_key_exists('mname',$soa[0])){ $dlen=substr($data,$startbyte,2);
print_r($soa[0]); $startbyte=26;
break; $i=1;
}else{ while($dlen!='00'){
$url=$domin; $domain[$i]=hex2bin(substr($data,$startbyte,hexdec($dlen)*2));
} $startbyte=$startbyte+(hexdec($dlen)*2);
}else{ $dlen=substr($data,$startbyte,2);
$url=$domin; $startbyte=$startbyte+2;
$i++;
} }
$name=join(".",$domain);
$type=substr($data,$startbyte,4);
switch($type){
case '0001':
$type='A';
break;
case '0002':
$type='NS';
break;
case '000c':
$type='PTR';
break;
case '0006':
$type='SOA';
break;
case '001c':
$type='AAAA';
break;
case '0005':
$type='CNAME';
break;
case '0010':
$type='TEXT';
break;
case '000f':
$type='MX';
break;
} }
?> $query=substr($data,24,$startbyte-20);

View File

@ -766,3 +766,46 @@ Stack trace:
2022-12-18 10:00:06 pid:4770 Workerman[start.php] start in DEBUG mode 2022-12-18 10:00:06 pid:4770 Workerman[start.php] start in DEBUG mode
2022-12-18 10:00:16 pid:4770 Workerman[start.php] stopping ... 2022-12-18 10:00:16 pid:4770 Workerman[start.php] stopping ...
2022-12-18 10:00:16 pid:4770 Workerman[start.php] has been stopped 2022-12-18 10:00:16 pid:4770 Workerman[start.php] has been stopped
2024-01-29 07:41:24 pid:1257 Workerman[start.php] start in DEBUG mode
2024-01-29 07:49:27 pid:1257 Workerman[start.php] stopping ...
2024-01-29 07:49:27 pid:1257 Workerman[start.php] has been stopped
2024-01-29 07:49:28 pid:2216 Workerman[start.php] start in DEBUG mode
2024-01-29 07:56:55 pid:2216 Workerman[start.php] stopping ...
2024-01-29 07:56:55 pid:2216 Workerman[start.php] has been stopped
2024-01-29 07:56:57 pid:3166 Workerman[start.php] start in DEBUG mode
2024-01-29 07:57:24 pid:3166 Workerman[start.php] stopping ...
2024-01-29 07:57:24 pid:3166 Workerman[start.php] has been stopped
2024-01-29 07:57:24 pid:3279 Workerman[start.php] start in DEBUG mode
2024-01-29 08:26:44 pid:3279 Workerman[start.php] stopping ...
2024-01-29 08:26:44 pid:3279 Workerman[start.php] has been stopped
2024-01-29 08:26:45 pid:6855 Workerman[start.php] start in DEBUG mode
2024-01-29 08:27:10 pid:6855 Workerman[start.php] stopping ...
2024-01-29 08:27:11 pid:6855 Workerman[start.php] stopping ...
2024-01-29 08:27:11 pid:6855 Workerman[start.php] stopping ...
2024-01-29 08:27:11 pid:6855 Workerman[start.php] stopping ...
2024-01-29 08:27:12 pid:6855 Workerman[start.php] stopping ...
2024-01-29 08:27:12 pid:6855 Workerman[start.php] stopping ...
2024-01-29 08:27:12 pid:6855 worker[none:6857] exit with status 9
2024-01-29 08:27:12 pid:6855 Workerman[start.php] has been stopped
2024-01-29 08:27:30 pid:7036 Workerman[start.php] start in DEBUG mode
2024-01-29 08:27:57 pid:7036 Workerman[start.php] stopping ...
2024-01-29 08:27:57 pid:7036 Workerman[start.php] has been stopped
2024-01-29 08:27:57 pid:7144 Workerman[start.php] start in DEBUG mode
2024-01-29 08:28:17 pid:7144 Workerman[start.php] stopping ...
2024-01-29 08:28:17 pid:7144 Workerman[start.php] has been stopped
2024-01-29 08:28:18 pid:7222 Workerman[start.php] start in DEBUG mode
2024-01-29 08:28:46 pid:7222 Workerman[start.php] stopping ...
2024-01-29 08:28:46 pid:7222 Workerman[start.php] has been stopped
2024-01-29 08:28:46 pid:7312 Workerman[start.php] start in DEBUG mode
2024-01-29 08:29:09 pid:7312 Workerman[start.php] stopping ...
2024-01-29 08:29:09 pid:7312 Workerman[start.php] has been stopped
2024-01-29 08:29:09 pid:7388 Workerman[start.php] start in DEBUG mode
2024-01-29 08:29:19 pid:7388 Workerman[start.php] stopping ...
2024-01-29 08:29:19 pid:7388 Workerman[start.php] has been stopped
2024-01-29 08:29:20 pid:7446 Workerman[start.php] start in DEBUG mode
2024-01-29 08:29:34 pid:7446 Workerman[start.php] stopping ...
2024-01-29 08:29:34 pid:7446 Workerman[start.php] has been stopped
2024-01-29 08:29:34 pid:7515 Workerman[start.php] start in DEBUG mode
2024-01-29 08:29:51 pid:7515 Workerman[start.php] stopping ...
2024-01-29 08:29:51 pid:7515 Workerman[start.php] has been stopped
2024-01-29 08:29:51 pid:7583 Workerman[start.php] start in DEBUG mode

View File

@ -369,8 +369,11 @@ class Dns
*/ */
public static function decode($buffer) public static function decode($buffer)
{ {
/**
$data=bin2hex($buffer); $data=bin2hex($buffer);
echo $data;
$id=substr($data,0,4); $id=substr($data,0,4);
$flag=substr($data,5,4);
$type=substr($data,-8,4); $type=substr($data,-8,4);
switch($type){ switch($type){
case '0001': case '0001':
@ -410,8 +413,59 @@ class Dns
} }
$realname=substr($realname,1,-1); $realname=substr($realname,1,-1);
$query=substr($data,24); $query=substr($data,24);
***/
#$returndata="$type".'|||'."$realname"; #$returndata="$type".'|||'."$realname";
$data=bin2hex($buffer);
$id=substr($data,0,4);
$flag=substr($data,4,4);
$questions=substr($data,8,4);
$answerRRs=substr($data,12,4);
$authorityRRs=substr($data,16,4);
$additionalRRs=substr($data,20,4);
$startbyte=24;
$dlen=substr($data,$startbyte,2);
$startbyte=26;
$i=1;
while($dlen!='00'){
$domain[$i]=hex2bin(substr($data,$startbyte,hexdec($dlen)*2));
$startbyte=$startbyte+(hexdec($dlen)*2);
$dlen=substr($data,$startbyte,2);
$startbyte=$startbyte+2;
$i++;
}
$realname=join(".",$domain);
$type=substr($data,$startbyte,4);
switch($type){
case '0001':
$type='A';
break;
case '0002':
$type='NS';
break;
case '000c':
$type='PTR';
break;
case '0006':
$type='SOA';
break;
case '001c':
$type='AAAA';
break;
case '0005':
$type='CNAME';
break;
case '0010':
$type='TEXT';
break;
case '000f':
$type='MX';
break;
}
$query=substr($data,24,$startbyte-16);
echo $query."\n";
$returndata= json_encode(array('type' => $type, 'name' => "$realname", 'id'=>"$id", 'query'=>"$query")); $returndata= json_encode(array('type' => $type, 'name' => "$realname", 'id'=>"$id", 'query'=>"$query"));
return $returndata; return $returndata;