First
This commit is contained in:
parent
3e75b4fe06
commit
6e7f755c66
22
.history/app/controller/DnsController_20221217222004
Normal file
22
.history/app/controller/DnsController_20221217222004
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
return response('hello webman');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
.history/app/controller/DnsController_20221217222441.php
Normal file
30
.history/app/controller/DnsController_20221217222441.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR(Request $request)
|
||||||
|
{
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
$return=json_encode($send)
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
.history/app/controller/DnsController_20221217222442
Normal file
30
.history/app/controller/DnsController_20221217222442
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR(Request $request)
|
||||||
|
{
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
$return=json_encode($send)
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
.history/app/controller/DnsController_20221217222849.php
Normal file
30
.history/app/controller/DnsController_20221217222849.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR(Request $request)
|
||||||
|
{
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
.history/app/controller/DnsController_20221217222936.php
Normal file
30
.history/app/controller/DnsController_20221217222936.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($request)
|
||||||
|
{
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
30
.history/app/controller/DnsController_20221217223042.php
Normal file
30
.history/app/controller/DnsController_20221217223042.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
.history/app/controller/DnsController_20221217223130.php
Normal file
31
.history/app/controller/DnsController_20221217223130.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
.history/app/controller/DnsController_20221217223139.php
Normal file
31
.history/app/controller/DnsController_20221217223139.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
.history/app/controller/DnsController_20221217223236.php
Normal file
34
.history/app/controller/DnsController_20221217223236.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view(Request $request)
|
||||||
|
{
|
||||||
|
return view('index/view', ['name' => 'webman']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
42
.history/app/controller/DnsController_20221217223419.php
Normal file
42
.history/app/controller/DnsController_20221217223419.php
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
46
.history/app/controller/DnsController_20221217223433.php
Normal file
46
.history/app/controller/DnsController_20221217223433.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['type']='A';
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function json(Request $request)
|
||||||
|
{
|
||||||
|
return json(['code' => 0, 'msg' => 'ok']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
56
.history/app/controller/DnsController_20221217223504.php
Normal file
56
.history/app/controller/DnsController_20221217223504.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['type']='A';
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
57
.history/app/controller/DnsController_20221217223811.php
Normal file
57
.history/app/controller/DnsController_20221217223811.php
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
86
.history/app/controller/DnsController_20221217224046.php
Normal file
86
.history/app/controller/DnsController_20221217224046.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
117
.history/app/controller/DnsController_20221217224155.php
Normal file
117
.history/app/controller/DnsController_20221217224155.php
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
149
.history/app/controller/DnsController_20221217224247.php
Normal file
149
.history/app/controller/DnsController_20221217224247.php
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
150
.history/app/controller/DnsController_20221217224408.php
Normal file
150
.history/app/controller/DnsController_20221217224408.php
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use IPv6
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
150
.history/app/controller/DnsController_20221217224410.php
Normal file
150
.history/app/controller/DnsController_20221217224410.php
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use IPv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
150
.history/app/controller/DnsController_20221217224446.php
Normal file
150
.history/app/controller/DnsController_20221217224446.php
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\IPv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
150
.history/app/controller/DnsController_20221217224558.php
Normal file
150
.history/app/controller/DnsController_20221217224558.php
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\IPv6\ipv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
150
.history/app/controller/DnsController_20221217224621.php
Normal file
150
.history/app/controller/DnsController_20221217224621.php
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
149
.history/app/controller/DnsController_20221217224945.php
Normal file
149
.history/app/controller/DnsController_20221217224945.php
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
155
.history/app/controller/DnsController_20221217225003.php
Normal file
155
.history/app/controller/DnsController_20221217225003.php
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
*/
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
162
.history/app/controller/DnsController_20221217225031.php
Normal file
162
.history/app/controller/DnsController_20221217225031.php
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function PTR($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
#以下无需更改
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#后续以此类推,function名为DNS查询类型
|
||||||
|
|
||||||
|
public function A($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
$send['detail'][1]='119.29.29.29';
|
||||||
|
$send['detail'][2]='8.8.8.8';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['type']='A';
|
||||||
|
*/
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function AAAA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
$ipv6=new IPv6;
|
||||||
|
$send['detail'][1]=bin2hex($ipv6->ip2bin("fe80::2c5f")); #此操作可以还原被简化的IPv6地址 协议内不再对IPv6地址进行处理,请按照本方式传递16进制无":"的完整16位IPv6
|
||||||
|
$send['detail'][2]=bin2hex($ipv6->ip2bin("2001:0:2851:b9d0:2c5f:f0d9:21be:4b96"));
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='AAAA';
|
||||||
|
*/
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function NS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='coco.bunny.net';
|
||||||
|
$send['detail'][2]='kiki.bunny.net';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='NS';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CNAME($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='baidu.cn';
|
||||||
|
$send['detail'][2]='baidu.com';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='CNAME';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function TEXT($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]='text1-test';
|
||||||
|
$send['detail'][2]='text2-test';
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='TEXT';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function MX($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
|
||||||
|
$send['detail'][1]['name']='mx.zoho.com';
|
||||||
|
$send['detail'][1]['pre']='20'; #权重
|
||||||
|
$send['detail'][2]['name']='mx2.zoho.com';
|
||||||
|
$send['detail'][2]['pre']='30'; #权重
|
||||||
|
$send['detail'][3]['name']='mx3.zoho.com';
|
||||||
|
$send['detail'][3]['pre']='50'; #权重
|
||||||
|
$send['ttl']=600;
|
||||||
|
|
||||||
|
$send['type']='MX';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function SOA($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
$send['detail']= array();
|
||||||
|
|
||||||
|
$send['detail']['type']='none';
|
||||||
|
$send['detail']['name']=$name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SOA类型,如遇域名存在但无该查询类型的记录时返回
|
||||||
|
* 请勿随意填写,本DNS协议将自动向服务器配置的DNS获取SOA
|
||||||
|
*
|
||||||
|
* 自行返回SOA记录(不建议)[除非你真的准备直接把域名NS到这里]
|
||||||
|
* $send['detail']['type']='self';
|
||||||
|
* $send['detail']['mname']='dns31.hichina.com'; #主DNS服务器名
|
||||||
|
* $send['detail']['rname']='hostmaster.hichina.com'; #DNS管理员邮箱
|
||||||
|
* $send['detail']['serial']='2022052002'; #序列号 序列号必须递增 类似于dns记录的版本号 序列号变大时递归dns将更新记录
|
||||||
|
* $send['detail']['refresh']='3600'; #区域应当被刷新前的时间间隔
|
||||||
|
* $send['detail']['retry']='1200'; #刷新失败重试的时间间隔
|
||||||
|
* $send['detail']['expire']='86400'; #规定在区域不再是权威的之前可以等待的时间间隔的上限
|
||||||
|
* $send['detail']['minimum-ttl']='600'; #最小TTL
|
||||||
|
*
|
||||||
|
* $send['ttl']='180'; #当前TTL
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
$send['type']='SOA';
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
28
.history/app/controller/DnsController_20221217230111.php
Normal file
28
.history/app/controller/DnsController_20221217230111.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6;
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function DNS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['type']='PTR';
|
||||||
|
|
||||||
|
|
||||||
|
#此处无需修改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
28
.history/app/controller/DnsController_20221218180548.php
Normal file
28
.history/app/controller/DnsController_20221218180548.php
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6; #用于IPv6相关
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function DNS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['type']='PTR';
|
||||||
|
|
||||||
|
|
||||||
|
#此处无需修改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
32
.history/app/controller/DnsController_20221218180634.php
Normal file
32
.history/app/controller/DnsController_20221218180634.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6; #用于IPv6相关
|
||||||
|
/**
|
||||||
|
* $ipv6=new IPv6;
|
||||||
|
* $ipv6->ip2bin($ip);
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function DNS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['type']='PTR';
|
||||||
|
|
||||||
|
|
||||||
|
#此处无需修改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
33
.history/app/controller/DnsController_20221218180755.php
Normal file
33
.history/app/controller/DnsController_20221218180755.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6; #用于IPv6相关
|
||||||
|
/**
|
||||||
|
* $ipv6=new IPv6;
|
||||||
|
* $ipv6->ip2bin($ip);
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function DNS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
#详情请参见 https://github.com/ywnsya/workerman-dns 尤其是 https://github.com/ywnsya/Workerman-DNS/blob/master/start.php 中的用法
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['type']='PTR';
|
||||||
|
|
||||||
|
|
||||||
|
#此处无需修改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
// 这里指定进程类,就是上面定义的Pusher类
|
||||||
|
'handler' => process\Pusher::class,
|
||||||
|
'listen' => 'websocket://0.0.0.0:8888',
|
||||||
|
'count' => 1,
|
||||||
|
],
|
||||||
|
];
|
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
// 这里指定进程类,就是上面定义的Pusher类
|
||||||
|
'handler' => process\dns\Dns::class,
|
||||||
|
'listen' => 'websocket://0.0.0.0:8888',
|
||||||
|
'count' => 1,
|
||||||
|
],
|
||||||
|
];
|
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
// 这里指定进程类,就是上面定义的Pusher类
|
||||||
|
'handler' => process\Dns::class,
|
||||||
|
'listen' => 'websocket://0.0.0.0:8888',
|
||||||
|
'count' => 1,
|
||||||
|
],
|
||||||
|
];
|
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
// 这里指定进程类,就是上面定义的Pusher类
|
||||||
|
'handler' => process\DnsProcess::class,
|
||||||
|
'listen' => 'Dns://0.0.0.0:53',
|
||||||
|
'transport' => 'udp',
|
||||||
|
'count' => cpu_count() * 14,
|
||||||
|
'count' => 1,
|
||||||
|
],
|
||||||
|
];
|
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
// 这里指定进程类,就是上面定义的Pusher类
|
||||||
|
'handler' => process\DnsProcess::class,
|
||||||
|
'listen' => 'Dns://0.0.0.0:53',
|
||||||
|
'transport' => 'udp',
|
||||||
|
'count' => cpu_count() * 4,
|
||||||
|
'count' => 1,
|
||||||
|
],
|
||||||
|
];
|
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
// 这里指定进程类,就是上面定义的Pusher类
|
||||||
|
'handler' => process\DnsProcess::class,
|
||||||
|
'listen' => 'Dns://0.0.0.0:53',
|
||||||
|
'transport' => 'udp',
|
||||||
|
'count' => cpu_count() * 4
|
||||||
|
],
|
||||||
|
];
|
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
'handler' => process\DnsProcess::class,
|
||||||
|
'listen' => 'Dns://0.0.0.0:53',
|
||||||
|
'transport' => 'udp',
|
||||||
|
'count' => cpu_count() * 4
|
||||||
|
],
|
||||||
|
];
|
31
.history/config/server_20221217203949.php
Normal file
31
.history/config/server_20221217203949.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of webman.
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the MIT-LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @author walkor<walkor@workerman.net>
|
||||||
|
* @copyright walkor<walkor@workerman.net>
|
||||||
|
* @link http://www.workerman.net/
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
return [
|
||||||
|
'listen' => 'http://0.0.0.0:8787',
|
||||||
|
'transport' => 'tcp',
|
||||||
|
'context' => [],
|
||||||
|
'name' => 'webman',
|
||||||
|
'count' => cpu_count() * 4,
|
||||||
|
'user' => '',
|
||||||
|
'group' => '',
|
||||||
|
'reusePort' => false,
|
||||||
|
'event_loop' => '',
|
||||||
|
'stop_timeout' => 2,
|
||||||
|
'pid_file' => runtime_path() . '/webman.pid',
|
||||||
|
'status_file' => runtime_path() . '/webman.status',
|
||||||
|
'stdout_file' => runtime_path() . '/logs/stdout.log',
|
||||||
|
'log_file' => runtime_path() . '/logs/workerman.log',
|
||||||
|
'max_package_size' => 10 * 1024 * 1024
|
||||||
|
];
|
31
.history/config/server_20221217205622.php
Normal file
31
.history/config/server_20221217205622.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of webman.
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the MIT-LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @author walkor<walkor@workerman.net>
|
||||||
|
* @copyright walkor<walkor@workerman.net>
|
||||||
|
* @link http://www.workerman.net/
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
return [
|
||||||
|
'listen' => 'http://0.0.0.0:8787',
|
||||||
|
'transport' => 'tcp',
|
||||||
|
'context' => [],
|
||||||
|
'name' => 'webman',
|
||||||
|
'count' => cpu_count() * 2,
|
||||||
|
'user' => '',
|
||||||
|
'group' => '',
|
||||||
|
'reusePort' => false,
|
||||||
|
'event_loop' => '',
|
||||||
|
'stop_timeout' => 2,
|
||||||
|
'pid_file' => runtime_path() . '/webman.pid',
|
||||||
|
'status_file' => runtime_path() . '/webman.status',
|
||||||
|
'stdout_file' => runtime_path() . '/logs/stdout.log',
|
||||||
|
'log_file' => runtime_path() . '/logs/workerman.log',
|
||||||
|
'max_package_size' => 10 * 1024 * 1024
|
||||||
|
];
|
31
.history/config/server_20221217205625.php
Normal file
31
.history/config/server_20221217205625.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is part of webman.
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the MIT-LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @author walkor<walkor@workerman.net>
|
||||||
|
* @copyright walkor<walkor@workerman.net>
|
||||||
|
* @link http://www.workerman.net/
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
return [
|
||||||
|
'listen' => 'http://0.0.0.0:8787',
|
||||||
|
'transport' => 'tcp',
|
||||||
|
'context' => [],
|
||||||
|
'name' => 'webman',
|
||||||
|
'count' => cpu_count() * 1,
|
||||||
|
'user' => '',
|
||||||
|
'group' => '',
|
||||||
|
'reusePort' => false,
|
||||||
|
'event_loop' => '',
|
||||||
|
'stop_timeout' => 2,
|
||||||
|
'pid_file' => runtime_path() . '/webman.pid',
|
||||||
|
'status_file' => runtime_path() . '/webman.status',
|
||||||
|
'stdout_file' => runtime_path() . '/logs/stdout.log',
|
||||||
|
'log_file' => runtime_path() . '/logs/workerman.log',
|
||||||
|
'max_package_size' => 10 * 1024 * 1024
|
||||||
|
];
|
27
.history/process/DnsProcess_20221217210428.php
Normal file
27
.history/process/DnsProcess_20221217210428.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
public function onConnect(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
|
||||||
|
{
|
||||||
|
echo "onWebSocketConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(TcpConnection $connection, $data)
|
||||||
|
{
|
||||||
|
$connection->send($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onClose(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onClose\n";
|
||||||
|
}
|
||||||
|
}
|
13
.history/process/DnsProcess_20221217210754.php
Normal file
13
.history/process/DnsProcess_20221217210754.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$connection->send($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
14
.history/process/DnsProcess_20221217210802.php
Normal file
14
.history/process/DnsProcess_20221217210802.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
echo "get";
|
||||||
|
$connection->send($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
.history/process/DnsProcess_20221217211004.php
Normal file
31
.history/process/DnsProcess_20221217211004.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$send=json_encode($send);
|
||||||
|
$connection->send($send);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
.history/process/DnsProcess_20221217222328.php
Normal file
35
.history/process/DnsProcess_20221217222328.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*//
|
||||||
|
$return=json_encode($return);
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
.history/process/DnsProcess_20221217222504.php
Normal file
34
.history/process/DnsProcess_20221217222504.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*//
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
.history/process/DnsProcess_20221217222523.php
Normal file
34
.history/process/DnsProcess_20221217222523.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
.history/process/DnsProcess_20221217222735.php
Normal file
35
.history/process/DnsProcess_20221217222735.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
include_once(base_path().'/app/controller/DnsController.php')
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
.history/process/DnsProcess_20221217222745.php
Normal file
35
.history/process/DnsProcess_20221217222745.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
include_once(base_path().'/app/controller/DnsController.php');
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
.history/process/DnsProcess_20221217222822.php
Normal file
35
.history/process/DnsProcess_20221217222822.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
include_once(base_path().'/app/controller/DnsController');
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
.history/process/DnsProcess_20221217222824.php
Normal file
35
.history/process/DnsProcess_20221217222824.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
#include_once(base_path().'/app/controller/DnsController');
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
.history/process/DnsProcess_20221217222828.php
Normal file
35
.history/process/DnsProcess_20221217222828.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
#include_once(base_path().'/app/controller/DnsController.php');
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
.history/process/DnsProcess_20221217223023.php
Normal file
35
.history/process/DnsProcess_20221217223023.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
#include_once(base_path().'/app/controller/DnsController.php');
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip,$data->id,$data->query);
|
||||||
|
/**
|
||||||
|
$send['type']='PTR';
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
|
||||||
|
$send['id']=$data->id;
|
||||||
|
$send['query']=$data->query;
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
25
.history/process/DnsProcess_20221217223058.php
Normal file
25
.history/process/DnsProcess_20221217223058.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
#include_once(base_path().'/app/controller/DnsController.php');
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($name,$rip,$data->id,$data->query);
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
25
.history/process/DnsProcess_20221217223126.php
Normal file
25
.history/process/DnsProcess_20221217223126.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
#include_once(base_path().'/app/controller/DnsController.php');
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($type,$name,$rip,$data->id,$data->query);
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
.history/process/DnsProcess_20221217223207.php
Normal file
24
.history/process/DnsProcess_20221217223207.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($type,$name,$rip,$data->id,$data->query);
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
.history/process/DnsProcess_20221217224318.php
Normal file
24
.history/process/DnsProcess_20221217224318.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->$type($type,$name,$rip,$data->id,$data->query);
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
.history/process/DnsProcess_20221217230035.php
Normal file
24
.history/process/DnsProcess_20221217230035.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->DNS($type,$name,$rip,$data->id,$data->query);
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
0
.history/process/Dns_20221217204824.php
Normal file
0
.history/process/Dns_20221217204824.php
Normal file
27
.history/process/Dns_20221217204827.php
Normal file
27
.history/process/Dns_20221217204827.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class Pusher
|
||||||
|
{
|
||||||
|
public function onConnect(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
|
||||||
|
{
|
||||||
|
echo "onWebSocketConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(TcpConnection $connection, $data)
|
||||||
|
{
|
||||||
|
$connection->send($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onClose(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onClose\n";
|
||||||
|
}
|
||||||
|
}
|
27
.history/process/dns/Dns_20221217204826.php
Normal file
27
.history/process/dns/Dns_20221217204826.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class Pusher
|
||||||
|
{
|
||||||
|
public function onConnect(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
|
||||||
|
{
|
||||||
|
echo "onWebSocketConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(TcpConnection $connection, $data)
|
||||||
|
{
|
||||||
|
$connection->send($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onClose(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onClose\n";
|
||||||
|
}
|
||||||
|
}
|
27
.history/process/dns/Dns_20221217205100.php
Normal file
27
.history/process/dns/Dns_20221217205100.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class Dns
|
||||||
|
{
|
||||||
|
public function onConnect(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
|
||||||
|
{
|
||||||
|
echo "onWebSocketConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(TcpConnection $connection, $data)
|
||||||
|
{
|
||||||
|
$connection->send($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onClose(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onClose\n";
|
||||||
|
}
|
||||||
|
}
|
74
.history/vendor/laysense/dns/src/Install_20221217204513.php
vendored
Normal file
74
.history/vendor/laysense/dns/src/Install_20221217204513.php
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
77
.history/vendor/laysense/dns/src/Install_20221217210026.php
vendored
Normal file
77
.history/vendor/laysense/dns/src/Install_20221217210026.php
vendored
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
copy(__DIR__ .'/resource/Dns.php',base_path().'/vendor/workerman/workerman/Protocols/Dns.php');
|
||||||
|
echo "Create DNS Protocol Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsProcess.php',base_path().'/process/DnsProcess.php');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
78
.history/vendor/laysense/dns/src/Install_20221217210128.php
vendored
Normal file
78
.history/vendor/laysense/dns/src/Install_20221217210128.php
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
copy(__DIR__ .'/resource/Dns.php',base_path().'/vendor/workerman/workerman/Protocols/Dns.php');
|
||||||
|
echo "Create DNS Protocol Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsProcess.php',base_path().'/process/DnsProcess.php');
|
||||||
|
echo "Create DNS Process Successfully";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
78
.history/vendor/laysense/dns/src/Install_20221217210329.php
vendored
Normal file
78
.history/vendor/laysense/dns/src/Install_20221217210329.php
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
copy(__DIR__ .'/resource/Dns.php',base_path().'/vendor/workerman/workerman/Protocols/Dns.php');
|
||||||
|
echo "Create DNS Protocol Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsProcess.php',base_path().'/process/DnsProcess.php');
|
||||||
|
echo "Create DNS Process Successfully";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
80
.history/vendor/laysense/dns/src/Install_20221218180906.php
vendored
Normal file
80
.history/vendor/laysense/dns/src/Install_20221218180906.php
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
copy(__DIR__ .'/resource/Dns.php',base_path().'/vendor/workerman/workerman/Protocols/Dns.php');
|
||||||
|
echo "Create DNS Protocol Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsProcess.php',base_path().'/process/DnsProcess.php');
|
||||||
|
echo "Create DNS Process Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsController.php',base_path().'/app/controller/DnsController.php');
|
||||||
|
echo "Create DNS Process Successfully";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
80
.history/vendor/laysense/dns/src/Install_20221218180911.php
vendored
Normal file
80
.history/vendor/laysense/dns/src/Install_20221218180911.php
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
copy(__DIR__ .'/resource/Dns.php',base_path().'/vendor/workerman/workerman/Protocols/Dns.php');
|
||||||
|
echo "Create DNS Protocol Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsProcess.php',base_path().'/process/DnsProcess.php');
|
||||||
|
echo "Create DNS Process Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsController.php',base_path().'/app/controller/DnsController.php');
|
||||||
|
echo "Create Dns Controller Successfully";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
10
.history/vendor/laysense/dns/src/config/plugin/laysense/dns/process_20221217210307.php
vendored
Normal file
10
.history/vendor/laysense/dns/src/config/plugin/laysense/dns/process_20221217210307.php
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
// 这里指定进程类,就是上面定义的Pusher类
|
||||||
|
'handler' => process\DnsProcess::class,
|
||||||
|
'listen' => 'Dns://0.0.0.0:53',
|
||||||
|
'transport' => 'udp',
|
||||||
|
'count' => cpu_count() * 4
|
||||||
|
],
|
||||||
|
];
|
9
.history/vendor/laysense/dns/src/config/plugin/laysense/dns/process_20221218180942.php
vendored
Normal file
9
.history/vendor/laysense/dns/src/config/plugin/laysense/dns/process_20221218180942.php
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
'handler' => process\DnsProcess::class,
|
||||||
|
'listen' => 'Dns://0.0.0.0:53',
|
||||||
|
'transport' => 'udp',
|
||||||
|
'count' => cpu_count() * 4
|
||||||
|
],
|
||||||
|
];
|
0
.history/vendor/laysense/dns/src/install_20221217210339.backup
vendored
Normal file
0
.history/vendor/laysense/dns/src/install_20221217210339.backup
vendored
Normal file
78
.history/vendor/laysense/dns/src/install_20221217210342.backup
vendored
Normal file
78
.history/vendor/laysense/dns/src/install_20221217210342.backup
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
copy(__DIR__ .'/resource/Dns.php',base_path().'/vendor/workerman/workerman/Protocols/Dns.php');
|
||||||
|
echo "Create DNS Protocol Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsProcess.php',base_path().'/process/DnsProcess.php');
|
||||||
|
echo "Create DNS Process Successfully";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
33
.history/vendor/laysense/dns/src/resource/DnsController_20221218180804.php
vendored
Normal file
33
.history/vendor/laysense/dns/src/resource/DnsController_20221218180804.php
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6; #用于IPv6相关
|
||||||
|
/**
|
||||||
|
* $ipv6=new IPv6;
|
||||||
|
* $ipv6->ip2bin($ip);
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function DNS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
#详情请参见 https://github.com/ywnsya/workerman-dns 尤其是 https://github.com/ywnsya/Workerman-DNS/blob/master/start.php 中的用法
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['type']='PTR';
|
||||||
|
|
||||||
|
|
||||||
|
#此处无需修改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
33
.history/vendor/laysense/dns/src/resource/DnsController_20221218180808.php
vendored
Normal file
33
.history/vendor/laysense/dns/src/resource/DnsController_20221218180808.php
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6; #用于IPv6相关
|
||||||
|
/**
|
||||||
|
* $ipv6=new IPv6;
|
||||||
|
* $ipv6->ip2bin($ip);
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function DNS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
#详情请参见 https://github.com/ywnsya/workerman-dns 尤其是 https://github.com/ywnsya/Workerman-DNS/blob/master/start.php 中的用法
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['type']='PTR';
|
||||||
|
|
||||||
|
|
||||||
|
#此处无需修改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
0
.history/vendor/laysense/dns/src/resource/DnsProcess_20221217205352.php
vendored
Normal file
0
.history/vendor/laysense/dns/src/resource/DnsProcess_20221217205352.php
vendored
Normal file
27
.history/vendor/laysense/dns/src/resource/DnsProcess_20221217205413.php
vendored
Normal file
27
.history/vendor/laysense/dns/src/resource/DnsProcess_20221217205413.php
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
public function onConnect(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
|
||||||
|
{
|
||||||
|
echo "onWebSocketConnect\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onMessage(TcpConnection $connection, $data)
|
||||||
|
{
|
||||||
|
$connection->send($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onClose(TcpConnection $connection)
|
||||||
|
{
|
||||||
|
echo "onClose\n";
|
||||||
|
}
|
||||||
|
}
|
0
.history/vendor/laysense/dns/src/resource/Dns_20221217205338.php
vendored
Normal file
0
.history/vendor/laysense/dns/src/resource/Dns_20221217205338.php
vendored
Normal file
252
.history/vendor/laysense/dns/src/resource/Dns_20221217205733.php
vendored
Normal file
252
.history/vendor/laysense/dns/src/resource/Dns_20221217205733.php
vendored
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Workerman DNS Protocol
|
||||||
|
* @author Enoch EchoNoch Enoch@laysense.com
|
||||||
|
* @Repo http://git.laysense.com/enoch/workerman-dns
|
||||||
|
* @Github http://github.com/ywnsya/workerman-dns
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Workerman\Protocols;
|
||||||
|
class Dns
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 检查包的完整性
|
||||||
|
* 如果能够得到包长,则返回包的在buffer中的长度,否则返回0继续等待数据
|
||||||
|
* 如果协议有问题,则可以返回false,当前客户端连接会因此断开
|
||||||
|
* @param string $buffer
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function input($buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
return 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打包,当向客户端发送数据的时候会自动调用
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function encode($buffer)
|
||||||
|
{
|
||||||
|
$buffer=json_decode($buffer);
|
||||||
|
$type=$buffer->type;
|
||||||
|
switch($type){
|
||||||
|
case 'A':
|
||||||
|
$type='0001';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$tpart=str_pad(dechex($part),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$detail[$n].$tpart;
|
||||||
|
};
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'NS':
|
||||||
|
$type='0002';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'PTR':
|
||||||
|
$type='000C';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'CNAME':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'SOA':
|
||||||
|
$type='0006';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$ns=json_decode( json_encode( $ns),true);
|
||||||
|
if($ns['type']=='none'){
|
||||||
|
$Rns=dns_get_record($ns['name'],DNS_SOA);
|
||||||
|
$Rns=$Rns[0];
|
||||||
|
$ns=$Rns;
|
||||||
|
$buffer->ttl=$Rns['ttl'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$nss=explode('.',$ns['mname']);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
unset($nss,$len,$tpart);
|
||||||
|
$nss=explode('.',$ns['rname']);
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00'.str_pad(dechex($ns['serial']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['refresh']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['retry']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['expire']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['minimum-ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'AAAA':
|
||||||
|
$type='001C';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$detail[$n]="$i";
|
||||||
|
$lenth[$n]="0010";
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'TEXT':
|
||||||
|
$type='0010';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$detail[$n]='';
|
||||||
|
$text=bin2hex($i);
|
||||||
|
$tlen=str_pad(dechex((strlen($text)/2)),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$tlen.$text;
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'MX':
|
||||||
|
$type='000F';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
|
||||||
|
print_r($ns);
|
||||||
|
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i->name);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)+2),4,"0",STR_PAD_LEFT).str_pad(dechex($i->pre),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AnswerRRs=str_pad(count((array)$buffer->detail),4,"0",STR_PAD_LEFT);
|
||||||
|
#$AnswerRRs='0001';
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
$answer='';
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解包,当接收到的数据字节数等于input返回的值(大于0的值)自动调用
|
||||||
|
* 并传递给onMessage回调函数的$data参数
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function decode($buffer)
|
||||||
|
{
|
||||||
|
$data=bin2hex($buffer);
|
||||||
|
$id=substr($data,0,4);
|
||||||
|
$type=substr($data,-8,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;
|
||||||
|
}
|
||||||
|
$name=substr($data,24,-8);
|
||||||
|
$namede=str_split($name,2);
|
||||||
|
$realname='';
|
||||||
|
foreach($namede as $cha){
|
||||||
|
$chat=hex2bin($cha);
|
||||||
|
if(!ctype_alnum($chat)){
|
||||||
|
$chat='.';
|
||||||
|
}
|
||||||
|
$realname=$realname.$chat;
|
||||||
|
}
|
||||||
|
$realname=substr($realname,1,-1);
|
||||||
|
$query=substr($data,24);
|
||||||
|
|
||||||
|
#$returndata="$type".'|||'."$realname";
|
||||||
|
$returndata= json_encode(array('type' => $type, 'name' => "$realname", 'id'=>"$id", 'query'=>"$query"));
|
||||||
|
|
||||||
|
return $returndata;
|
||||||
|
}
|
||||||
|
}
|
419
.history/vendor/laysense/dns/src/resource/Dns_20221218180431.php
vendored
Normal file
419
.history/vendor/laysense/dns/src/resource/Dns_20221218180431.php
vendored
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Workerman DNS Protocol
|
||||||
|
* @author Enoch EchoNoch Enoch@laysense.com
|
||||||
|
* @Repo http://git.laysense.com/enoch/workerman-dns
|
||||||
|
* @Github http://github.com/ywnsya/workerman-dns
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Workerman\Protocols;
|
||||||
|
class Dns
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 检查包的完整性
|
||||||
|
* 如果能够得到包长,则返回包的在buffer中的长度,否则返回0继续等待数据
|
||||||
|
* 如果协议有问题,则可以返回false,当前客户端连接会因此断开
|
||||||
|
* @param string $buffer
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function input($buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
return 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打包,当向客户端发送数据的时候会自动调用
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function encode($buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
$buffer=json_decode($buffer);
|
||||||
|
$type=$buffer->type;
|
||||||
|
switch($type){
|
||||||
|
case 'A':
|
||||||
|
$type='0001';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$tpart=str_pad(dechex($part),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$detail[$n].$tpart;
|
||||||
|
};
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'NS':
|
||||||
|
$type='0002';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'PTR':
|
||||||
|
$type='000C';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'CNAME':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'CNAME+A':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$answer='';
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$lenth[0].$detail[0];
|
||||||
|
|
||||||
|
$ip=dns_get_record($ns,DNS_A);
|
||||||
|
$type='0001';
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$ttl=str_pad(dechex($i['ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
$i=$i['ip'];
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$tpart=str_pad(dechex($part),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$detail[$n].$tpart;
|
||||||
|
};
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
|
||||||
|
};
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C02B'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
|
||||||
|
$AnswerRRs=str_pad((count((array)$ip)+1),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'CNAME+AAAA':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$answer='';
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$lenth[0].$detail[0];
|
||||||
|
|
||||||
|
$ip=dns_get_record($ns,DNS_AAAA);
|
||||||
|
$type='001C';
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$ipv6=$i['ipv6'];
|
||||||
|
$hexstr = unpack("H*hex", inet_pton($ipv6));
|
||||||
|
$ipv6=substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hexstr['hex']), 0, -1);
|
||||||
|
$ipv6=str_replace(':','',$ipv6);
|
||||||
|
#$ipv6= bin2hex($ipv6);
|
||||||
|
$detail[$n]="$ipv6";
|
||||||
|
$lenth[$n]="0010";
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C02C'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
|
||||||
|
$AnswerRRs=str_pad((count((array)$ip)+1),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'SOA':
|
||||||
|
$type='0006';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$ns=json_decode( json_encode( $ns),true);
|
||||||
|
if($ns['type']=='none'){
|
||||||
|
$Rns=dns_get_record($ns['name'],DNS_SOA);
|
||||||
|
$Rns=$Rns[0];
|
||||||
|
$ns=$Rns;
|
||||||
|
$buffer->ttl=$Rns['ttl'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$nss=explode('.',$ns['mname']);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
unset($nss,$len,$tpart);
|
||||||
|
$nss=explode('.',$ns['rname']);
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00'.str_pad(dechex($ns['serial']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['refresh']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['retry']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['expire']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['minimum-ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'AAAA':
|
||||||
|
$type='001C';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$detail[$n]="$i";
|
||||||
|
$lenth[$n]="0010";
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'TEXT':
|
||||||
|
$type='0010';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$detail[$n]='';
|
||||||
|
$text=bin2hex($i);
|
||||||
|
$tlen=str_pad(dechex((strlen($text)/2)),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$tlen.$text;
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'MX':
|
||||||
|
$type='000F';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
|
||||||
|
print_r($ns);
|
||||||
|
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i->name);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)+2),4,"0",STR_PAD_LEFT).str_pad(dechex($i->pre),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'none':
|
||||||
|
$type='0006';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$url=$ns;
|
||||||
|
while(true){
|
||||||
|
preg_match("#\.(.*)#i",$url,$match);//获取根域名
|
||||||
|
$domin = $match[1];
|
||||||
|
$soa=dns_get_record($domin,DNS_SOA);
|
||||||
|
if(array_key_exists('0',$soa)){
|
||||||
|
if(array_key_exists('mname',$soa[0])){
|
||||||
|
$qname=$domin;
|
||||||
|
$ns=$soa[0];
|
||||||
|
break;
|
||||||
|
}else{
|
||||||
|
$url=$domin;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$url=$domin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$nss=explode('.',$ns['mname']);
|
||||||
|
$detail='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail=$detail.$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail=$detail.'00';
|
||||||
|
unset($nss,$len,$tpart);
|
||||||
|
$nss=explode('.',$ns['rname']);
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail=$detail.$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail=$detail.'00'.str_pad(dechex($ns['serial']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['refresh']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['retry']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['expire']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['minimum-ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
|
||||||
|
$lenth=str_pad(dechex((strlen($detail)/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
$status='8183';
|
||||||
|
$questions='0001';
|
||||||
|
$AnswerRRs='0000';
|
||||||
|
$AuthorityRRs='0001';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
|
||||||
|
#$qname
|
||||||
|
$nss=explode('.',$qname);
|
||||||
|
$qname='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$qname=$qname.$len.$tpart;
|
||||||
|
};
|
||||||
|
$qname=$qname.'00';
|
||||||
|
|
||||||
|
$answer='';
|
||||||
|
$answer=$answer.$qname.$type.'0001'.$ttl.$lenth.$detail;
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AnswerRRs=str_pad(count((array)$buffer->detail),4,"0",STR_PAD_LEFT);
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
$answer='';
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解包,当接收到的数据字节数等于input返回的值(大于0的值)自动调用
|
||||||
|
* 并传递给onMessage回调函数的$data参数
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function decode($buffer)
|
||||||
|
{
|
||||||
|
$data=bin2hex($buffer);
|
||||||
|
$id=substr($data,0,4);
|
||||||
|
$type=substr($data,-8,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;
|
||||||
|
}
|
||||||
|
$name=substr($data,24,-8);
|
||||||
|
$namede=str_split($name,2);
|
||||||
|
$realname='';
|
||||||
|
foreach($namede as $cha){
|
||||||
|
$chat=hex2bin($cha);
|
||||||
|
if(!ctype_alnum($chat)){
|
||||||
|
$chat='.';
|
||||||
|
}
|
||||||
|
$realname=$realname.$chat;
|
||||||
|
}
|
||||||
|
$realname=substr($realname,1,-1);
|
||||||
|
$query=substr($data,24);
|
||||||
|
|
||||||
|
#$returndata="$type".'|||'."$realname";
|
||||||
|
$returndata= json_encode(array('type' => $type, 'name' => "$realname", 'id'=>"$id", 'query'=>"$query"));
|
||||||
|
|
||||||
|
return $returndata;
|
||||||
|
}
|
||||||
|
}
|
0
.history/vendor/laysense/dns/src/resource/ipv6_20221217223817.php
vendored
Normal file
0
.history/vendor/laysense/dns/src/resource/ipv6_20221217223817.php
vendored
Normal file
204
.history/vendor/laysense/dns/src/resource/ipv6_20221217223921.php
vendored
Normal file
204
.history/vendor/laysense/dns/src/resource/ipv6_20221217223921.php
vendored
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
|
||||||
|
<?php
|
||||||
|
/* PHP-IPv6 V1.0.
|
||||||
|
* Copyright (c) 2010 Mr.Bin <bin_jly@163.com>
|
||||||
|
*/
|
||||||
|
class ipv6 {
|
||||||
|
function addr($addr=null) {
|
||||||
|
// 常规获取IPv6地址或格式化IP地址为IPv6格式
|
||||||
|
!$addr && ($addr = $_SERVER['REMOTE_ADDR']);
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 6 && self::ipv6_check($addr) ) return $addr;
|
||||||
|
elseif ( $type === 4 ) return self::ip426($addr);
|
||||||
|
else return 'Unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* realip()因为在Webman(Workerman)下无效,为防止冲突已删除
|
||||||
|
*/
|
||||||
|
|
||||||
|
function cut($addr) {
|
||||||
|
// 压缩IPv6地址
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$arr2[] = preg_replace('/^0{1,3}(\w+)/','\1',$a);
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$olen = strlen($addr);
|
||||||
|
for($i=6;$i>0;$i--){
|
||||||
|
// 初步压缩
|
||||||
|
$addr = preg_replace('/:(0\:){'.$i.'}/','::',$addr,1);
|
||||||
|
if (strlen($addr) < $olen ) break;
|
||||||
|
}
|
||||||
|
$addr = preg_replace('/^0\:\:/','::',$addr);
|
||||||
|
$addr = preg_replace('/\:\:0$/','::',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fill($addr) {
|
||||||
|
// 标准IPv6格式
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$l = strlen($a);
|
||||||
|
if ( $l > 0 && $l < 4 )
|
||||||
|
$arr2[] = str_repeat('0', 4-$l).$a;
|
||||||
|
else $arr2[] = $a;
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$fil = ':'.str_repeat('0000:', 9-count($arr));
|
||||||
|
$addr = str_replace('::',$fil,$addr);
|
||||||
|
$addr = preg_replace('/^\:/','0000:',$addr);
|
||||||
|
$addr = preg_replace('/\:$/',':0000',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2bin($addr) {
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 0 ) return false;
|
||||||
|
elseif ( $type === 4 ) $addr = self::ip426($addr);
|
||||||
|
else $addr = self::fill($addr);
|
||||||
|
$hexstr = str_replace(':','',$addr);
|
||||||
|
return pack('H*', $hexstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bin2ip($bin) {
|
||||||
|
if ( strlen($bin) !== 16 ) return false;
|
||||||
|
$arr = str_split(join('',unpack('H*', $bin)), 4);
|
||||||
|
$addr = join(':',$arr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip426($addr) {
|
||||||
|
// IPv4 to IPv6
|
||||||
|
if (!self::ipv4_check($addr)) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($addr));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$ipv6 = '0000:0000:0000:0000:0000:0000:';
|
||||||
|
$ipv6 .= substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
return $ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
|
function type($addr) {
|
||||||
|
if ( self::ipv6_check($addr) ) return 6;
|
||||||
|
elseif ( self::ipv4_check($addr) ) return 4;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv4_check($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv6_check($addr) {
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
if ( strpos($addr, '.') ) return false;
|
||||||
|
$l1 = count(explode('::',$addr));
|
||||||
|
if ( $l1 > 2 ) return false;
|
||||||
|
$l2 = count(explode(':',$addr));
|
||||||
|
if ( $l2 < 3 || $l2 > 8 ) return false;
|
||||||
|
if ( $l2 < 8 && $l1 !== 2 ) return false;
|
||||||
|
preg_match('/^([0-9a-f]{0,4}\:)+[0-9a-f]{0,4}$/i',$addr,$arr);
|
||||||
|
if ( !$arr[0] ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2long($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
$long = 0;
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
$long += $a * pow(2, 24-$i*8);
|
||||||
|
}
|
||||||
|
return $long;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wan_ip($addr) {
|
||||||
|
// 检查外网可用地址
|
||||||
|
if ( self::ipv6_check($addr) ) {
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
// IPv4类地址处理
|
||||||
|
$v4p = substr($addr,0,29);
|
||||||
|
if ( $v4p == '0000:0000:0000:0000:0000:0000'
|
||||||
|
|| strtolower($v4p) == 'ffff:0000:0000:0000:0000:0000' ) {
|
||||||
|
$t = str_replace($v4p,'',$addr);
|
||||||
|
$t = str_replace(':','',$t);
|
||||||
|
$ipv4 = long2ip(hexdec($t));
|
||||||
|
return self::_wan_ipv4($ipv4);
|
||||||
|
}
|
||||||
|
// 取前16位进行比较
|
||||||
|
$v6p = substr($addr,0,4);
|
||||||
|
$bin = decbin(hexdec($v6p));
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
if ( (($p&'1110000000000000')=='0010000000000000') //2000::/3
|
||||||
|
|| (($p&'1111111000000000')=='1111110000000000') //FC00::/7
|
||||||
|
|| (($p&'1111111111000000')=='1111111010000000') //FE80::/10
|
||||||
|
|| (($p&'1111111100000000')=='1111111100000000') //FF00::/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return self::_wan_ipv4($addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _wan_ipv4($addr){
|
||||||
|
if ( !self::ipv4_check($addr) ) return false;
|
||||||
|
$arr = explode('.',$addr);
|
||||||
|
$bin = decbin($arr[0]*256+$arr[1]);
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
$p8 = $p & '1111111100000000';
|
||||||
|
$p16 = &$p;
|
||||||
|
if ( ($p8 == '0000000000000000') // 0/8
|
||||||
|
|| ($p8 == '0000010100000000') // 5/8
|
||||||
|
|| ($p8 == '0000101000000000') // 10/8
|
||||||
|
|| ($p8 == '0001011100000000') // 23/8
|
||||||
|
|| ($p8 == '0010010000000000') // 36/8
|
||||||
|
|| ($p8 == '0010010100000000') // 37/8
|
||||||
|
|| ($p8 == '0010011100000000') // 39/8
|
||||||
|
|| ($p8 == '0010101000000000') // 42/8
|
||||||
|
|| ($p8 == '0110010000000000') // 100/8
|
||||||
|
|| ($p8 == '0110011000000000') // 102/8
|
||||||
|
|| ($p8 == '0110011100000000') // 103/8
|
||||||
|
|| ($p8 == '0110100000000000') // 104/8
|
||||||
|
|| ($p8 == '0110100100000000') // 105/8
|
||||||
|
|| ($p8 == '0110101000000000') // 106/8
|
||||||
|
|| ($p8 == '0111111100000000') // 127/8
|
||||||
|
|| ($p16 == '1010100111111110') // 169.254/16
|
||||||
|
|| (($p&'1111111111110000')=='1010110000010000') // 172.16/12
|
||||||
|
|| ($p8 == '1011001100000000') // 179/8
|
||||||
|
|| ($p8 == '1011100100000000') // 185/8
|
||||||
|
|| ($p16 == '1100000010101000') // 192.168/16
|
||||||
|
|| (($p&'1110000000000000')=='1110000000000000') // 224/8-255/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _fix_v4($addr) {
|
||||||
|
// 修正IPv4位址类IPv6格式为标准IPv6格式,不验证合法性
|
||||||
|
if ( !strpos($addr, '.') ) return $addr;
|
||||||
|
preg_match('/(\d+\.){3}\d+$/',$addr,$arr);
|
||||||
|
if ( !self::ipv4_check($arr[0]) ) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($arr[0]));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$v4p = substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
$p1 = str_replace($arr[0],'',$addr);
|
||||||
|
strtolower($p1) === 'ffff:' && $p1 = '::'.$p1;
|
||||||
|
$addr = $p1 . $v4p;
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
205
.history/vendor/laysense/dns/src/resource/ipv6_20221217224400.php
vendored
Normal file
205
.history/vendor/laysense/dns/src/resource/ipv6_20221217224400.php
vendored
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
|
||||||
|
<?php
|
||||||
|
namespace IPv6;
|
||||||
|
/* PHP-IPv6 V1.0.
|
||||||
|
* Copyright (c) 2010 Mr.Bin <bin_jly@163.com>
|
||||||
|
*/
|
||||||
|
class ipv6 {
|
||||||
|
function addr($addr=null) {
|
||||||
|
// 常规获取IPv6地址或格式化IP地址为IPv6格式
|
||||||
|
!$addr && ($addr = $_SERVER['REMOTE_ADDR']);
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 6 && self::ipv6_check($addr) ) return $addr;
|
||||||
|
elseif ( $type === 4 ) return self::ip426($addr);
|
||||||
|
else return 'Unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* realip()因为在Webman(Workerman)下无效,为防止冲突已删除
|
||||||
|
*/
|
||||||
|
|
||||||
|
function cut($addr) {
|
||||||
|
// 压缩IPv6地址
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$arr2[] = preg_replace('/^0{1,3}(\w+)/','\1',$a);
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$olen = strlen($addr);
|
||||||
|
for($i=6;$i>0;$i--){
|
||||||
|
// 初步压缩
|
||||||
|
$addr = preg_replace('/:(0\:){'.$i.'}/','::',$addr,1);
|
||||||
|
if (strlen($addr) < $olen ) break;
|
||||||
|
}
|
||||||
|
$addr = preg_replace('/^0\:\:/','::',$addr);
|
||||||
|
$addr = preg_replace('/\:\:0$/','::',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fill($addr) {
|
||||||
|
// 标准IPv6格式
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$l = strlen($a);
|
||||||
|
if ( $l > 0 && $l < 4 )
|
||||||
|
$arr2[] = str_repeat('0', 4-$l).$a;
|
||||||
|
else $arr2[] = $a;
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$fil = ':'.str_repeat('0000:', 9-count($arr));
|
||||||
|
$addr = str_replace('::',$fil,$addr);
|
||||||
|
$addr = preg_replace('/^\:/','0000:',$addr);
|
||||||
|
$addr = preg_replace('/\:$/',':0000',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2bin($addr) {
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 0 ) return false;
|
||||||
|
elseif ( $type === 4 ) $addr = self::ip426($addr);
|
||||||
|
else $addr = self::fill($addr);
|
||||||
|
$hexstr = str_replace(':','',$addr);
|
||||||
|
return pack('H*', $hexstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bin2ip($bin) {
|
||||||
|
if ( strlen($bin) !== 16 ) return false;
|
||||||
|
$arr = str_split(join('',unpack('H*', $bin)), 4);
|
||||||
|
$addr = join(':',$arr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip426($addr) {
|
||||||
|
// IPv4 to IPv6
|
||||||
|
if (!self::ipv4_check($addr)) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($addr));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$ipv6 = '0000:0000:0000:0000:0000:0000:';
|
||||||
|
$ipv6 .= substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
return $ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
|
function type($addr) {
|
||||||
|
if ( self::ipv6_check($addr) ) return 6;
|
||||||
|
elseif ( self::ipv4_check($addr) ) return 4;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv4_check($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv6_check($addr) {
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
if ( strpos($addr, '.') ) return false;
|
||||||
|
$l1 = count(explode('::',$addr));
|
||||||
|
if ( $l1 > 2 ) return false;
|
||||||
|
$l2 = count(explode(':',$addr));
|
||||||
|
if ( $l2 < 3 || $l2 > 8 ) return false;
|
||||||
|
if ( $l2 < 8 && $l1 !== 2 ) return false;
|
||||||
|
preg_match('/^([0-9a-f]{0,4}\:)+[0-9a-f]{0,4}$/i',$addr,$arr);
|
||||||
|
if ( !$arr[0] ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2long($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
$long = 0;
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
$long += $a * pow(2, 24-$i*8);
|
||||||
|
}
|
||||||
|
return $long;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wan_ip($addr) {
|
||||||
|
// 检查外网可用地址
|
||||||
|
if ( self::ipv6_check($addr) ) {
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
// IPv4类地址处理
|
||||||
|
$v4p = substr($addr,0,29);
|
||||||
|
if ( $v4p == '0000:0000:0000:0000:0000:0000'
|
||||||
|
|| strtolower($v4p) == 'ffff:0000:0000:0000:0000:0000' ) {
|
||||||
|
$t = str_replace($v4p,'',$addr);
|
||||||
|
$t = str_replace(':','',$t);
|
||||||
|
$ipv4 = long2ip(hexdec($t));
|
||||||
|
return self::_wan_ipv4($ipv4);
|
||||||
|
}
|
||||||
|
// 取前16位进行比较
|
||||||
|
$v6p = substr($addr,0,4);
|
||||||
|
$bin = decbin(hexdec($v6p));
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
if ( (($p&'1110000000000000')=='0010000000000000') //2000::/3
|
||||||
|
|| (($p&'1111111000000000')=='1111110000000000') //FC00::/7
|
||||||
|
|| (($p&'1111111111000000')=='1111111010000000') //FE80::/10
|
||||||
|
|| (($p&'1111111100000000')=='1111111100000000') //FF00::/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return self::_wan_ipv4($addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _wan_ipv4($addr){
|
||||||
|
if ( !self::ipv4_check($addr) ) return false;
|
||||||
|
$arr = explode('.',$addr);
|
||||||
|
$bin = decbin($arr[0]*256+$arr[1]);
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
$p8 = $p & '1111111100000000';
|
||||||
|
$p16 = &$p;
|
||||||
|
if ( ($p8 == '0000000000000000') // 0/8
|
||||||
|
|| ($p8 == '0000010100000000') // 5/8
|
||||||
|
|| ($p8 == '0000101000000000') // 10/8
|
||||||
|
|| ($p8 == '0001011100000000') // 23/8
|
||||||
|
|| ($p8 == '0010010000000000') // 36/8
|
||||||
|
|| ($p8 == '0010010100000000') // 37/8
|
||||||
|
|| ($p8 == '0010011100000000') // 39/8
|
||||||
|
|| ($p8 == '0010101000000000') // 42/8
|
||||||
|
|| ($p8 == '0110010000000000') // 100/8
|
||||||
|
|| ($p8 == '0110011000000000') // 102/8
|
||||||
|
|| ($p8 == '0110011100000000') // 103/8
|
||||||
|
|| ($p8 == '0110100000000000') // 104/8
|
||||||
|
|| ($p8 == '0110100100000000') // 105/8
|
||||||
|
|| ($p8 == '0110101000000000') // 106/8
|
||||||
|
|| ($p8 == '0111111100000000') // 127/8
|
||||||
|
|| ($p16 == '1010100111111110') // 169.254/16
|
||||||
|
|| (($p&'1111111111110000')=='1010110000010000') // 172.16/12
|
||||||
|
|| ($p8 == '1011001100000000') // 179/8
|
||||||
|
|| ($p8 == '1011100100000000') // 185/8
|
||||||
|
|| ($p16 == '1100000010101000') // 192.168/16
|
||||||
|
|| (($p&'1110000000000000')=='1110000000000000') // 224/8-255/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _fix_v4($addr) {
|
||||||
|
// 修正IPv4位址类IPv6格式为标准IPv6格式,不验证合法性
|
||||||
|
if ( !strpos($addr, '.') ) return $addr;
|
||||||
|
preg_match('/(\d+\.){3}\d+$/',$addr,$arr);
|
||||||
|
if ( !self::ipv4_check($arr[0]) ) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($arr[0]));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$v4p = substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
$p1 = str_replace($arr[0],'',$addr);
|
||||||
|
strtolower($p1) === 'ffff:' && $p1 = '::'.$p1;
|
||||||
|
$addr = $p1 . $v4p;
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
205
.history/vendor/laysense/dns/src/resource/ipv6_20221217224432.php
vendored
Normal file
205
.history/vendor/laysense/dns/src/resource/ipv6_20221217224432.php
vendored
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
|
||||||
|
<?php
|
||||||
|
namespace tools\IPv6;
|
||||||
|
/* PHP-IPv6 V1.0.
|
||||||
|
* Copyright (c) 2010 Mr.Bin <bin_jly@163.com>
|
||||||
|
*/
|
||||||
|
class ipv6 {
|
||||||
|
function addr($addr=null) {
|
||||||
|
// 常规获取IPv6地址或格式化IP地址为IPv6格式
|
||||||
|
!$addr && ($addr = $_SERVER['REMOTE_ADDR']);
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 6 && self::ipv6_check($addr) ) return $addr;
|
||||||
|
elseif ( $type === 4 ) return self::ip426($addr);
|
||||||
|
else return 'Unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* realip()因为在Webman(Workerman)下无效,为防止冲突已删除
|
||||||
|
*/
|
||||||
|
|
||||||
|
function cut($addr) {
|
||||||
|
// 压缩IPv6地址
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$arr2[] = preg_replace('/^0{1,3}(\w+)/','\1',$a);
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$olen = strlen($addr);
|
||||||
|
for($i=6;$i>0;$i--){
|
||||||
|
// 初步压缩
|
||||||
|
$addr = preg_replace('/:(0\:){'.$i.'}/','::',$addr,1);
|
||||||
|
if (strlen($addr) < $olen ) break;
|
||||||
|
}
|
||||||
|
$addr = preg_replace('/^0\:\:/','::',$addr);
|
||||||
|
$addr = preg_replace('/\:\:0$/','::',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fill($addr) {
|
||||||
|
// 标准IPv6格式
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$l = strlen($a);
|
||||||
|
if ( $l > 0 && $l < 4 )
|
||||||
|
$arr2[] = str_repeat('0', 4-$l).$a;
|
||||||
|
else $arr2[] = $a;
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$fil = ':'.str_repeat('0000:', 9-count($arr));
|
||||||
|
$addr = str_replace('::',$fil,$addr);
|
||||||
|
$addr = preg_replace('/^\:/','0000:',$addr);
|
||||||
|
$addr = preg_replace('/\:$/',':0000',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2bin($addr) {
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 0 ) return false;
|
||||||
|
elseif ( $type === 4 ) $addr = self::ip426($addr);
|
||||||
|
else $addr = self::fill($addr);
|
||||||
|
$hexstr = str_replace(':','',$addr);
|
||||||
|
return pack('H*', $hexstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bin2ip($bin) {
|
||||||
|
if ( strlen($bin) !== 16 ) return false;
|
||||||
|
$arr = str_split(join('',unpack('H*', $bin)), 4);
|
||||||
|
$addr = join(':',$arr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip426($addr) {
|
||||||
|
// IPv4 to IPv6
|
||||||
|
if (!self::ipv4_check($addr)) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($addr));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$ipv6 = '0000:0000:0000:0000:0000:0000:';
|
||||||
|
$ipv6 .= substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
return $ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
|
function type($addr) {
|
||||||
|
if ( self::ipv6_check($addr) ) return 6;
|
||||||
|
elseif ( self::ipv4_check($addr) ) return 4;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv4_check($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv6_check($addr) {
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
if ( strpos($addr, '.') ) return false;
|
||||||
|
$l1 = count(explode('::',$addr));
|
||||||
|
if ( $l1 > 2 ) return false;
|
||||||
|
$l2 = count(explode(':',$addr));
|
||||||
|
if ( $l2 < 3 || $l2 > 8 ) return false;
|
||||||
|
if ( $l2 < 8 && $l1 !== 2 ) return false;
|
||||||
|
preg_match('/^([0-9a-f]{0,4}\:)+[0-9a-f]{0,4}$/i',$addr,$arr);
|
||||||
|
if ( !$arr[0] ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2long($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
$long = 0;
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
$long += $a * pow(2, 24-$i*8);
|
||||||
|
}
|
||||||
|
return $long;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wan_ip($addr) {
|
||||||
|
// 检查外网可用地址
|
||||||
|
if ( self::ipv6_check($addr) ) {
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
// IPv4类地址处理
|
||||||
|
$v4p = substr($addr,0,29);
|
||||||
|
if ( $v4p == '0000:0000:0000:0000:0000:0000'
|
||||||
|
|| strtolower($v4p) == 'ffff:0000:0000:0000:0000:0000' ) {
|
||||||
|
$t = str_replace($v4p,'',$addr);
|
||||||
|
$t = str_replace(':','',$t);
|
||||||
|
$ipv4 = long2ip(hexdec($t));
|
||||||
|
return self::_wan_ipv4($ipv4);
|
||||||
|
}
|
||||||
|
// 取前16位进行比较
|
||||||
|
$v6p = substr($addr,0,4);
|
||||||
|
$bin = decbin(hexdec($v6p));
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
if ( (($p&'1110000000000000')=='0010000000000000') //2000::/3
|
||||||
|
|| (($p&'1111111000000000')=='1111110000000000') //FC00::/7
|
||||||
|
|| (($p&'1111111111000000')=='1111111010000000') //FE80::/10
|
||||||
|
|| (($p&'1111111100000000')=='1111111100000000') //FF00::/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return self::_wan_ipv4($addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _wan_ipv4($addr){
|
||||||
|
if ( !self::ipv4_check($addr) ) return false;
|
||||||
|
$arr = explode('.',$addr);
|
||||||
|
$bin = decbin($arr[0]*256+$arr[1]);
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
$p8 = $p & '1111111100000000';
|
||||||
|
$p16 = &$p;
|
||||||
|
if ( ($p8 == '0000000000000000') // 0/8
|
||||||
|
|| ($p8 == '0000010100000000') // 5/8
|
||||||
|
|| ($p8 == '0000101000000000') // 10/8
|
||||||
|
|| ($p8 == '0001011100000000') // 23/8
|
||||||
|
|| ($p8 == '0010010000000000') // 36/8
|
||||||
|
|| ($p8 == '0010010100000000') // 37/8
|
||||||
|
|| ($p8 == '0010011100000000') // 39/8
|
||||||
|
|| ($p8 == '0010101000000000') // 42/8
|
||||||
|
|| ($p8 == '0110010000000000') // 100/8
|
||||||
|
|| ($p8 == '0110011000000000') // 102/8
|
||||||
|
|| ($p8 == '0110011100000000') // 103/8
|
||||||
|
|| ($p8 == '0110100000000000') // 104/8
|
||||||
|
|| ($p8 == '0110100100000000') // 105/8
|
||||||
|
|| ($p8 == '0110101000000000') // 106/8
|
||||||
|
|| ($p8 == '0111111100000000') // 127/8
|
||||||
|
|| ($p16 == '1010100111111110') // 169.254/16
|
||||||
|
|| (($p&'1111111111110000')=='1010110000010000') // 172.16/12
|
||||||
|
|| ($p8 == '1011001100000000') // 179/8
|
||||||
|
|| ($p8 == '1011100100000000') // 185/8
|
||||||
|
|| ($p16 == '1100000010101000') // 192.168/16
|
||||||
|
|| (($p&'1110000000000000')=='1110000000000000') // 224/8-255/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _fix_v4($addr) {
|
||||||
|
// 修正IPv4位址类IPv6格式为标准IPv6格式,不验证合法性
|
||||||
|
if ( !strpos($addr, '.') ) return $addr;
|
||||||
|
preg_match('/(\d+\.){3}\d+$/',$addr,$arr);
|
||||||
|
if ( !self::ipv4_check($arr[0]) ) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($arr[0]));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$v4p = substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
$p1 = str_replace($arr[0],'',$addr);
|
||||||
|
strtolower($p1) === 'ffff:' && $p1 = '::'.$p1;
|
||||||
|
$addr = $p1 . $v4p;
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
205
.history/vendor/laysense/dns/src/resource/ipv6_20221217224436.php
vendored
Normal file
205
.history/vendor/laysense/dns/src/resource/ipv6_20221217224436.php
vendored
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
|
||||||
|
<?php
|
||||||
|
namespace dnstools\IPv6;
|
||||||
|
/* PHP-IPv6 V1.0.
|
||||||
|
* Copyright (c) 2010 Mr.Bin <bin_jly@163.com>
|
||||||
|
*/
|
||||||
|
class ipv6 {
|
||||||
|
function addr($addr=null) {
|
||||||
|
// 常规获取IPv6地址或格式化IP地址为IPv6格式
|
||||||
|
!$addr && ($addr = $_SERVER['REMOTE_ADDR']);
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 6 && self::ipv6_check($addr) ) return $addr;
|
||||||
|
elseif ( $type === 4 ) return self::ip426($addr);
|
||||||
|
else return 'Unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* realip()因为在Webman(Workerman)下无效,为防止冲突已删除
|
||||||
|
*/
|
||||||
|
|
||||||
|
function cut($addr) {
|
||||||
|
// 压缩IPv6地址
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$arr2[] = preg_replace('/^0{1,3}(\w+)/','\1',$a);
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$olen = strlen($addr);
|
||||||
|
for($i=6;$i>0;$i--){
|
||||||
|
// 初步压缩
|
||||||
|
$addr = preg_replace('/:(0\:){'.$i.'}/','::',$addr,1);
|
||||||
|
if (strlen($addr) < $olen ) break;
|
||||||
|
}
|
||||||
|
$addr = preg_replace('/^0\:\:/','::',$addr);
|
||||||
|
$addr = preg_replace('/\:\:0$/','::',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fill($addr) {
|
||||||
|
// 标准IPv6格式
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$l = strlen($a);
|
||||||
|
if ( $l > 0 && $l < 4 )
|
||||||
|
$arr2[] = str_repeat('0', 4-$l).$a;
|
||||||
|
else $arr2[] = $a;
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$fil = ':'.str_repeat('0000:', 9-count($arr));
|
||||||
|
$addr = str_replace('::',$fil,$addr);
|
||||||
|
$addr = preg_replace('/^\:/','0000:',$addr);
|
||||||
|
$addr = preg_replace('/\:$/',':0000',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2bin($addr) {
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 0 ) return false;
|
||||||
|
elseif ( $type === 4 ) $addr = self::ip426($addr);
|
||||||
|
else $addr = self::fill($addr);
|
||||||
|
$hexstr = str_replace(':','',$addr);
|
||||||
|
return pack('H*', $hexstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bin2ip($bin) {
|
||||||
|
if ( strlen($bin) !== 16 ) return false;
|
||||||
|
$arr = str_split(join('',unpack('H*', $bin)), 4);
|
||||||
|
$addr = join(':',$arr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip426($addr) {
|
||||||
|
// IPv4 to IPv6
|
||||||
|
if (!self::ipv4_check($addr)) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($addr));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$ipv6 = '0000:0000:0000:0000:0000:0000:';
|
||||||
|
$ipv6 .= substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
return $ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
|
function type($addr) {
|
||||||
|
if ( self::ipv6_check($addr) ) return 6;
|
||||||
|
elseif ( self::ipv4_check($addr) ) return 4;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv4_check($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv6_check($addr) {
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
if ( strpos($addr, '.') ) return false;
|
||||||
|
$l1 = count(explode('::',$addr));
|
||||||
|
if ( $l1 > 2 ) return false;
|
||||||
|
$l2 = count(explode(':',$addr));
|
||||||
|
if ( $l2 < 3 || $l2 > 8 ) return false;
|
||||||
|
if ( $l2 < 8 && $l1 !== 2 ) return false;
|
||||||
|
preg_match('/^([0-9a-f]{0,4}\:)+[0-9a-f]{0,4}$/i',$addr,$arr);
|
||||||
|
if ( !$arr[0] ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2long($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
$long = 0;
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
$long += $a * pow(2, 24-$i*8);
|
||||||
|
}
|
||||||
|
return $long;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wan_ip($addr) {
|
||||||
|
// 检查外网可用地址
|
||||||
|
if ( self::ipv6_check($addr) ) {
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
// IPv4类地址处理
|
||||||
|
$v4p = substr($addr,0,29);
|
||||||
|
if ( $v4p == '0000:0000:0000:0000:0000:0000'
|
||||||
|
|| strtolower($v4p) == 'ffff:0000:0000:0000:0000:0000' ) {
|
||||||
|
$t = str_replace($v4p,'',$addr);
|
||||||
|
$t = str_replace(':','',$t);
|
||||||
|
$ipv4 = long2ip(hexdec($t));
|
||||||
|
return self::_wan_ipv4($ipv4);
|
||||||
|
}
|
||||||
|
// 取前16位进行比较
|
||||||
|
$v6p = substr($addr,0,4);
|
||||||
|
$bin = decbin(hexdec($v6p));
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
if ( (($p&'1110000000000000')=='0010000000000000') //2000::/3
|
||||||
|
|| (($p&'1111111000000000')=='1111110000000000') //FC00::/7
|
||||||
|
|| (($p&'1111111111000000')=='1111111010000000') //FE80::/10
|
||||||
|
|| (($p&'1111111100000000')=='1111111100000000') //FF00::/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return self::_wan_ipv4($addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _wan_ipv4($addr){
|
||||||
|
if ( !self::ipv4_check($addr) ) return false;
|
||||||
|
$arr = explode('.',$addr);
|
||||||
|
$bin = decbin($arr[0]*256+$arr[1]);
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
$p8 = $p & '1111111100000000';
|
||||||
|
$p16 = &$p;
|
||||||
|
if ( ($p8 == '0000000000000000') // 0/8
|
||||||
|
|| ($p8 == '0000010100000000') // 5/8
|
||||||
|
|| ($p8 == '0000101000000000') // 10/8
|
||||||
|
|| ($p8 == '0001011100000000') // 23/8
|
||||||
|
|| ($p8 == '0010010000000000') // 36/8
|
||||||
|
|| ($p8 == '0010010100000000') // 37/8
|
||||||
|
|| ($p8 == '0010011100000000') // 39/8
|
||||||
|
|| ($p8 == '0010101000000000') // 42/8
|
||||||
|
|| ($p8 == '0110010000000000') // 100/8
|
||||||
|
|| ($p8 == '0110011000000000') // 102/8
|
||||||
|
|| ($p8 == '0110011100000000') // 103/8
|
||||||
|
|| ($p8 == '0110100000000000') // 104/8
|
||||||
|
|| ($p8 == '0110100100000000') // 105/8
|
||||||
|
|| ($p8 == '0110101000000000') // 106/8
|
||||||
|
|| ($p8 == '0111111100000000') // 127/8
|
||||||
|
|| ($p16 == '1010100111111110') // 169.254/16
|
||||||
|
|| (($p&'1111111111110000')=='1010110000010000') // 172.16/12
|
||||||
|
|| ($p8 == '1011001100000000') // 179/8
|
||||||
|
|| ($p8 == '1011100100000000') // 185/8
|
||||||
|
|| ($p16 == '1100000010101000') // 192.168/16
|
||||||
|
|| (($p&'1110000000000000')=='1110000000000000') // 224/8-255/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _fix_v4($addr) {
|
||||||
|
// 修正IPv4位址类IPv6格式为标准IPv6格式,不验证合法性
|
||||||
|
if ( !strpos($addr, '.') ) return $addr;
|
||||||
|
preg_match('/(\d+\.){3}\d+$/',$addr,$arr);
|
||||||
|
if ( !self::ipv4_check($arr[0]) ) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($arr[0]));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$v4p = substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
$p1 = str_replace($arr[0],'',$addr);
|
||||||
|
strtolower($p1) === 'ffff:' && $p1 = '::'.$p1;
|
||||||
|
$addr = $p1 . $v4p;
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
204
.history/vendor/laysense/dns/src/resource/ipv6_20221217224528.php
vendored
Normal file
204
.history/vendor/laysense/dns/src/resource/ipv6_20221217224528.php
vendored
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
<?php
|
||||||
|
namespace dnstools\IPv6;
|
||||||
|
/* PHP-IPv6 V1.0.
|
||||||
|
* Copyright (c) 2010 Mr.Bin <bin_jly@163.com>
|
||||||
|
*/
|
||||||
|
class ipv6 {
|
||||||
|
function addr($addr=null) {
|
||||||
|
// 常规获取IPv6地址或格式化IP地址为IPv6格式
|
||||||
|
!$addr && ($addr = $_SERVER['REMOTE_ADDR']);
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 6 && self::ipv6_check($addr) ) return $addr;
|
||||||
|
elseif ( $type === 4 ) return self::ip426($addr);
|
||||||
|
else return 'Unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* realip()因为在Webman(Workerman)下无效,为防止冲突已删除
|
||||||
|
*/
|
||||||
|
|
||||||
|
function cut($addr) {
|
||||||
|
// 压缩IPv6地址
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$arr2[] = preg_replace('/^0{1,3}(\w+)/','\1',$a);
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$olen = strlen($addr);
|
||||||
|
for($i=6;$i>0;$i--){
|
||||||
|
// 初步压缩
|
||||||
|
$addr = preg_replace('/:(0\:){'.$i.'}/','::',$addr,1);
|
||||||
|
if (strlen($addr) < $olen ) break;
|
||||||
|
}
|
||||||
|
$addr = preg_replace('/^0\:\:/','::',$addr);
|
||||||
|
$addr = preg_replace('/\:\:0$/','::',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fill($addr) {
|
||||||
|
// 标准IPv6格式
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$l = strlen($a);
|
||||||
|
if ( $l > 0 && $l < 4 )
|
||||||
|
$arr2[] = str_repeat('0', 4-$l).$a;
|
||||||
|
else $arr2[] = $a;
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$fil = ':'.str_repeat('0000:', 9-count($arr));
|
||||||
|
$addr = str_replace('::',$fil,$addr);
|
||||||
|
$addr = preg_replace('/^\:/','0000:',$addr);
|
||||||
|
$addr = preg_replace('/\:$/',':0000',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2bin($addr) {
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 0 ) return false;
|
||||||
|
elseif ( $type === 4 ) $addr = self::ip426($addr);
|
||||||
|
else $addr = self::fill($addr);
|
||||||
|
$hexstr = str_replace(':','',$addr);
|
||||||
|
return pack('H*', $hexstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bin2ip($bin) {
|
||||||
|
if ( strlen($bin) !== 16 ) return false;
|
||||||
|
$arr = str_split(join('',unpack('H*', $bin)), 4);
|
||||||
|
$addr = join(':',$arr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip426($addr) {
|
||||||
|
// IPv4 to IPv6
|
||||||
|
if (!self::ipv4_check($addr)) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($addr));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$ipv6 = '0000:0000:0000:0000:0000:0000:';
|
||||||
|
$ipv6 .= substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
return $ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
|
function type($addr) {
|
||||||
|
if ( self::ipv6_check($addr) ) return 6;
|
||||||
|
elseif ( self::ipv4_check($addr) ) return 4;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv4_check($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv6_check($addr) {
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
if ( strpos($addr, '.') ) return false;
|
||||||
|
$l1 = count(explode('::',$addr));
|
||||||
|
if ( $l1 > 2 ) return false;
|
||||||
|
$l2 = count(explode(':',$addr));
|
||||||
|
if ( $l2 < 3 || $l2 > 8 ) return false;
|
||||||
|
if ( $l2 < 8 && $l1 !== 2 ) return false;
|
||||||
|
preg_match('/^([0-9a-f]{0,4}\:)+[0-9a-f]{0,4}$/i',$addr,$arr);
|
||||||
|
if ( !$arr[0] ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2long($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
$long = 0;
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
$long += $a * pow(2, 24-$i*8);
|
||||||
|
}
|
||||||
|
return $long;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wan_ip($addr) {
|
||||||
|
// 检查外网可用地址
|
||||||
|
if ( self::ipv6_check($addr) ) {
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
// IPv4类地址处理
|
||||||
|
$v4p = substr($addr,0,29);
|
||||||
|
if ( $v4p == '0000:0000:0000:0000:0000:0000'
|
||||||
|
|| strtolower($v4p) == 'ffff:0000:0000:0000:0000:0000' ) {
|
||||||
|
$t = str_replace($v4p,'',$addr);
|
||||||
|
$t = str_replace(':','',$t);
|
||||||
|
$ipv4 = long2ip(hexdec($t));
|
||||||
|
return self::_wan_ipv4($ipv4);
|
||||||
|
}
|
||||||
|
// 取前16位进行比较
|
||||||
|
$v6p = substr($addr,0,4);
|
||||||
|
$bin = decbin(hexdec($v6p));
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
if ( (($p&'1110000000000000')=='0010000000000000') //2000::/3
|
||||||
|
|| (($p&'1111111000000000')=='1111110000000000') //FC00::/7
|
||||||
|
|| (($p&'1111111111000000')=='1111111010000000') //FE80::/10
|
||||||
|
|| (($p&'1111111100000000')=='1111111100000000') //FF00::/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return self::_wan_ipv4($addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _wan_ipv4($addr){
|
||||||
|
if ( !self::ipv4_check($addr) ) return false;
|
||||||
|
$arr = explode('.',$addr);
|
||||||
|
$bin = decbin($arr[0]*256+$arr[1]);
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
$p8 = $p & '1111111100000000';
|
||||||
|
$p16 = &$p;
|
||||||
|
if ( ($p8 == '0000000000000000') // 0/8
|
||||||
|
|| ($p8 == '0000010100000000') // 5/8
|
||||||
|
|| ($p8 == '0000101000000000') // 10/8
|
||||||
|
|| ($p8 == '0001011100000000') // 23/8
|
||||||
|
|| ($p8 == '0010010000000000') // 36/8
|
||||||
|
|| ($p8 == '0010010100000000') // 37/8
|
||||||
|
|| ($p8 == '0010011100000000') // 39/8
|
||||||
|
|| ($p8 == '0010101000000000') // 42/8
|
||||||
|
|| ($p8 == '0110010000000000') // 100/8
|
||||||
|
|| ($p8 == '0110011000000000') // 102/8
|
||||||
|
|| ($p8 == '0110011100000000') // 103/8
|
||||||
|
|| ($p8 == '0110100000000000') // 104/8
|
||||||
|
|| ($p8 == '0110100100000000') // 105/8
|
||||||
|
|| ($p8 == '0110101000000000') // 106/8
|
||||||
|
|| ($p8 == '0111111100000000') // 127/8
|
||||||
|
|| ($p16 == '1010100111111110') // 169.254/16
|
||||||
|
|| (($p&'1111111111110000')=='1010110000010000') // 172.16/12
|
||||||
|
|| ($p8 == '1011001100000000') // 179/8
|
||||||
|
|| ($p8 == '1011100100000000') // 185/8
|
||||||
|
|| ($p16 == '1100000010101000') // 192.168/16
|
||||||
|
|| (($p&'1110000000000000')=='1110000000000000') // 224/8-255/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _fix_v4($addr) {
|
||||||
|
// 修正IPv4位址类IPv6格式为标准IPv6格式,不验证合法性
|
||||||
|
if ( !strpos($addr, '.') ) return $addr;
|
||||||
|
preg_match('/(\d+\.){3}\d+$/',$addr,$arr);
|
||||||
|
if ( !self::ipv4_check($arr[0]) ) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($arr[0]));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$v4p = substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
$p1 = str_replace($arr[0],'',$addr);
|
||||||
|
strtolower($p1) === 'ffff:' && $p1 = '::'.$p1;
|
||||||
|
$addr = $p1 . $v4p;
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
204
.history/vendor/laysense/dns/src/resource/ipv6_20221217224616.php
vendored
Normal file
204
.history/vendor/laysense/dns/src/resource/ipv6_20221217224616.php
vendored
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
<?php
|
||||||
|
namespace dnstools;
|
||||||
|
/* PHP-IPv6 V1.0.
|
||||||
|
* Copyright (c) 2010 Mr.Bin <bin_jly@163.com>
|
||||||
|
*/
|
||||||
|
class ipv6 {
|
||||||
|
function addr($addr=null) {
|
||||||
|
// 常规获取IPv6地址或格式化IP地址为IPv6格式
|
||||||
|
!$addr && ($addr = $_SERVER['REMOTE_ADDR']);
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 6 && self::ipv6_check($addr) ) return $addr;
|
||||||
|
elseif ( $type === 4 ) return self::ip426($addr);
|
||||||
|
else return 'Unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* realip()因为在Webman(Workerman)下无效,为防止冲突已删除
|
||||||
|
*/
|
||||||
|
|
||||||
|
function cut($addr) {
|
||||||
|
// 压缩IPv6地址
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$arr2[] = preg_replace('/^0{1,3}(\w+)/','\1',$a);
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$olen = strlen($addr);
|
||||||
|
for($i=6;$i>0;$i--){
|
||||||
|
// 初步压缩
|
||||||
|
$addr = preg_replace('/:(0\:){'.$i.'}/','::',$addr,1);
|
||||||
|
if (strlen($addr) < $olen ) break;
|
||||||
|
}
|
||||||
|
$addr = preg_replace('/^0\:\:/','::',$addr);
|
||||||
|
$addr = preg_replace('/\:\:0$/','::',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function fill($addr) {
|
||||||
|
// 标准IPv6格式
|
||||||
|
if (!self::ipv6_check($addr)) return $addr;
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
$arr = explode(':',$addr);
|
||||||
|
foreach ($arr as $a) {
|
||||||
|
$l = strlen($a);
|
||||||
|
if ( $l > 0 && $l < 4 )
|
||||||
|
$arr2[] = str_repeat('0', 4-$l).$a;
|
||||||
|
else $arr2[] = $a;
|
||||||
|
}
|
||||||
|
$addr = join(':',$arr2);
|
||||||
|
$fil = ':'.str_repeat('0000:', 9-count($arr));
|
||||||
|
$addr = str_replace('::',$fil,$addr);
|
||||||
|
$addr = preg_replace('/^\:/','0000:',$addr);
|
||||||
|
$addr = preg_replace('/\:$/',':0000',$addr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2bin($addr) {
|
||||||
|
$type = self::type($addr);
|
||||||
|
if ( $type === 0 ) return false;
|
||||||
|
elseif ( $type === 4 ) $addr = self::ip426($addr);
|
||||||
|
else $addr = self::fill($addr);
|
||||||
|
$hexstr = str_replace(':','',$addr);
|
||||||
|
return pack('H*', $hexstr);
|
||||||
|
}
|
||||||
|
|
||||||
|
function bin2ip($bin) {
|
||||||
|
if ( strlen($bin) !== 16 ) return false;
|
||||||
|
$arr = str_split(join('',unpack('H*', $bin)), 4);
|
||||||
|
$addr = join(':',$arr);
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip426($addr) {
|
||||||
|
// IPv4 to IPv6
|
||||||
|
if (!self::ipv4_check($addr)) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($addr));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$ipv6 = '0000:0000:0000:0000:0000:0000:';
|
||||||
|
$ipv6 .= substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
return $ipv6;
|
||||||
|
}
|
||||||
|
|
||||||
|
function type($addr) {
|
||||||
|
if ( self::ipv6_check($addr) ) return 6;
|
||||||
|
elseif ( self::ipv4_check($addr) ) return 4;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv4_check($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ipv6_check($addr) {
|
||||||
|
$addr = self::_fix_v4($addr);
|
||||||
|
if ( strpos($addr, '.') ) return false;
|
||||||
|
$l1 = count(explode('::',$addr));
|
||||||
|
if ( $l1 > 2 ) return false;
|
||||||
|
$l2 = count(explode(':',$addr));
|
||||||
|
if ( $l2 < 3 || $l2 > 8 ) return false;
|
||||||
|
if ( $l2 < 8 && $l1 !== 2 ) return false;
|
||||||
|
preg_match('/^([0-9a-f]{0,4}\:)+[0-9a-f]{0,4}$/i',$addr,$arr);
|
||||||
|
if ( !$arr[0] ) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ip2long($addr) {
|
||||||
|
$arr = explode('.', $addr);
|
||||||
|
$l = count($arr);
|
||||||
|
$long = 0;
|
||||||
|
for ( $i=0;$i<$l;$i++ ) {
|
||||||
|
if ( strlen($arr[$i]) > 3 ) return false;
|
||||||
|
if ( !is_numeric($arr[$i]) ) return false;
|
||||||
|
$a = intval($arr[$i], 10);
|
||||||
|
if ($a > 255 || $a <0) return false;
|
||||||
|
$long += $a * pow(2, 24-$i*8);
|
||||||
|
}
|
||||||
|
return $long;
|
||||||
|
}
|
||||||
|
|
||||||
|
function wan_ip($addr) {
|
||||||
|
// 检查外网可用地址
|
||||||
|
if ( self::ipv6_check($addr) ) {
|
||||||
|
$addr = self::fill($addr);
|
||||||
|
// IPv4类地址处理
|
||||||
|
$v4p = substr($addr,0,29);
|
||||||
|
if ( $v4p == '0000:0000:0000:0000:0000:0000'
|
||||||
|
|| strtolower($v4p) == 'ffff:0000:0000:0000:0000:0000' ) {
|
||||||
|
$t = str_replace($v4p,'',$addr);
|
||||||
|
$t = str_replace(':','',$t);
|
||||||
|
$ipv4 = long2ip(hexdec($t));
|
||||||
|
return self::_wan_ipv4($ipv4);
|
||||||
|
}
|
||||||
|
// 取前16位进行比较
|
||||||
|
$v6p = substr($addr,0,4);
|
||||||
|
$bin = decbin(hexdec($v6p));
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
if ( (($p&'1110000000000000')=='0010000000000000') //2000::/3
|
||||||
|
|| (($p&'1111111000000000')=='1111110000000000') //FC00::/7
|
||||||
|
|| (($p&'1111111111000000')=='1111111010000000') //FE80::/10
|
||||||
|
|| (($p&'1111111100000000')=='1111111100000000') //FF00::/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return self::_wan_ipv4($addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _wan_ipv4($addr){
|
||||||
|
if ( !self::ipv4_check($addr) ) return false;
|
||||||
|
$arr = explode('.',$addr);
|
||||||
|
$bin = decbin($arr[0]*256+$arr[1]);
|
||||||
|
$p = str_repeat(0, 16-strlen($bin)).$bin;
|
||||||
|
$p8 = $p & '1111111100000000';
|
||||||
|
$p16 = &$p;
|
||||||
|
if ( ($p8 == '0000000000000000') // 0/8
|
||||||
|
|| ($p8 == '0000010100000000') // 5/8
|
||||||
|
|| ($p8 == '0000101000000000') // 10/8
|
||||||
|
|| ($p8 == '0001011100000000') // 23/8
|
||||||
|
|| ($p8 == '0010010000000000') // 36/8
|
||||||
|
|| ($p8 == '0010010100000000') // 37/8
|
||||||
|
|| ($p8 == '0010011100000000') // 39/8
|
||||||
|
|| ($p8 == '0010101000000000') // 42/8
|
||||||
|
|| ($p8 == '0110010000000000') // 100/8
|
||||||
|
|| ($p8 == '0110011000000000') // 102/8
|
||||||
|
|| ($p8 == '0110011100000000') // 103/8
|
||||||
|
|| ($p8 == '0110100000000000') // 104/8
|
||||||
|
|| ($p8 == '0110100100000000') // 105/8
|
||||||
|
|| ($p8 == '0110101000000000') // 106/8
|
||||||
|
|| ($p8 == '0111111100000000') // 127/8
|
||||||
|
|| ($p16 == '1010100111111110') // 169.254/16
|
||||||
|
|| (($p&'1111111111110000')=='1010110000010000') // 172.16/12
|
||||||
|
|| ($p8 == '1011001100000000') // 179/8
|
||||||
|
|| ($p8 == '1011100100000000') // 185/8
|
||||||
|
|| ($p16 == '1100000010101000') // 192.168/16
|
||||||
|
|| (($p&'1110000000000000')=='1110000000000000') // 224/8-255/8
|
||||||
|
) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function _fix_v4($addr) {
|
||||||
|
// 修正IPv4位址类IPv6格式为标准IPv6格式,不验证合法性
|
||||||
|
if ( !strpos($addr, '.') ) return $addr;
|
||||||
|
preg_match('/(\d+\.){3}\d+$/',$addr,$arr);
|
||||||
|
if ( !self::ipv4_check($arr[0]) ) return $addr;
|
||||||
|
$hex = dechex(self::ip2long($arr[0]));
|
||||||
|
$hex = str_repeat('0', 8-strlen($hex)).$hex;
|
||||||
|
$v4p = substr($hex,0,4) . ':' . substr($hex,4,4);
|
||||||
|
$p1 = str_replace($arr[0],'',$addr);
|
||||||
|
strtolower($p1) === 'ffff:' && $p1 = '::'.$p1;
|
||||||
|
$addr = $p1 . $v4p;
|
||||||
|
return $addr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
252
.history/vendor/workerman/workerman/Protocols/Dns_20221217210440.php
vendored
Normal file
252
.history/vendor/workerman/workerman/Protocols/Dns_20221217210440.php
vendored
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Workerman DNS Protocol
|
||||||
|
* @author Enoch EchoNoch Enoch@laysense.com
|
||||||
|
* @Repo http://git.laysense.com/enoch/workerman-dns
|
||||||
|
* @Github http://github.com/ywnsya/workerman-dns
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Workerman\Protocols;
|
||||||
|
class Dns
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 检查包的完整性
|
||||||
|
* 如果能够得到包长,则返回包的在buffer中的长度,否则返回0继续等待数据
|
||||||
|
* 如果协议有问题,则可以返回false,当前客户端连接会因此断开
|
||||||
|
* @param string $buffer
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function input($buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
return 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打包,当向客户端发送数据的时候会自动调用
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function encode($buffer)
|
||||||
|
{
|
||||||
|
$buffer=json_decode($buffer);
|
||||||
|
$type=$buffer->type;
|
||||||
|
switch($type){
|
||||||
|
case 'A':
|
||||||
|
$type='0001';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$tpart=str_pad(dechex($part),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$detail[$n].$tpart;
|
||||||
|
};
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'NS':
|
||||||
|
$type='0002';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'PTR':
|
||||||
|
$type='000C';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'CNAME':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'SOA':
|
||||||
|
$type='0006';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$ns=json_decode( json_encode( $ns),true);
|
||||||
|
if($ns['type']=='none'){
|
||||||
|
$Rns=dns_get_record($ns['name'],DNS_SOA);
|
||||||
|
$Rns=$Rns[0];
|
||||||
|
$ns=$Rns;
|
||||||
|
$buffer->ttl=$Rns['ttl'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$nss=explode('.',$ns['mname']);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
unset($nss,$len,$tpart);
|
||||||
|
$nss=explode('.',$ns['rname']);
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00'.str_pad(dechex($ns['serial']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['refresh']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['retry']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['expire']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['minimum-ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'AAAA':
|
||||||
|
$type='001C';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$detail[$n]="$i";
|
||||||
|
$lenth[$n]="0010";
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'TEXT':
|
||||||
|
$type='0010';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$detail[$n]='';
|
||||||
|
$text=bin2hex($i);
|
||||||
|
$tlen=str_pad(dechex((strlen($text)/2)),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$tlen.$text;
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'MX':
|
||||||
|
$type='000F';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
|
||||||
|
print_r($ns);
|
||||||
|
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i->name);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)+2),4,"0",STR_PAD_LEFT).str_pad(dechex($i->pre),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AnswerRRs=str_pad(count((array)$buffer->detail),4,"0",STR_PAD_LEFT);
|
||||||
|
#$AnswerRRs='0001';
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
$answer='';
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解包,当接收到的数据字节数等于input返回的值(大于0的值)自动调用
|
||||||
|
* 并传递给onMessage回调函数的$data参数
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function decode($buffer)
|
||||||
|
{
|
||||||
|
$data=bin2hex($buffer);
|
||||||
|
$id=substr($data,0,4);
|
||||||
|
$type=substr($data,-8,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;
|
||||||
|
}
|
||||||
|
$name=substr($data,24,-8);
|
||||||
|
$namede=str_split($name,2);
|
||||||
|
$realname='';
|
||||||
|
foreach($namede as $cha){
|
||||||
|
$chat=hex2bin($cha);
|
||||||
|
if(!ctype_alnum($chat)){
|
||||||
|
$chat='.';
|
||||||
|
}
|
||||||
|
$realname=$realname.$chat;
|
||||||
|
}
|
||||||
|
$realname=substr($realname,1,-1);
|
||||||
|
$query=substr($data,24);
|
||||||
|
|
||||||
|
#$returndata="$type".'|||'."$realname";
|
||||||
|
$returndata= json_encode(array('type' => $type, 'name' => "$realname", 'id'=>"$id", 'query'=>"$query"));
|
||||||
|
|
||||||
|
return $returndata;
|
||||||
|
}
|
||||||
|
}
|
419
.history/vendor/workerman/workerman/Protocols/Dns_20221218180452.php
vendored
Normal file
419
.history/vendor/workerman/workerman/Protocols/Dns_20221218180452.php
vendored
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Workerman DNS Protocol
|
||||||
|
* @author Enoch EchoNoch Enoch@laysense.com
|
||||||
|
* @Repo http://git.laysense.com/enoch/workerman-dns
|
||||||
|
* @Github http://github.com/ywnsya/workerman-dns
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Workerman\Protocols;
|
||||||
|
class Dns
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 检查包的完整性
|
||||||
|
* 如果能够得到包长,则返回包的在buffer中的长度,否则返回0继续等待数据
|
||||||
|
* 如果协议有问题,则可以返回false,当前客户端连接会因此断开
|
||||||
|
* @param string $buffer
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public static function input($buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
return 200;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打包,当向客户端发送数据的时候会自动调用
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function encode($buffer)
|
||||||
|
{
|
||||||
|
|
||||||
|
$buffer=json_decode($buffer);
|
||||||
|
$type=$buffer->type;
|
||||||
|
switch($type){
|
||||||
|
case 'A':
|
||||||
|
$type='0001';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$tpart=str_pad(dechex($part),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$detail[$n].$tpart;
|
||||||
|
};
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'NS':
|
||||||
|
$type='0002';
|
||||||
|
#$lenth='0004';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'PTR':
|
||||||
|
$type='000C';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'CNAME':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'CNAME+A':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$answer='';
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$lenth[0].$detail[0];
|
||||||
|
|
||||||
|
$ip=dns_get_record($ns,DNS_A);
|
||||||
|
$type='0001';
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$ttl=str_pad(dechex($i['ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
$i=$i['ip'];
|
||||||
|
$nss=explode('.',$i);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$tpart=str_pad(dechex($part),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$detail[$n].$tpart;
|
||||||
|
};
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
|
||||||
|
};
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C02B'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
|
||||||
|
$AnswerRRs=str_pad((count((array)$ip)+1),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'CNAME+AAAA':
|
||||||
|
$type='0005';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$nss=explode('.',$ns);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$answer='';
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$lenth[0].$detail[0];
|
||||||
|
|
||||||
|
$ip=dns_get_record($ns,DNS_AAAA);
|
||||||
|
$type='001C';
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$ipv6=$i['ipv6'];
|
||||||
|
$hexstr = unpack("H*hex", inet_pton($ipv6));
|
||||||
|
$ipv6=substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hexstr['hex']), 0, -1);
|
||||||
|
$ipv6=str_replace(':','',$ipv6);
|
||||||
|
#$ipv6= bin2hex($ipv6);
|
||||||
|
$detail[$n]="$ipv6";
|
||||||
|
$lenth[$n]="0010";
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C02C'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
|
||||||
|
$AnswerRRs=str_pad((count((array)$ip)+1),4,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'SOA':
|
||||||
|
$type='0006';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$ns=json_decode( json_encode( $ns),true);
|
||||||
|
if($ns['type']=='none'){
|
||||||
|
$Rns=dns_get_record($ns['name'],DNS_SOA);
|
||||||
|
$Rns=$Rns[0];
|
||||||
|
$ns=$Rns;
|
||||||
|
$buffer->ttl=$Rns['ttl'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$nss=explode('.',$ns['mname']);
|
||||||
|
$detail[0]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00';
|
||||||
|
unset($nss,$len,$tpart);
|
||||||
|
$nss=explode('.',$ns['rname']);
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[0]=$detail[0].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[0]=$detail[0].'00'.str_pad(dechex($ns['serial']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['refresh']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['retry']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['expire']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['minimum-ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
|
||||||
|
$lenth[0]=str_pad(dechex((strlen($detail[0])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
break;
|
||||||
|
case 'AAAA':
|
||||||
|
$type='001C';
|
||||||
|
$ip=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ip as $i){
|
||||||
|
$detail[$n]="$i";
|
||||||
|
$lenth[$n]="0010";
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'TEXT':
|
||||||
|
$type='0010';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
foreach($ns as $i){
|
||||||
|
$detail[$n]='';
|
||||||
|
$text=bin2hex($i);
|
||||||
|
$tlen=str_pad(dechex((strlen($text)/2)),2,"0",STR_PAD_LEFT);
|
||||||
|
$detail[$n]=$tlen.$text;
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'MX':
|
||||||
|
$type='000F';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$n=0;
|
||||||
|
|
||||||
|
print_r($ns);
|
||||||
|
|
||||||
|
foreach($ns as $i){
|
||||||
|
$nss=explode('.',$i->name);
|
||||||
|
$detail[$n]='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail[$n]=$detail[$n].$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail[$n]=$detail[$n].'00';
|
||||||
|
$lenth[$n]=str_pad(dechex((strlen($detail[$n])/2)+2),4,"0",STR_PAD_LEFT).str_pad(dechex($i->pre),4,"0",STR_PAD_LEFT);
|
||||||
|
$n=$n+1;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case 'none':
|
||||||
|
$type='0006';
|
||||||
|
$ns=$buffer->detail;
|
||||||
|
$url=$ns;
|
||||||
|
while(true){
|
||||||
|
preg_match("#\.(.*)#i",$url,$match);//获取根域名
|
||||||
|
$domin = $match[1];
|
||||||
|
$soa=dns_get_record($domin,DNS_SOA);
|
||||||
|
if(array_key_exists('0',$soa)){
|
||||||
|
if(array_key_exists('mname',$soa[0])){
|
||||||
|
$qname=$domin;
|
||||||
|
$ns=$soa[0];
|
||||||
|
break;
|
||||||
|
}else{
|
||||||
|
$url=$domin;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
$url=$domin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$nss=explode('.',$ns['mname']);
|
||||||
|
$detail='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail=$detail.$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail=$detail.'00';
|
||||||
|
unset($nss,$len,$tpart);
|
||||||
|
$nss=explode('.',$ns['rname']);
|
||||||
|
foreach($nss as $part){
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$detail=$detail.$len.$tpart;
|
||||||
|
};
|
||||||
|
$detail=$detail.'00'.str_pad(dechex($ns['serial']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['refresh']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['retry']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['expire']),8,"0",STR_PAD_LEFT).str_pad(dechex($ns['minimum-ttl']),8,"0",STR_PAD_LEFT);
|
||||||
|
|
||||||
|
|
||||||
|
$lenth=str_pad(dechex((strlen($detail)/2)),4,"0",STR_PAD_LEFT);
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
$status='8183';
|
||||||
|
$questions='0001';
|
||||||
|
$AnswerRRs='0000';
|
||||||
|
$AuthorityRRs='0001';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
|
||||||
|
#$qname
|
||||||
|
$nss=explode('.',$qname);
|
||||||
|
$qname='';
|
||||||
|
foreach($nss as $part){
|
||||||
|
#$len=strlen($part);
|
||||||
|
$len=str_pad(dechex(strlen($part)),2,"0",STR_PAD_LEFT);
|
||||||
|
$tpart=bin2hex($part);
|
||||||
|
$qname=$qname.$len.$tpart;
|
||||||
|
};
|
||||||
|
$qname=$qname.'00';
|
||||||
|
|
||||||
|
$answer='';
|
||||||
|
$answer=$answer.$qname.$type.'0001'.$ttl.$lenth.$detail;
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$ttl=str_pad(dechex($buffer->ttl),8,"0",STR_PAD_LEFT);
|
||||||
|
$status='8180';
|
||||||
|
$questions='0001';
|
||||||
|
$AnswerRRs=str_pad(count((array)$buffer->detail),4,"0",STR_PAD_LEFT);
|
||||||
|
$AuthorityRRs='0000';
|
||||||
|
$AdditionalRRs='0000';
|
||||||
|
$answer='';
|
||||||
|
$n=0;
|
||||||
|
foreach($detail as $c){
|
||||||
|
$rlenth='';
|
||||||
|
$rlenth=$lenth[$n];
|
||||||
|
$n=$n+1;
|
||||||
|
$answer=$answer.'C00C'.$type.'0001'.$ttl.$rlenth.$c;
|
||||||
|
}
|
||||||
|
$response=$buffer->id.$status.$questions.$AnswerRRs.$AuthorityRRs.$AdditionalRRs.$buffer->query.$answer;
|
||||||
|
return hex2bin($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解包,当接收到的数据字节数等于input返回的值(大于0的值)自动调用
|
||||||
|
* 并传递给onMessage回调函数的$data参数
|
||||||
|
* @param string $buffer
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function decode($buffer)
|
||||||
|
{
|
||||||
|
$data=bin2hex($buffer);
|
||||||
|
$id=substr($data,0,4);
|
||||||
|
$type=substr($data,-8,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;
|
||||||
|
}
|
||||||
|
$name=substr($data,24,-8);
|
||||||
|
$namede=str_split($name,2);
|
||||||
|
$realname='';
|
||||||
|
foreach($namede as $cha){
|
||||||
|
$chat=hex2bin($cha);
|
||||||
|
if(!ctype_alnum($chat)){
|
||||||
|
$chat='.';
|
||||||
|
}
|
||||||
|
$realname=$realname.$chat;
|
||||||
|
}
|
||||||
|
$realname=substr($realname,1,-1);
|
||||||
|
$query=substr($data,24);
|
||||||
|
|
||||||
|
#$returndata="$type".'|||'."$realname";
|
||||||
|
$returndata= json_encode(array('type' => $type, 'name' => "$realname", 'id'=>"$id", 'query'=>"$query"));
|
||||||
|
|
||||||
|
return $returndata;
|
||||||
|
}
|
||||||
|
}
|
33
app/controller/DnsController.php
Normal file
33
app/controller/DnsController.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace app\controller;
|
||||||
|
include_once base_path().'/vendor/laysense/dns/src/resource/ipv6.php';
|
||||||
|
use dnstools\ipv6; #用于IPv6相关
|
||||||
|
/**
|
||||||
|
* $ipv6=new IPv6;
|
||||||
|
* $ipv6->ip2bin($ip);
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DnsController
|
||||||
|
{
|
||||||
|
public function DNS($type,$name,$rip,$id,$query)
|
||||||
|
{
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
|
||||||
|
#此处请根据业务需要,通过判断$name和$rip返回正确的数据
|
||||||
|
#详情请参见 https://github.com/ywnsya/workerman-dns 尤其是 https://github.com/ywnsya/Workerman-DNS/blob/master/start.php 中的用法
|
||||||
|
|
||||||
|
$send['detail']='dns.laysense.com';
|
||||||
|
$send['ttl']=30;
|
||||||
|
$send['type']='PTR';
|
||||||
|
|
||||||
|
|
||||||
|
#此处无需修改
|
||||||
|
$send['id']=$id;
|
||||||
|
$send['query']=$query;
|
||||||
|
$return=json_encode($send);
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
}
|
@ -34,6 +34,7 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
"Laysense\\Dns\\" : "vendor/laysense/dns/src",
|
||||||
"": "./",
|
"": "./",
|
||||||
"app\\": "./app",
|
"app\\": "./app",
|
||||||
"App\\": "./app",
|
"App\\": "./app",
|
||||||
|
4
config/plugin/laysense/dns/app.php
Normal file
4
config/plugin/laysense/dns/app.php
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'enable' => true,
|
||||||
|
];
|
9
config/plugin/laysense/dns/process.php
Normal file
9
config/plugin/laysense/dns/process.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
return [
|
||||||
|
'Dns' => [
|
||||||
|
'handler' => process\DnsProcess::class,
|
||||||
|
'listen' => 'Dns://0.0.0.0:53',
|
||||||
|
'transport' => 'udp',
|
||||||
|
'count' => cpu_count() * 4
|
||||||
|
],
|
||||||
|
];
|
@ -17,7 +17,7 @@ return [
|
|||||||
'transport' => 'tcp',
|
'transport' => 'tcp',
|
||||||
'context' => [],
|
'context' => [],
|
||||||
'name' => 'webman',
|
'name' => 'webman',
|
||||||
'count' => cpu_count() * 4,
|
'count' => cpu_count() * 1,
|
||||||
'user' => '',
|
'user' => '',
|
||||||
'group' => '',
|
'group' => '',
|
||||||
'reusePort' => false,
|
'reusePort' => false,
|
||||||
|
24
process/DnsProcess.php
Normal file
24
process/DnsProcess.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
namespace process;
|
||||||
|
use Workerman\Connection\TcpConnection;
|
||||||
|
use app\controller\DnsController;
|
||||||
|
|
||||||
|
class DnsProcess
|
||||||
|
{
|
||||||
|
|
||||||
|
public function onMessage($connection, $data)
|
||||||
|
{
|
||||||
|
$data=json_decode($data);
|
||||||
|
$type=$data->type; #查询类型
|
||||||
|
$name=$data->name; #查询内容(一般是域名,PTR时为倒序IP)
|
||||||
|
$rip=$connection->getRemoteIp(); #客户端IP
|
||||||
|
|
||||||
|
#输出信息
|
||||||
|
#echo "\n Type:$type \n Domain: $name\n Client IP: $rip \n";
|
||||||
|
|
||||||
|
$dns=new DnsController;
|
||||||
|
$return=$dns->DNS($type,$name,$rip,$data->id,$data->query);
|
||||||
|
$connection->send($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
1
vendor/composer/autoload_psr4.php
vendored
1
vendor/composer/autoload_psr4.php
vendored
@ -26,6 +26,7 @@ return array(
|
|||||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
|
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
|
||||||
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
|
||||||
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
|
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
|
||||||
|
'Laysense\\Dns\\' => array($vendorDir . '/laysense/dns/src'),
|
||||||
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
|
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
|
||||||
'Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'),
|
'Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'),
|
||||||
'App\\' => array($baseDir . '/app'),
|
'App\\' => array($baseDir . '/app'),
|
||||||
|
8
vendor/composer/autoload_static.php
vendored
8
vendor/composer/autoload_static.php
vendored
@ -55,6 +55,10 @@ class ComposerStaticInitfdb689ed918f2ee4ecdf1e51d93bd946
|
|||||||
array (
|
array (
|
||||||
'Monolog\\' => 8,
|
'Monolog\\' => 8,
|
||||||
),
|
),
|
||||||
|
'L' =>
|
||||||
|
array (
|
||||||
|
'Laysense\\Dns\\' => 13,
|
||||||
|
),
|
||||||
'F' =>
|
'F' =>
|
||||||
array (
|
array (
|
||||||
'FastRoute\\' => 10,
|
'FastRoute\\' => 10,
|
||||||
@ -150,6 +154,10 @@ class ComposerStaticInitfdb689ed918f2ee4ecdf1e51d93bd946
|
|||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
|
0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
|
||||||
),
|
),
|
||||||
|
'Laysense\\Dns\\' =>
|
||||||
|
array (
|
||||||
|
0 => __DIR__ . '/..' . '/laysense/dns/src',
|
||||||
|
),
|
||||||
'FastRoute\\' =>
|
'FastRoute\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/nikic/fast-route/src',
|
0 => __DIR__ . '/..' . '/nikic/fast-route/src',
|
||||||
|
1
vendor/laysense/dns/.gitignore
vendored
Normal file
1
vendor/laysense/dns/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.history
|
13
vendor/laysense/dns/composer.json
vendored
Normal file
13
vendor/laysense/dns/composer.json
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"name": "laysense/dns",
|
||||||
|
"type": "library",
|
||||||
|
"license": "MIT",
|
||||||
|
"description": "Webman plugin laysense/dns. You can making a DNS Server with Webman now",
|
||||||
|
"require": {
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Laysense\\Dns\\": "src"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
80
vendor/laysense/dns/src/Install.php
vendored
Normal file
80
vendor/laysense/dns/src/Install.php
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
namespace Laysense\Dns;
|
||||||
|
|
||||||
|
class Install
|
||||||
|
{
|
||||||
|
const WEBMAN_PLUGIN = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected static $pathRelation = array (
|
||||||
|
'config/plugin/laysense/dns' => 'config/plugin/laysense/dns',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function install()
|
||||||
|
{
|
||||||
|
static::installByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uninstall
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstall()
|
||||||
|
{
|
||||||
|
self::uninstallByRelation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* installByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function installByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
if ($pos = strrpos($dest, '/')) {
|
||||||
|
$parent_dir = base_path().'/'.substr($dest, 0, $pos);
|
||||||
|
if (!is_dir($parent_dir)) {
|
||||||
|
mkdir($parent_dir, 0777, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//symlink(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
copy_dir(__DIR__ . "/$source", base_path()."/$dest");
|
||||||
|
echo "Create $dest
|
||||||
|
";
|
||||||
|
}
|
||||||
|
copy(__DIR__ .'/resource/Dns.php',base_path().'/vendor/workerman/workerman/Protocols/Dns.php');
|
||||||
|
echo "Create DNS Protocol Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsProcess.php',base_path().'/process/DnsProcess.php');
|
||||||
|
echo "Create DNS Process Successfully";
|
||||||
|
copy(__DIR__ .'/resource/DnsController.php',base_path().'/app/controller/DnsController.php');
|
||||||
|
echo "Create Dns Controller Successfully";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* uninstallByRelation
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function uninstallByRelation()
|
||||||
|
{
|
||||||
|
foreach (static::$pathRelation as $source => $dest) {
|
||||||
|
$path = base_path()."/$dest";
|
||||||
|
if (!is_dir($path) && !is_file($path)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "Remove $dest
|
||||||
|
";
|
||||||
|
if (is_file($path) || is_link($path)) {
|
||||||
|
unlink($path);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user