TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

域名检测工具源码:区分解析异常与网站访问故障

2026-09-28
/
0 评论
/
1 阅读
/
正在检测是否收录...
09/28

域名有解析记录,网页仍然打不开

排查域名故障时,把“检测成功”定义为解析到了 IP,容易漏掉后续问题。DNS 只负责把域名转换为地址;浏览器访问网站,还要建立连接、完成 HTTPS 握手,并收到服务器响应。因此,域名检测工具至少要把解析结果和访问结果分开输出。

下面的源码使用 Python 标准库,无须安装依赖。输入的是域名,不是完整网址;程序会查询当前运行环境能解析到的地址,再请求该域名的 HTTPS 首页。它关闭了自动跳转,便于保留首次响应状态和 Location 地址。

分开记录 DNS 与 HTTPS 结果

将代码保存为 domain_check.py:

```python
import socket
import ssl
import sys
import urllib.error
import urllib.request

class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, request, fp, code, msg, headers, newurl):
return None

def check(domain):
domain = domain.strip().rstrip(".")
try:
host = domain.encode("idna").decode("ascii")
labels = host.split(".")
if (
len(host) > 253
or len(labels) < 2
or any(
not label
or len(label) > 63
or label.startswith("-")
or label.endswith("-")
for label in labels
)
):
raise ValueError("域名格式不符合要求")
except (UnicodeError, ValueError) as exc:
print(f"输入错误:{exc}")
return

try:
    records = socket.getaddrinfo(host, 443, type=socket.SOCK_STREAM)
    addresses = sorted({item[4][0] for item in records})
    print("DNS 地址:", ", ".join(addresses))
except socket.gaierror as exc:
    print(f"DNS 解析失败:{exc}")
    return

opener = urllib.request.build_opener(NoRedirect)
request = urllib.request.Request(
    f"https://{host}/",
    headers={"User-Agent": "DomainCheck/1.0"},
)
try:
    with opener.open(request, timeout=5) as response:
        print("HTTPS 状态:", response.status)
        print("跳转地址:", response.headers.get("Location", "无"))
except urllib.error.HTTPError as exc:
    print("HTTPS 状态:", exc.code)
    print("跳转地址:", exc.headers.get("Location", "无"))
except urllib.error.URLError as exc:
    print(f"HTTPS 访问失败:{exc.reason}")
except (TimeoutError, ssl.SSLError, OSError) as exc:
    print(f"连接失败:{exc}")

if name == "main":
if len(sys.argv) != 2:
print("用法:python domain_check.py example.com")
sys.exit(1)
check(sys.argv[1])
```

运行 python domain_check.py example.com 即可查看输出。代码中的超时时间限制了单次访问的等待,但并不代表网站超过这个时间就属于故障;网络位置不同,结果也可能不同。

解析正常后,怎样看访问失败

假设某个域名在办公室打不开,运行工具后出现了 DNS 地址,但 HTTPS 报超时。此时已获得一条明确线索:当前运行环境完成了解析,连接或响应阶段仍未完成。维护人员可以从同一网络再访问一次,并核对服务器监听状态及防火墙记录,而不必立即修改域名解析。若另一网络能够访问,两处网络路径的差异也要保留下来。

输出 301 或 302 时,记录跳转地址,检查它指向的域名是否符合预期;输出 403 表示服务器已返回拒绝响应,不能写成“域名无法解析”。证书校验失败同样发生在解析之后,需核对证书覆盖的域名和有效期。这份脚本请求的是首页,首页正常也不能代替具体业务接口的检查。

代码适合本地排查。若要做成供他人输入域名的在线服务,不能直接把这份源码接到公开接口:请求可能触及内网地址,跳转和 DNS 结果也可能变化。上线前需限制实际连接的目标地址、控制请求次数,并记录异常请求;否则,先将工具留在受控环境中使用。

域名检测工具源码域名解析检测网站连通性检测
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/45146/(转载时请注明本文出处及文章链接)

评论 (0)
3,694 文章数
92 评论量

人生倒计时

今日已经过去小时
这周已经过去天
本月已经过去天
今年已经过去个月