mirror of
https://github.com/rekryt/iplist.git
synced 2025-10-12 08:34:15 +03:00
fix: implement the ability to specify DNS servers via their domain name
This commit is contained in:
@@ -23,21 +23,18 @@ class DNSHelper {
|
|||||||
private float $resolveDelay;
|
private float $resolveDelay;
|
||||||
private bool $isUseIpv4;
|
private bool $isUseIpv4;
|
||||||
private bool $isUseIpv6;
|
private bool $isUseIpv6;
|
||||||
|
private array $dnsServers;
|
||||||
|
|
||||||
public function __construct(private array $dnsServers = []) {
|
public function __construct(array $dnsServers = []) {
|
||||||
$this->resolveDelay = (getEnv('SYS_DNS_RESOLVE_DELAY') ?? 500) / 1000;
|
$this->resolveDelay = (getEnv('SYS_DNS_RESOLVE_DELAY') ?? 500) / 1000;
|
||||||
$this->isUseIpv4 = (getEnv('SYS_DNS_RESOLVE_IP4') ?? 'true') == 'true';
|
$this->isUseIpv4 = (getEnv('SYS_DNS_RESOLVE_IP4') ?? 'true') == 'true';
|
||||||
$this->isUseIpv6 = (getEnv('SYS_DNS_RESOLVE_IP6') ?? 'true') == 'true';
|
$this->isUseIpv6 = (getEnv('SYS_DNS_RESOLVE_IP6') ?? 'true') == 'true';
|
||||||
}
|
|
||||||
|
|
||||||
|
$this->dnsServers = array_filter(
|
||||||
|
array_map(
|
||||||
/**
|
/**
|
||||||
* @param array $dnsServers
|
|
||||||
* @return DnsResolver
|
|
||||||
* @throws DnsException
|
* @throws DnsException
|
||||||
*/
|
*/ function (string $server): ?string {
|
||||||
private function getResolver(array $dnsServers): DnsResolver {
|
|
||||||
$resolvedServers = array_filter(
|
|
||||||
array_map(function (string $server): ?string {
|
|
||||||
if (str_contains($server, ':')) {
|
if (str_contains($server, ':')) {
|
||||||
[$host, $port] = explode(':', $server, 2);
|
[$host, $port] = explode(':', $server, 2);
|
||||||
} else {
|
} else {
|
||||||
@@ -57,13 +54,22 @@ class DNSHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return $port ? "{$ip}:{$port}" : $ip;
|
return $port ? "{$ip}:{$port}" : $ip;
|
||||||
}, $dnsServers)
|
},
|
||||||
|
$dnsServers
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $dnsServers
|
||||||
|
* @return DnsResolver
|
||||||
|
* @throws DnsException
|
||||||
|
*/
|
||||||
|
private function getResolver(array $dnsServers): DnsResolver {
|
||||||
return dnsResolverFactory(
|
return dnsResolverFactory(
|
||||||
new Rfc1035StubDnsResolver(
|
new Rfc1035StubDnsResolver(
|
||||||
null,
|
null,
|
||||||
new class ($resolvedServers) implements DnsConfigLoader {
|
new class ($dnsServers) implements DnsConfigLoader {
|
||||||
public function __construct(private readonly array $dnsServers = []) {
|
public function __construct(private readonly array $dnsServers = []) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,6 +84,7 @@ class DNSHelper {
|
|||||||
/**
|
/**
|
||||||
* @param string $domain
|
* @param string $domain
|
||||||
* @return array[]
|
* @return array[]
|
||||||
|
* @throws DnsException
|
||||||
*/
|
*/
|
||||||
public function resolve(string $domain): array {
|
public function resolve(string $domain): array {
|
||||||
$ipv4 = [];
|
$ipv4 = [];
|
||||||
|
Reference in New Issue
Block a user