mirror of https://github.com/dnomd343/tgbot
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							77 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							77 lines
						
					
					
						
							2.2 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								class DNS { // DNS解析功能
							 | 
						|
								    public function resolveA($domain) { // DNS解析A记录
							 | 
						|
								        $ipAddr = array();
							 | 
						|
								        $rs = dns_get_record(strtolower($domain), DNS_A);
							 | 
						|
								        foreach ($rs as $record) {
							 | 
						|
								            $ipAddr[] = ip2long($record['ip']);
							 | 
						|
								        }
							 | 
						|
								        sort($ipAddr); // 解析结果排序
							 | 
						|
								        foreach ($ipAddr as &$ip) {
							 | 
						|
								            $ip = long2ip($ip);
							 | 
						|
								        }
							 | 
						|
								        return $ipAddr;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function resolveAAAA($domain) { // DNS解析AAAA记录
							 | 
						|
								        $ipAddr = array();
							 | 
						|
								        $rs = dns_get_record(strtolower($domain), DNS_AAAA);
							 | 
						|
								        foreach ($rs as $record) {
							 | 
						|
								            $ipAddr[] = $this->ip2long6($record['ipv6']);
							 | 
						|
								        }
							 | 
						|
								        sort($ipAddr); // 解析结果排序
							 | 
						|
								        foreach ($ipAddr as &$ip) {
							 | 
						|
								            $ip = $this->long2ip6($ip);
							 | 
						|
								        }
							 | 
						|
								        return $ipAddr;
							 | 
						|
								    }
							 | 
						|
								    
							 | 
						|
								    public function resolveIP($domain) { // DNS解析IP记录 A/AAAA
							 | 
						|
								        $ipAddr = array();
							 | 
						|
								        $ipv4 = $this->resolveA($domain);
							 | 
						|
								        foreach ($ipv4 as $ip) {
							 | 
						|
								            $ipAddr[] = $ip;
							 | 
						|
								        }
							 | 
						|
								        $ipv6 = $this->resolveAAAA($domain);
							 | 
						|
								        foreach ($ipv6 as $ip) {
							 | 
						|
								            $ipAddr[] = $ip;
							 | 
						|
								        }
							 | 
						|
								        return $ipAddr;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function ip2long6($ipv6) { // 压缩IPv6地址为long
							 | 
						|
								        $ip_n = inet_pton($ipv6);
							 | 
						|
								        $bits = 15;
							 | 
						|
								        while ($bits >= 0) {
							 | 
						|
								          $bin = sprintf("%08b", (ord($ip_n[$bits])));
							 | 
						|
								          $ipv6long = $bin.$ipv6long;
							 | 
						|
								          $bits--;
							 | 
						|
								        }
							 | 
						|
								        return gmp_strval(gmp_init($ipv6long, 2), 10);
							 | 
						|
								    }
							 | 
						|
								      
							 | 
						|
								    public function long2ip6($ipv6long) { // 解压long为IPv6地址
							 | 
						|
								        $bin = gmp_strval(gmp_init($ipv6long, 10), 2);
							 | 
						|
								        if (strlen($bin) < 128) {
							 | 
						|
								            $pad = 128 - strlen($bin);
							 | 
						|
								            for ($i = 1; $i <= $pad; $i++) {
							 | 
						|
								                $bin = '0' . $bin;
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								        $bits = 0;
							 | 
						|
								        while ($bits <= 7) {
							 | 
						|
								            $bin_part = substr($bin, ($bits * 16), 16);
							 | 
						|
								            $ipv6 .= dechex(bindec($bin_part)) . ':';
							 | 
						|
								            $bits++;
							 | 
						|
								        }
							 | 
						|
								        return inet_ntop(inet_pton(substr($ipv6, 0, -1)));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function zipIPv6($ipv6) { // 压缩IPv6地址
							 | 
						|
								        $ipv6 = $this->ip2long6($ipv6);
							 | 
						|
								        return $this->long2ip6($ipv6);
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								?>
							 | 
						|
								
							 |