什么是反向DNS命令行实用程序?


Answers:


56

挖掘托管应该是您想要的;)

http://www.unix.com/unix-dummies-questions-answers/9866-nslookup-linux.html

在* nix系统上,您可以执行以下命令: dig -x [address]

或者,您可以+shortdig命令末尾添加仅输出dns结果。

在Windows上,使用nslookup

编辑:nslookup也可以在* nix系统上工作。关于nslookup命令的更多信息,是否一段时间以来似乎已被替换:http : //linuxreviews.org/man/nslookup/


drillldns 的实用程序也可以使用相同的语法,即drill -x 123.123.123.123
Tullo_x86

52

在* nix上,您可以使用:

dig -x [address]

16
这绝对是最简单的方法。最后加上+ short,除了rdns结果外,什么都不会返回。dig -x [address] +short
ColinM 2012年

3
那个+short标志真的有用!
尼尔

这对IPv6地址有效吗?
Geremia'9

@ColinM好点。我已经基于此编辑了答案。谢谢!
Marc-Andre R.

是的,@ Geremia,根据所述man digaddr是点分十进制表示形式的IPv4地址或冒号分隔的IPv6地址。
里卡多'18

8

我知道您可以在大多数Linux系统上使用:

 nslookup <ip-number EX: 127.0.0.1>

将在命令行上工作。

想一想,nslookup在Windows XP上不可用吗?


确实是的。在Windows的早期版本中。
kubanczyk,2009年

4

这个问题已经有百万个答案,但我要再添加一个。这是我编写的一个小功能,用于通过挖掘轻松进行反向DNS。将此添加到~/.bashrc文件中,重新加载外壳程序,然后可以使用以下命令进行反向DNS查找revdns 1.2.3.4

function revdns() {
    octets=""
    addr="in-addr.arpa"

    # split the IP address into an array of octets
    IFS="." read -r -a octets <<< "$1"

    # add each octet to our $addr string in reverse order
    for octet in "${octets[@]}"; do
         addr=$octet"."$addr
    done

    # run a DNS pointer lookup with dig
    # `+short` makes dig's output very terse (un-verbose)
    # `"${@:2}"` passes any extra params from this command to dig
    dig ptr +short $addr "${@:2}"
}

反向DNS查找通过检查指针(PTR)记录来完成。如果要对“ 1.2.3.4”进行反向DNS,则必须查找“ 4.3.2.1.in-addr.arpa”的指针记录。我的函数获取一个IP地址,反转八位字节的顺序(即,将其从1.2.3.4更改为4.3.2.1),然后用于dig执行我刚刚描述的PTR查找。

当然,您可以使用nslookup 1.2.3.4它,但是我更喜欢这种基于dig的解决方案,因为它使用操作系统的DNS服务器而不是nslookup提供的服务器(如果需要,您可以添加其他dig标志)当您致电时revdns,他们会被传递给dig)


根据其帮助,dig -x dot-notation是“反向查找的快捷方式”。我想知道长版本会是什么。感谢您的解释!:)
webwurst

from man dig使用-x时,无需提供名称,类和类型参数。dig自动为94.2.0.192.in-addr.arpa之类的名称执行查找,并将查询类型和类分别设置为PTR和IN。
里卡多

3

我很清楚dig / host / nslookup是用于这些工具的标准工具,但我一直使用它们来测试操作系统的分辨率(本质上是为了测试nsswitch.conf是否正常工作):

gethostbyname:

#!/usr/bin/perl

use Socket;

my @t = gethostbyname($ARGV[0]);
print "\$name     = $t[0]\n"; shift(@t);
print "\$aliases  = $t[0]\n"; shift(@t);
print "\$addrtype = $t[0]\n"; shift(@t);
print "\$length   = $t[0]\n"; shift(@t);

foreach (@t) {
  print "          = ", inet_ntoa($_), "\n";
}

gethostbyaddr:

#!/usr/bin/perl

use Socket;

