문제

역방향 DNS 조회를 어떻게 수행합니까? 즉 Perl에서 IP 주소를 DNS 호스트 이름으로 확인하는 방법입니까?

도움이 되었습니까?

해결책

gethostbyaddr 및 유사한 호출.보다 http://perldoc.perl.org/functions/gethostbyaddr.html

다른 팁

더 자세한 DNS 정보가 필요한 경우 다음을 사용하세요. 네트워크::DNS 모듈의 예는 다음과 같습니다.

use Net::DNS;
my $res = Net::DNS::Resolver->new;

# create the reverse lookup DNS name (note that the octets in the IP address need to be reversed).
my $IP = "209.85.173.103";
my $target_IP = join('.', reverse split(/\./, $IP)).".in-addr.arpa";

my $query = $res->query("$target_IP", "PTR");

if ($query) {
  foreach my $rr ($query->answer) {
    next unless $rr->type eq "PTR";
    print $rr->rdatastr, "\n";
  }
} else {
  warn "query failed: ", $res->errorstring, "\n";
}

원본 소스 EliteHackers.info, 자세한 내용도 나와 있습니다.

use Socket;
$iaddr = inet_aton("127.0.0.1"); # or whatever address
$name  = gethostbyaddr($iaddr, AF_INET);
perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("69.89.27.250"), AF_INET)'

보고: -e 라인 1에서 EOF 앞의 문자열 종결자 "'"를 찾을 수 없습니다.

perl -MSocket -E "say scalar gethostbyaddr(inet_aton(\"69.89.27.250\"), AF_INET)"

보고: box250.bluehost.com

큰따옴표를 사용하도록 줄을 변경한 다음 IP 주소 주위의 따옴표를 이스케이프 처리해야 합니다.

짧막 한 농담:

perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("79.81.152.79"), AF_INET)'

더 쉬운 방법이 있을 수 있지만 IPv4의 경우 일반적인 DNS 조회를 수행할 수 있다면 언제든지 역방향 쿼리를 직접 구성할 수 있습니다.IPv4 주소 A.B.C.D의 경우 D.C.B.A.in-addr.arpa에서 PTR 레코드를 검색합니다.IPv6의 경우 128개의 16진수 니블을 가져와서 뒤집어서 ipv6.arpa를 추가합니다.그리고 똑같은 일을 하세요.

gethostbyaddr이 귀하의 요구 사항에 맞지 않는 경우, 네트워크::DNS 더 유연합니다.

이것은 유용할 수도 있습니다...

$ip = "XXX.XXX.XXX.XXX" # IPV4 address.
my @numbers = split (/\./, $ip);
if (scalar(@numbers) != 4)
{
    print "$ip is not a valid IP address.\n";
    next;
}
my $ip_addr = pack("C4", @numbers);
# First element of the array returned by gethostbyaddr is host name.
my ($name) = (gethostbyaddr($ip_addr, 2))[0];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top