我需要检查 PTR 记录以确保我的脚本发送的电子邮件确实会被我的用户收到,而不会被错误地标记为垃圾邮件。
我知道拥有 IP 范围的 ISP 必须设置 PTR 记录,但是我如何检查它是否已设置?
答案1
如果你有Unix 或 Linux,您可以在命令提示符下输入以下命令来执行此操作:
dig -x xx.yy.zz.aa
您将得到一个答案,其中包含您的权限 aa.zz.yy.xx.in-addr.arpa 和解析该地址的服务器。
在视窗你可以做nslookup xx.yy.zz.aa
。
您还可以查看在线的在www.intodns.com并输入您的域名...检查反向区域查找的结果将会出错。
xx.yy.zz.aa = 您尝试解析的 IP 地址
更新:
使用 dig、nslookup 或 host 时,经常会使用你无法控制的 DNS 服务器(如 Google(8.8.8.8)),这样你就可以从第三方确认一切是否正确。–佐尔达什
佐尔达什 说得很有道理。以下是用于测试/解析外部/外部 DNS 服务器的命令:
Dig(在 Google 的 DNS 服务器 8.8.8.8 上测试反向 DNS):
dig -x zz.yy.xx.aa @8.8.8.8
主机和 Nslookup(在 Google 的 DNS 服务器 8.8.8.8 上测试反向 DNS)
nslookup zz.yy.xx.aa 8.8.8.8
host zz.yy.xx.aa 8.8.8.8
答案2
我知道这个问题已被标记为已回答,但我想提供更全面的答案。对于我的示例,我将使用:
- google.com的 IP 地址172.217.3.206因为它做有 PTR 记录。
- 服务器故障的 IP 地址151.101.1.69因为它才不是有 PTR 记录。
首先要注意的是,这dig
是一个多平台命令,你可以在 Windows 上获取它ISC BIND 网站在 BIND 下列出,然后选择您的 Windows 平台(32 位或 64 位)。它有许多其他工具,包括它自己的 nslookup 二进制文件。我不使用那个 nslookup.exe 版本,而是使用 Windows 附带的默认版本(C:\Windows\System32\nslookup.exe)。但是,如果您想使用,dig
您可能需要编辑本地 PATH 环境变量,或将该工具移动dig
到您的 C:\Windows\System32 文件夹。
命令 1) dig PTR 206.3.217.172.in-addr.arpa
- 传统上,这是用户执行反向 DNS 查找的方式。他们会手动将 IP 地址转置172.217.3.206
为:(206.3.217.172
注意四个八位字节的顺序)并添加in-addr.arpa
到字符串的末尾。以下是输出:
; <<>> DiG 9.9.5 <<>> PTR 206.3.217.172.in-addr.arpa
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39790
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;206.3.217.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
206.3.217.172.in-addr.arpa. 84300 IN PTR sea15s12-in-f206.1e100.net.
206.3.217.172.in-addr.arpa. 84300 IN PTR sea15s12-in-f14.1e100.net.
206.3.217.172.in-addr.arpa. 84300 IN PTR sea15s12-in-f14.1e100.net.
206.3.217.172.in-addr.arpa. 84300 IN PTR sea15s12-in-f206.1e100.net.
;; Query time: 23 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Mar 26 04:20:28 Pacific Daylight Time 2017
;; MSG SIZE rcvd: 153
命令 2) dig -x 172.217.3.206
- 此版本的命令简单得多,如 中所述dig -h
,-x
标志是“反向查找的快捷方式”。输出与上一个命令中显示的输出相同。
命令 3) dig -x 151.101.1.69
- 此示例使用 serverfault.com 示例显示了未找到 PTR 记录时的情况。如您所见,答案未列出 PTR,只能找到 SOA 记录151.in-addr.arpa
:
; <<>> DiG 9.9.5 <<>> -x 151.101.1.69
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 21854
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;69.1.101.151.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
151.in-addr.arpa. 1786 IN SOA pri.authdns.ripe.net. dns.ripe.net. 1490512027 3600 600 864000 3600
;; Query time: 23 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Mar 26 04:30:38 Pacific Daylight Time 2017
;; MSG SIZE rcvd: 114
命令 4) nslookup 172.217.3.174
- 这是用户建议的命令l0c0b0x在这个线程的主要答案中。虽然确实有结果,但不清楚这是 PTR 记录还是其他类型的记录。我认为如果给定 IP,它默认会返回 PTR,但我仍然想确定一下。如果有多个 PTR,它还会省略其他记录:
Server: google-public-dns-a.google.com
Address: 8.8.8.8
Name: sea15s11-in-f14.1e100.net
Address: 172.217.3.174
命令 5) nslookup -debug 172.217.3.174
- 使用此命令查看完整列表,包括记录类型和完整结果列表。标志-debug
仍然存在,要关闭它,您必须使用-nodebug
:
------------
Got answer:
HEADER:
opcode = QUERY, id = 1, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 0, additional = 0
QUESTIONS:
8.8.8.8.in-addr.arpa, type = PTR, class = IN
ANSWERS:
-> 8.8.8.8.in-addr.arpa
name = google-public-dns-a.google.com
ttl = 86141 (23 hours 55 mins 41 secs)
------------
Server: google-public-dns-a.google.com
Address: 8.8.8.8
------------
Got answer:
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 4, authority records = 0, additional = 0
QUESTIONS:
174.3.217.172.in-addr.arpa, type = PTR, class = IN
ANSWERS:
-> 174.3.217.172.in-addr.arpa
name = sea15s11-in-f14.1e100.net
ttl = 83026 (23 hours 3 mins 46 secs)
-> 174.3.217.172.in-addr.arpa
name = sea15s11-in-f174.1e100.net
ttl = 83026 (23 hours 3 mins 46 secs)
-> 174.3.217.172.in-addr.arpa
name = sea15s11-in-f14.1e100.net
ttl = 83026 (23 hours 3 mins 46 secs)
-> 174.3.217.172.in-addr.arpa
name = sea15s11-in-f174.1e100.net
ttl = 83026 (23 hours 3 mins 46 secs)
------------
Name: sea15s11-in-f14.1e100.net
Address: 172.217.3.174
命令 6) nslookup -type=PTR 172.217.3.174
- 此版本的命令使用标志指定 PTR 记录-type
。它与没有标志的版本有-type
两点不同。第一,它列出了所有 PTR 答案。第二,它包括其他命令忽略的“非权威答案”信息。如果您仔细查看上面的调试输出,状态为authority records
0,因此这两个命令都应显示“非权威答案”。
Server: google-public-dns-a.google.com
Address: 8.8.8.8
Non-authoritative answer:
174.3.217.172.in-addr.arpa name = sea15s11-in-f14.1e100.net
174.3.217.172.in-addr.arpa name = sea15s11-in-f14.1e100.net
174.3.217.172.in-addr.arpa name = sea15s11-in-f174.1e100.net
174.3.217.172.in-addr.arpa name = sea15s11-in-f174.1e100.net
命令 7) nslookup -debug -d2 -type=PTR 151.101.1.69
- 以下是如何获取有关完整反向查找请求的尽可能详细的信息。提醒:要关闭它,请使用-nodebug
和-nod2
。此示例故意在 serverfault.com 示例中失败:
------------
SendRequest(), len 38
HEADER:
opcode = QUERY, id = 1, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
8.8.8.8.in-addr.arpa, type = PTR, class = IN
------------
------------
Got answer (82 bytes):
HEADER:
opcode = QUERY, id = 1, rcode = NOERROR
header flags: response, want recursion, recursion avail.
questions = 1, answers = 1, authority records = 0, additional = 0
QUESTIONS:
8.8.8.8.in-addr.arpa, type = PTR, class = IN
ANSWERS:
-> 8.8.8.8.in-addr.arpa
type = PTR, class = IN, dlen = 32
name = google-public-dns-a.google.com
ttl = 86280 (23 hours 58 mins)
------------
Server: google-public-dns-a.google.com
Address: 8.8.8.8
------------
SendRequest(), len 43
HEADER:
opcode = QUERY, id = 2, rcode = NOERROR
header flags: query, want recursion
questions = 1, answers = 0, authority records = 0, additional = 0
QUESTIONS:
69.1.101.151.in-addr.arpa, type = PTR, class = IN
------------
------------
Got answer (103 bytes):
HEADER:
opcode = QUERY, id = 2, rcode = NXDOMAIN
header flags: response, want recursion, recursion avail.
questions = 1, answers = 0, authority records = 1, additional = 0
QUESTIONS:
69.1.101.151.in-addr.arpa, type = PTR, class = IN
AUTHORITY RECORDS:
-> 151.in-addr.arpa
type = SOA, class = IN, dlen = 48
ttl = 1787 (29 mins 47 secs)
primary name server = pri.authdns.ripe.net
responsible mail addr = dns.ripe.net
serial = 1490512027
refresh = 3600 (1 hour)
retry = 600 (10 mins)
expire = 864000 (10 days)
default TTL = 3600 (1 hour)
------------
*** google-public-dns-a.google.com can't find 69.1.101.151.in-addr.arpa.: Non-ex
istent domain
命令 8) nslookup 174.3.217.172.in-addr.arpa
- 您可能想知道是否可以使用传统的反向 DNS 查找方法,nslookup
就像我们在命令 1 中所做的那样dig
。您可以。请注意,此命令与下面设置标志的命令(命令 9)之间存在与我上面列出的相同的 nslookup 失败(命令 6)-type=PTR
:
Server: google-public-dns-a.google.com
Address: 8.8.8.8
Name: 174.3.217.172.in-addr.arpa
命令 9) nslookup -type=PTR 174.3.217.172.in-addr.arpa
- 正如您所料,它看起来与命令 6 相同。
Server: google-public-dns-a.google.com
Address: 8.8.8.8
Non-authoritative answer:
174.3.217.172.in-addr.arpa name = sea15s11-in-f14.1e100.net
174.3.217.172.in-addr.arpa name = sea15s11-in-f14.1e100.net
174.3.217.172.in-addr.arpa name = sea15s11-in-f174.1e100.net
174.3.217.172.in-addr.arpa name = sea15s11-in-f174.1e100.net
答案3
这与执行任何类型的 DNS 查找相同。
从 Windows 命令提示符:nslookup.exe <ip address>
从 Linux 命令行:host <ip address>
注意:最好从网络外的计算机运行这些命令,以便访问公共 DNS 服务器。或者,nslookup 和 host 都提供了指定要使用的 DNS 服务器的方法。
答案4
介绍:
(2) 个示例,一个用于 IPv4,另一个用于 IPv6。IPv6
PTR 查找过程花了我很长时间才找到答案...
IPv4:
我们将使用 Google 的 IP 作为 IPv4 示例:
host -t PTR 209.85.218.49
返回反向映射:
49.218.85.209.in-addr.arpa domain name pointer mail-ej1-f49.google.com.
IPv6:
步骤1:获取主机(通常是邮件服务器)的 IPv6 地址:
host -t AAAA mail.yourServer.net
这将返回下一步 PTR 查找所需的 IPv6 地址:
mail.yourServer.net has IPv6 address 2001:340:1c1e:14::2
第2步:现在向命令提供 IPv6 地址host
:
host -t PTR 2001:340:1c1e:14::2
返回 IPv6 PTR 记录:
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.1.0.0.e.1.c.1.0.4.3.0.1.0.0.2.ip6.arpa domain name pointer mail.yourServer.net.
笔记:该 IPv6 地址已匿名化。
由于飓风电气给了我免费 IPv6 块,我直接在他们的DNS 控制面板用于邮件服务器。
反向 IPv6 生成器:
显然,上面的 IPv6 PTR 记录有点疯狂和懒惰,我只是使用反向 IPv6 生成器为我的邮件服务器创建它。还有其他的,但我使用以下内容来得出反向 IPv6 的正确值: