عكس بحث DNS في بيرل
-
01-07-2019 - |
سؤال
كيف يمكنني إجراء بحث عكسي عن DNS، أي كيف يمكنني تحليل عنوان IP إلى اسم مضيف DNS الخاص به في Perl؟
المحلول
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)'
عائدات: لا يمكن العثور على فاصل السلسلة "'" في أي مكان قبل EOF عند -e السطر 1.
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، ابحث عن أي سجلات PTR على D.C.B.A.in-addr.arpa.بالنسبة لـ IPv6، يمكنك تناول 128 قطعة سداسية وقلبها وإلحاقها بـ 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];