Я посмотрел на SO и нашел этот ответ
Предоставленное решение является хорошей отправной точкой. На основании вышеуказанных требований решение может быть изменено в соответствии с описанным выше вариантом использования.
Если вы используете nslookup google.com
в своей консоли в Windows, вы найдете аналогичный вывод:
Non-authoritative answer:
Server: UnKnown
Address: 192.168.0.1
Name: facebook.com
Addresses: 2a03:2880:f12f:183:face:b00c:0:25de
31.13.79.35
Следуя ссылочному решению, эти две строки являются сердцевиной нашего решения:
process = subprocess.Popen(["nslookup", url], stdout=subprocess.PIPE)
output = str(process.communicate()[0]).split('\\r\\n')
Если вы напечатаете вывод в консоли, вы получите результат, аналогичный этому:
["b'Server: UnKnown", 'Address: 192.168.0.1', '', 'Name: facebook.com', 'Addresses: 2a03:2880:f12f:183:face:b00c:0:25de', '\\t 31.13.79.35', '', "'"]
Этого списка достаточно для описанного выше варианта использования. Следующее, что нужно сделать, это найти надежный способ всегда получать 6th element
, который равен "\\t 31.13.79.35"
.
Чтобы упростить задачу, я использовал нарезку индекса, чтобы получить 6th element
с помощью output[5]
.
Я тестировал этот код около 10-15 раз, используя разные URL-адреса, и получил аналогичные результаты. Лучшим способом было бы каким-то образом определить адрес, перебирая элементы списка в выводе.
Опять же, для приведенного выше варианта использования использование output[5]
работает достаточно хорошо. Если кто-то может предложить более надежный способ определения IP-адреса в списке, сделайте это.
get_ip_address.py
import subprocess
def get_ip_address(url):
process = subprocess.Popen(
["nslookup", url], stdout=subprocess.PIPE)
output = str(process.communicate()[0]).split('\\r\\n')
address = output[5].replace('\\t ', '')
return address
print(get_ip_address('google.com'))
person
SowingFiber
schedule
02.10.2019
dnspython
. Вот почему в отношении того, как некоторые функции и команды обеспечивают вывод, произошли некоторые изменения. вам следует перестать пытаться анализировать внешние команды, которые никогда не ожидаются, и использовать соответствующие функции для получения нужного вам результата. - person Patrick Mevzek   schedule 03.10.2019