-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathcmd_dns.php
More file actions
98 lines (78 loc) · 1.7 KB
/
cmd_dns.php
File metadata and controls
98 lines (78 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
$dns_setup_server = "";
function cmd_dns_server($cmd)
{
global $dns_setup_server;
if(count($cmd) < 3)
return slave_write(ERR_CMD_ARG);
$addr = $cmd[2];
if(inet_pton($addr) === false)
return slave_write(ERR_CMD_ARG);
$dns_setup_server = $addr;
return slave_write(ERR_OK);
}
function cmd_dns_query($cmd)
{
global $dns_setup_server;
if(count($cmd) < 4)
return slave_write(ERR_CMD_ARG);
switch(strtoupper($cmd[2]))
{
case "A":
$rr_type = RR_A;
break;
case "AAAA":
$rr_type = RR_AAAA;
break;
default:
return slave_write(ERR_CMD_ARG);
}
$query_name = $cmd[3];
if(inet_pton($query_name) !== false)
return slave_write(ERR_OK, $query_name);
else
{
if(count($cmd) > 4)
{
$wait_ms = (int)$cmd[4];
if(!$wait_ms)
return slave_write(ERR_CMD_ARG);
}
else
$wait_ms = 2000;
slave_write(ERR_CMD_WAIT, (string)($wait_ms / 1000 + 1));
if($rr_type == RR_A)
{
dns_setup(UDP_ID_DNS, $dns_setup_server, false);
$rr = dns_lookup($query_name, RR_A, $wait_ms);
if($rr == $query_name)
return slave_write(ERR_OK, "0.0.0.0");
else
return slave_write(ERR_OK, $rr);
}
else
{
dns_setup(UDP_ID_DNS, $dns_setup_server, true);
$rr = dns_lookup($query_name, RR_AAAA, $wait_ms);
if($rr == $query_name)
return slave_write(ERR_OK, "::0");
else
return slave_write(ERR_OK, $rr);
}
}
}
function cmd_dns($cmd)
{
if(count($cmd) < 2)
return slave_write(ERR_CMD_ARG);
switch($cmd[1])
{
case "server":
return cmd_dns_server($cmd);
case "query":
return cmd_dns_query($cmd);
default:
return slave_write(ERR_CMD_ARG);
}
}
?>