Мой журнал маршрутизатора отмечает активность по IP-адресу, но вместо этого я хочу увидеть соответствующие URL-адреса. Есть ли способ получить URL-адреса из IP-адресов - в пакетном режиме / пакетно - без необходимости делать это вручную / индивидуально по одной строке за раз?
2 ответа
Если у вас есть список, вы можете сделать это довольно легко на любой ОС, используя встроенный в Python модуль socket
.
import socket
socket.gethostbyaddr('198.252.206.16')
Это возвращает:
('stackoverflow.com', ['16.206.252.198.in-addr.arpa'], ['198.252.206.16'])
Итак, создайте скрипт, который совсем не будет сложным, просто укажите в файле ip на строку и сделайте что-то вроде:
import socket
fi = open('iplist.txt')
for line in fi.readlines():
print( socket.gethostbyaddr( line )[0] )
fi.close()
Конечно, вы можете настроить вывод так, чтобы записать IP и доменное имя в другой файл, если хотите.
Однако, как указывает @ScottChamberlain, это может не всегда разрешаться для сайтов, имеющих общий IP-адрес (включая субдомены и тому подобное).
Предположим, у вас есть текстовый файл ips.txt
со списком IP-адресов:
$ cat ips.txt | xargs host
Или вы можете написать элегантный скрипт bash для форматирования результатов:
for ip in $(cat ips.txt); do
domain_names=$(host $ip | grep "domain name" | awk '{print $5}' | tr ".\\n" " ")
# test first char of domain names
if [ -n ${domain_names:0:1} ]; then
echo "$ip $domain_names"
else
echo "$ip not found"
fi
done