my @t = gethostbyaddr(inet_aton($ARGV[0]), AF_INET);
print "\$name     = $t[0]\n"; shift(@t);
print "\$aliases  = $t[0]\n"; shift(@t);
print "\$addrtype = $t[0]\n"; shift(@t);
print "\$length   = $t[0]\n"; shift(@t);

foreach (@t) {
  print "          = ", inet_ntoa($_), "\n";
}

例:

g3 0 /home/jj33/swap > gethostbyname www.google.com
$name     = www.l.google.com
$aliases  = www.google.com
$addrtype = 2
$length   = 4
          = 72.14.205.147
          = 72.14.205.103
          = 72.14.205.104
          = 72.14.205.99
g3 0 /home/jj33/swap > gethostbyaddr 72.14.205.147 
$name     = qb-in-f147.google.com
$aliases  = 
$addrtype = 2
$length   = 4
          = 72.14.205.147

4
您可以执行“获取主机[IP或HOSTNAME]”
hayalci,2009年

嗯...我最初编写这些工具只是为了与这些功能一起使用,因此在这里没有损失,但是如果我知道getent工具,我当然不会将它们粘贴到serverfault中。感谢您的指导。
jj33 2009年

-1:它们仅限于IPv4,当存在时,gethostbyname不会检索IPv6地址,并且gethostbyaddr不接受IPv6地址。
bortzmeyer

这些功能已过时多年。在撰写本文时,他们甚至已经过时了。在perl和大多数其他语言中,应该使用getaddrinfo和getnameinfo。
迈克尔·汉普顿

3

在Windows上,我养成了以下习惯:

ping -a <ip address>

因为这还将反映来自hosts文件和WINS等的数据。


2

尝试“主机”

  • 向前查询host

    $ host google-public-dns-b.google.com.
    google-public-dns-b.google.com has address 8.8.4.4
    google-public-dns-b.google.com has IPv6 address 2001:4860:4860::8844
    
  • 反向查询host

    $ host 8.8.4.4
    4.4.8.8.in-addr.arpa domain name pointer google-public-dns-b.google.com.
    

类似于挖

  • 向前查询dig

    $ dig google-public-dns-b.google.com. +short
    8.8.4.4
    
  • 反向查询dig

    $ dig -x 8.8.4.4 +short
    google-public-dns-b.google.com.
    

1

如果您使用的是nslookup,就是这个(假设192.168.0.1作为有问题的IP)

> set type=ptr
> 1.0.168.192.in-addr.arpa

编辑: 请记住,仅当为IP创建了PTR记录时,反向查找才有效,并且不能保证返回您要查找的主机名。完全取决于您所处环境中DNS的配置和维护方式。


5
nsloookup不再被维护,其作者推荐dig。此外,dig -x比自己反转字节要简单得多。
2009年

很高兴知道,非常感谢您的投入!旧习惯很难
改掉

1

电源外壳:

[net.dns]::gethostentry("69.59.196.212").HostName

0

好吧,一个友好的人刚刚写了nslookup是命令,他是对的。它在Unix和Windows上均可使用。不知道为什么删除答案,但是您是正确的先生。


错误,也许不是。
彼得·特纳

是的,我确实发了一些快,检查后我不确定所有答案,我只是放回我的帖子并对其进行编辑以添加更多详细信息;)
Marc-Andre R.

好的,是的,但是我不接受那个答案。太糟糕了,我们在这里无法获得实时的Googley AJAX。
彼得·特纳

大声笑是的,我们不能拥有一切;)祝您有美好的一天,希望对您有所帮助;)
Marc-Andre R.

0

我更喜欢Windows的命令行挖掘(可在此处找到:http : //members.shaw.ca/nicholas.fong/dig/)而不是nslookup。

如果必须从Windows工作站测试/管理DNS,请抓住此工具。然后:

C:\dig>dig -x <IP Address>

...此外,请记住将c:\ dig添加到您的路径中!


0

她是我进行更完整的DNS反向查找的依据。希望这对将来该页面的读者有用。

for ip in {1..254..1}; do dig -x 1.1.1.$ip | grep $ip >> dns.txt; done;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.