【问题标题】:Why can't I establish a tcp connection, via sockets in python, with a root name server?为什么我不能通过 python 中的套接字与根名称服务器建立 tcp 连接?
【发布时间】:2022-11-19 06:58:34
【问题描述】:
背景:我想与根名称服务器建立 TCP 连接,以便我可以发送 dns 查询并检查响应
我尝试使用 python 中的 socket 模块与根名称服务器建立 TCP 连接,尤其是 a.root-servers.net
我在 Windows 11 的交互式 python shell 中编写了下面的代码。
我跑了:
import socket
a = socket.socket()
a.connect(("a.root-servers.net", 53))
但我得到错误:
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
为什么会这样?
【问题讨论】:
标签:
python
windows
sockets
tcp
dns
【解决方案1】:
我从中获得了良好的虚电路 (TCP) 结果:
$ time dig +vc +norec ns . @a.root-servers.net
; <<>> DiG 9.10.6 <<>> +vc +norec ns . @a.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60546
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
...
;; Query time: 13 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Fri Nov 18 14:38:22 PST 2022
;; MSG SIZE rcvd: 828
real 0m0.056s
来自客户端的端到端路径
根服务器与我的不同。
不像我的,它有一个或多个过滤
丢弃端口 53 的路由器(防火墙)
TCP数据包。
这样做违反了第 6.1.3.2 节
来自rfc 1123 host requirements。
必须允许 TCP 域
请求通过,作为一些 DNS 答案
不适合有限的尺寸
UDP 数据报。
建议你问问你当地的防火墙
管理员修复其配置,或寻求
备用互联网连接解决方案。