Хотя то, что вы ожидаете, не соответствует полученному вами результату, результат, который вы получаете от стандартного socket.gethostbyaddr()
Python, является правильным. Давайте начнем с того, что посмотрим, что происходит, а затем поработаем, чтобы соответствующим образом согласовать ваши ожидания ...
Утилиты DNS, такие как dig
, станут вашим другом при решении подобных проблем, поэтому я покажу результат dig
пока я работаю над ответом для вас.
Обратный поиск в DNS не обязательно является отношением один к одному, как другие указывали в комментариях выше. Он основан на соглашении, согласно которому (используя приведенный выше адрес IPv4 в качестве примера) вы отправляете DNS-запрос для записи PTR
для обратного IP-адреса с суффиксом .in-addr.arpa
; в вашем случае это 46.207.58.216.in-addr.arpa
:
▶ dig 46.207.58.216.in-addr.arpa in ptr
; <<>> DiG 9.10.6 <<>> 46.207.58.216.in-addr.arpa in ptr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23082
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;46.207.58.216.in-addr.arpa. IN PTR
;; ANSWER SECTION:
46.207.58.216.in-addr.arpa. 77579 IN PTR fra16s24-in-f14.1e100.net.
;; Query time: 85 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Thu May 28 13:17:17 PDT 2020
;; MSG SIZE rcvd: 83
Ответ DNS здесь представляет собой запись PTR для fra16s24-in-f14.1e100.net
, которая полностью соответствует тому, что вы видите, когда используете Python socket.gethostbyaddr()
.
Хотя это может быть правдой, что вы связываете этот хост с чем-то связанным с google.com
концептуально, он может не быть привязан к чему-либо, относящемуся к домену верхнего уровня google.com
, что касается DNS. .
Изменить (на основе вашего обновления):
Очевидно, когда я конвертирую 3.126. ***. 192, я хочу видеть реальное имя хоста, а не ec2-3 -126 - *** - 192.eu-central-1.compute.amazon aws .com.
В примере, который вы здесь приводите, вы должны понимать, что ec2-3-126-***-192.eu-central-1.compute.amazonaws.com
- это фактическое имя хоста. Взгляните на приведенную выше статью об обратном поиске DNS, а также ознакомьтесь с руководством о том, как работает DNS. Следует повторить, что много адресных записей может существовать для одного имени (и часто это имеет место для ресурсов с балансировкой нагрузки).
Вот пример этого для stackoverflow.com
:
▶ dig stackoverflow.com in a
; <<>> DiG 9.10.6 <<>> stackoverflow.com in a
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51644
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;stackoverflow.com. IN A
;; ANSWER SECTION:
stackoverflow.com. 106 IN A 151.101.193.69
stackoverflow.com. 106 IN A 151.101.129.69
stackoverflow.com. 106 IN A 151.101.1.69
stackoverflow.com. 106 IN A 151.101.65.69
;; Query time: 81 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Thu May 28 13:25:55 PDT 2020
;; MSG SIZE rcvd: 99
Должны ли все эти IP-адреса иметь записи PTR, указывающие на stackoverflow.com
? Нет, не обязательно ... Давайте посмотрим на один пример:
▶ dig 69.193.101.151.in-addr.arpa in ptr
; <<>> DiG 9.10.6 <<>> 69.193.101.151.in-addr.arpa in ptr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 418
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;69.193.101.151.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
151.in-addr.arpa. 3125 IN SOA pri.authdns.ripe.net. dns.ripe.net. 1586415572 3600 600 864000 3600
;; Query time: 79 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Thu May 28 13:28:03 PDT 2020
;; MSG SIZE rcvd: 116
В этом случае есть no PTR-записи, когда вы выполняете обратный поиск DNS по этому IP-адресу . Итак, как Python s gethostbyaddr
обработает этот случай?
>>> socket.gethostbyaddr('151.101.193.69')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
socket.herror: [Errno 1] Unknown host
В этом случае возникает исключение. Если в ответе DNS нет записи PTR для обратного просмотра, Python не может предложить никакой дополнительной полезной информации.
Если этот ответ недостаточно ясен, напишите в комментарии, и я буду исправлять этот ответ, пока все не будет ясно.