域名解析检测脚本?

wen 实用脚本 42

本文目录导读:

域名解析检测脚本?

  1. 基础DNS解析检测脚本(Shell)
  2. Python DNS检测脚本(功能更全面)
  3. Windows批处理脚本
  4. 使用说明

基础DNS解析检测脚本(Shell)

#!/bin/bash
# DNS解析检测脚本
# 使用方法: ./dns_check.sh [域名]
DOMAIN=${1:-"example.com"}
DNS_SERVERS=("8.8.8.8" "1.1.1.1" "114.114.114.114")
echo "========================================"
echo "域名解析检测报告 - $DOMAIN"
echo "检测时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================"
# 检测系统默认DNS
echo -e "\n[1] 系统默认DNS解析结果:"
if command -v nslookup &> /dev/null; then
    nslookup $DOMAIN 2>&1 | grep -E "Address|Name"
elif command -v host &> /dev/null; then
    host $DOMAIN
else
    dig $DOMAIN +short
fi
# 检测指定DNS服务器
echo -e "\n[2] 指定DNS服务器解析结果:"
for dns in "${DNS_SERVERS[@]}"; do
    echo -n "DNS服务器 $dns: "
    result=$(dig @$dns $DOMAIN +short 2>/dev/null)
    if [ -n "$result" ]; then
        echo "$result"
    else
        echo "解析失败"
    fi
done
# 检测IPv4和IPv6
echo -e "\n[3] IPv4/IPv6检测:"
echo -n "IPv4: "
dig $DOMAIN A +short 2>/dev/null | head -3
echo -n "IPv6: "
dig $DOMAIN AAAA +short 2>/dev/null | head -3
# 检测CNAME记录
echo -e "\n[4] CNAME记录:"
dig $DOMAIN CNAME +short 2>/dev/null
# 检测MX记录
echo -e "\n[5] 邮件服务器(MX):"
dig $DOMAIN MX +short 2>/dev/null
# 检测NS记录
echo -e "\n[6] 域名服务器(NS):"
dig $DOMAIN NS +short 2>/dev/null
# 响应时间检测
echo -e "\n[7] 响应时间检测:"
for dns in "${DNS_SERVERS[@]}"; do
    start_time=$(date +%s%N)
    dig @$dns $DOMAIN +short > /dev/null 2>&1
    end_time=$(date +%s%N)
    duration=$(( ($end_time - $start_time) / 1000000 ))
    echo "DNS $dns 响应时间: ${duration}ms"
done
echo -e "\n========================================"
echo "检测完成"
echo "========================================"

