mirror of
https://github.com/Murasame-Dev/McStatus-API.git
synced 2025-12-16 05:08:00 +00:00
Intial Init
This commit is contained in:
parent
c197ac5d5d
commit
3dbd5e8a8e
7 changed files with 294 additions and 0 deletions
41
dnslookup.py
Normal file
41
dnslookup.py
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# 此模块用于解析 SRV 记录,返回值为 IP 和 解析类型(srv 或者 normal)
|
||||
import dns.resolver
|
||||
|
||||
def dns_lookup(ip):
|
||||
# 因为第一次解析是面向于 SRV 的,所以需要做是否带端口号的判断
|
||||
if ':' in ip:
|
||||
type = f'normal'
|
||||
return ip, type
|
||||
|
||||
# 自定义 DNS 解析器
|
||||
resolver = dns.resolver.Resolver()
|
||||
resolver.nameservers = ['223.5.5.5', '223.6.6.6'] # 添加备用DNS
|
||||
resolver.timeout = 5 # 单次查询超时时间
|
||||
resolver.lifetime = 10 # 总解析时间限制
|
||||
|
||||
try:
|
||||
print(f'正在解析 SRV 记录: _minecraft._tcp.{ip}')
|
||||
answers = resolver.resolve(f'_minecraft._tcp.{ip}', 'SRV')
|
||||
|
||||
# address 的源输出末端有沟槽的 ".",去掉它
|
||||
address = str(answers[0].target).rstrip('.')
|
||||
port = answers[0].port
|
||||
|
||||
# 拼接端口号,赋值 SRV
|
||||
ip = f'{address}:{port}'
|
||||
print(f'解析出 SRV 地址: {ip}')
|
||||
type = f'srv'
|
||||
return ip, type
|
||||
|
||||
except dns.resolver.NoAnswer:
|
||||
print(f'无法解析SRV记录: _minecraft._tcp.{ip} (DNS服务器无答应)')
|
||||
except dns.resolver.NXDOMAIN:
|
||||
print(f'域名不存在SRV记录: _minecraft._tcp.{ip}')
|
||||
except (dns.resolver.Timeout, dns.resolver.LifetimeTimeout):
|
||||
print(f'DNS解析超时: {ip}')
|
||||
except Exception as e:
|
||||
print(f'DNS解析出现未知错误: {e}')
|
||||
|
||||
type = f'normal'
|
||||
return ip, type
|
||||
Loading…
Add table
Add a link
Reference in a new issue