Python DNS检测脚本(功能更全面)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import dns.resolver
import dns.reversename
import socket
import argparse
from datetime import datetime
import concurrent.futures
class DNSAnalyzer:
    def __init__(self, domain):
        self.domain = domain
        self.resolver = dns.resolver.Resolver()
        self.resolver.timeout = 5
        self.resolver.lifetime = 5
        self.custom_dns = ['8.8.8.8', '1.1.1.1', '114.114.114.114']
    def check_record(self, record_type):
        """检查特定类型的DNS记录"""
        try:
            answers = self.resolver.resolve(self.domain, record_type)
            return [str(rdata) for rdata in answers]
        except dns.resolver.NoAnswer:
            return None
        except dns.resolver.NXDOMAIN:
            return "域名不存在"
        except Exception as e:
            return f"错误: {str(e)}"
    def check_all_records(self):
        """检查所有类型的DNS记录"""
        record_types = ['A', 'AAAA', 'CNAME', 'MX', 'NS', 'TXT', 'SOA']
        results = {}
        for record_type in record_types:
            results[record_type] = self.check_record(record_type)
        return results
    def check_custom_dns(self):
        """使用自定义DNS服务器检测"""
        results = {}
        for dns_server in self.custom_dns:
            resolver = dns.resolver.Resolver()
            resolver.nameservers = [dns_server]
            resolver.timeout = 3
            resolver.lifetime = 3
            try:
                answers = resolver.resolve(self.domain, 'A')
                results[dns_server] = [str(rdata) for rdata in answers]
            except Exception as e:
                results[dns_server] = f"失败: {str(e)}"
        return results
    def check_propagation(self):
        """检测DNS传播状态"""
        print(f"\n[3] DNS传播检测:")
        global_dns = [
            ('Google', '8.8.8.8'),
            ('Cloudflare', '1.1.1.1'),
            ('OpenDNS', '208.67.222.222'),
            ('阿里云', '223.5.5.5'),
            ('114DNS', '114.114.114.114'),
            ('腾讯云', '119.29.29.29'),
        ]
        results = {}
        for name, dns_server in global_dns:
            resolver = dns.resolver.Resolver()
            resolver.nameservers = [dns_server]
            try:
                answers = resolver.resolve(self.domain, 'A')
                ips = [str(rdata) for rdata in answers]
                results[f"{name}({dns_server})"] = ips
            except:
                results[f"{name}({dns_server})"] = "失败"
        return results
    def reverse_dns(self, ip):
        """反向DNS查询"""
        try:
            hostname = socket.gethostbyaddr(ip)
            return hostname[0]
        except:
            return None
    def generate_report(self):
        """生成检测报告"""
        print("=" * 60)
        print(f"DNS解析检测报告")
        print(f"域名: {self.domain}")
        print(f"检测时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        print("=" * 60)
        # 基本记录检测
        print("\n[1] DNS记录检测:")
        records = self.check_all_records()
        for record_type, value in records.items():
            if value:
                print(f"  {record_type}记录: {value[:3]}")  # 只显示前3条
            else:
                print(f"  {record_type}记录: 无")
        # 自定义DNS检测
        print("\n[2] 自定义DNS服务器检测:")
        custom_results = self.check_custom_dns()
        for dns, result in custom_results.items():
            print(f"  DNS {dns}: {result}")
        # DNS传播检测
        propagation_results = self.check_propagation()
        for location, result in propagation_results.items():
            print(f"  {location}: {result}")
        # 反向DNS检测
        print("\n[4] 反向DNS检测:")
        a_records = self.check_record('A')
        if a_records and isinstance(a_records, list):
            for ip in a_records[:3]:
                hostname = self.reverse_dns(ip)
                if hostname:
                    print(f"  {ip} -> {hostname}")
                else:
                    print(f"  {ip} -> 未找到PTR记录")
        print("\n" + "=" * 60)
        print("检测完成")
        print("=" * 60)
def main():
    parser = argparse.ArgumentParser(description='DNS解析检测工具')
    parser.add_argument('domain', help='要检测的域名')
    parser.add_argument('-r', '--record', help='指定记录类型检测')
    parser.add_argument('-d', '--dns-server', help='指定DNS服务器')
    args = parser.parse_args()
    analyzer = DNSAnalyzer(args.domain)
    if args.record:
        # 检测指定记录类型
        result = analyzer.check_record(args.record.upper())
        print(f"{args.domain} 的 {args.record.upper()} 记录: {result}")
    else:
        # 生成完整报告
        analyzer.generate_report()
if __name__ == "__main__":
    main()

Windows批处理脚本

@echo off
chcp 65001 >nul
set DOMAIN=%~1
if "%DOMAIN%"=="" set DOMAIN=example.com
echo ========================================
echo DNS解析检测报告
echo 域名: %DOMAIN%
echo 检测时间: %date% %time%
echo ========================================
echo.
echo [1] 系统DNS解析:
nslookup %DOMAIN% 2>nul
echo.
echo [2] 使用公共DNS检测:
echo Google DNS (8.8.8.8):
nslookup %DOMAIN% 8.8.8.8 2>nul
echo.
echo Cloudflare DNS (1.1.1.1):
nslookup %DOMAIN% 1.1.1.1 2>nul
echo.
echo 114DNS (114.114.114.114):
nslookup %DOMAIN% 114.114.114.114 2>nul
echo.
echo [3] 网络连通性检测:
ping -n 2 %DOMAIN% | findstr "来自"
echo.
echo [4] 路由追踪:
tracert -d -h 10 %DOMAIN%
echo.
echo ========================================
echo 检测完成
echo ========================================
pause

使用说明

安装依赖(Python版本)

pip install dnspython

使用方法

Shell脚本:

chmod +x dns_check.sh
./dns_check.sh example.com

Python脚本:

python dns_analyzer.py example.com
python dns_analyzer.py example.com -r MX  # 只检测MX记录
python dns_analyzer.py example.com -d 8.8.8.8  # 使用指定DNS

功能特点

  1. 多种记录类型检测: A, AAAA, CNAME, MX, NS, TXT, SOA
  2. 多DNS服务器对比: 同时使用多个公共DNS检测
  3. DNS传播检测: 检查全球DNS服务器的解析一致性
  4. 响应时间检测: 测量各个DNS服务器的响应速度
  5. 反向DNS查询: IP地址到域名的反向解析
  6. 网络连通性检测: Ping和路由追踪

这些脚本可以帮助你全面了解域名解析的状态和问题。

抱歉,评论功能暂时关闭!