Делаем whois со списком доменных имен
У меня есть файл доменных имен, например, эквивалентный 2500.
Я хотел бы сделать Whois на этих доменных имен.
Проблема в том, что я никогда не делал этого и не знаю, с чего начать. Если у вас есть идеи, я весь слух.
ТИА.
6 ответов
Вы также можете использовать командный инструмент Linux whois
, Следующий код открывает подпроцесс и выполняет поиск домена.
Но вы должны быть осторожны со многими запросами в короткие сроки. Серверы со временем заблокируют вас.;)
import subprocess
def find_whois(domain):
# Linux 'whois' command wrapper
#
# Executes a whois lookup with the linux command whois.
# Returncodes from: https://github.com/rfc1036/whois/blob/master/whois.c
domain = domain.lower().strip()
d = domain.split('.')
if d[0] == 'www': d = d[1:]
# Run command with timeout
proc = subprocess.Popen(['whois', domain], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
ans,err = proc.communicate(input)
if err == 1: raise WhoisError('No Whois Server for this TLD or wrong query syntax')
elif err == 2: raise WhoisError('Whois has timed out after ' + str(whois_timeout) + ' seconds. (try again later or try higher timeout)')
ans = ans.decode('UTF-8')
return ans
with open('domains.txt') as input:
with open('out.txt','a') as output:
for line in input:
output.write(find_whois(line))
with open as
оператор обрабатывает файловый поток. 'A' в выходном файле означает, что файл открывается в режиме добавления.
Похоже, у вас уже есть несколько полезных ответов, но я подумал, что было бы неплохо немного рассказать о трудностях массового (и в целом) поиска WHOIS и предложить некоторые альтернативные решения.
Поиск WHOIS
Поиск одного доменного имени обычно включает в себя поиск соответствующего сервера WHOIS для этого домена и последующий запрос информации через порт 43. Если у вас есть доступ к unix-подобной оболочке (например, Bash), вы можете использовать whois
сделать это легко (как отмечают другие):
$ whois example.com
Очень похожие инструменты WHOIS также стали доступны в виде модулей для широкого спектра языков программирования. Модуль Pywhois для Python является одним из примеров.
В своей простейшей форме массовый поиск WHOIS просто зацикливается на списке доменов, отправляет запрос whois для каждого домена и записывает запись в вывод.
Вот пример в Bash, который читает домены из файла domains.txt
и записывает каждую запись WHOIS в отдельные файлы (если вы используете Windows, попробуйте Cygwin).
#!/bin/bash
domain_list="domains.txt"
while read line
do
name=$line
echo "Looking up ${line}..."
whois $name > ${line}.txt
sleep 1
done < $domain_list
Остерегайтесь следующих сложностей поиска WHOIS оптом:
Некоторые серверы WHOIS могут не предоставлять вам полную запись WHOIS. Это особенно верно для доменов, специфичных для страны (таких как.de и.fr) и доменов, зарегистрированных у определенных регистраторов (таких как GoDaddy).
Если вы хотите максимально полную запись, вам часто приходится заходить на веб-сайт реестра или в стороннюю службу, которая могла кэшировать запись (например, DomainTools). Это гораздо сложнее автоматизировать и, возможно, придется сделать это вручную. Даже в этом случае запись может не содержать того, что вы хотите (например, контактные данные владельца регистрации).
Некоторые серверы WHOIS накладывают ограничения на количество запросов, которые вы можете сделать за определенный период времени. Если вы достигнете предела, вам может потребоваться вернуться через несколько часов, чтобы запросить записи еще раз. Например, для доменов.org вы ограничиваетесь не более чем тремя поисками в минуту, и несколько регистраторов будут блокировать вас на 24 часа.
Лучше всего сделать паузу между поисками на несколько секунд или попытаться перетасовать свой список доменов по домену верхнего уровня, чтобы вы не перебивали один и тот же сервер слишком быстро подряд.
Некоторые WHOIS-серверы часто отключаются, и время ожидания запроса истекает, а это может означать, что вам может потребоваться вернуться и повторить поиск. ICANN предусматривает, что whois-серверы должны иметь довольно приличное время безотказной работы, но я обнаружил один или два сервера, которые ужасно раздают записи.
Разбор записи
Анализ записей WHOIS (например, для контактной информации владельцев регистрации) может быть проблемой, потому что:
Записи не всегда в согласованном формате. Вы найдете это с доменами.com, в частности. Запись.com может храниться у любого из тысяч регистраторов во всем мире (не в реестре.com, Verisign), и не все предпочитают представлять записи в удобном для анализа формате, рекомендованном ICANN.
Опять же, информация, которую вы хотите извлечь, может отсутствовать в записи, которую вы получите от поиска.
Поскольку это уже упоминалось, Pywhois является одним из вариантов для анализа данных WHOIS. Вот очень простой скрипт Python, который ищет запись WHOIS для каждого домена и извлекает имя владельца регистрации (где это возможно *), записывая результаты в файл CSV. Вы также можете включить другие поля, если хотите:
import whois
import csv
with open("domains.txt", "r") as f:
domains = f.readlines()
with open("output_file.csv", "wb") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["Domain", "Registrant Name"])
for domain in domains:
domain = domain.rstrip()
record = whois.whois(domain)
try:
r_name = record.registrant_name
except AttributeError:
r_name = "error"
writer.writerow([domain, r_name])
* Когда я быстро протестировал этот скрипт, pywhois не очень надежно извлекал имя регистранта. Вместо этого можно попробовать еще одну похожую библиотеку: pythonwhois
,
Предполагая, что домены находятся в файле с именем domains.txt
и у тебя есть pywhois
установлен, то что-то вроде этого должно сделать свое дело:
import whois
infile = "domains.txt"
# get domains from file
with open(infile, 'rb') as f:
domains = [line.rstrip() for line in f if line.rstrip()]
for domain in domains:
print domain
record = whois.whois(domain)
# write each whois record to a file {domain}.txt
with open("%s.txt" % domain, 'wb') as f:
f.write(record.text)
Это выведет каждую запись whois в файл с именем {domain}.txt
Без pywhois
:
import subprocess
infile = "domains.txt"
# get domains from file
with open(infile, 'rb') as f:
domains = [line.rstrip() for line in f if line.rstrip()]
for domain in domains:
print domain
record = subprocess.check_output(["whois", domain])
# write each whois record to a file {domain}.txt
with open("%s.txt" % domain, 'wb') as f:
f.write(record)
Загрузите и установите инструмент Whois от Microsoft по адресу http://technet.microsoft.com/en-us/sysinternals/bb897435.aspx
Создайте текстовый файл со списком доменных имен, со строкой заголовка.
name
google.com
yahoo.com
stackru.com
Создайте скрипт powershell:
$domainname = Import-Csv -Path "C:\domains.txt"
foreach($domain in $domainname)
{
.\whois.exe $domain.name Export-Csv -Path "C:\domain-info.csv" -Append
}
Запустите скрипт powershell.
Вы можете сделать это с помощью простой «одной строки» с помощью командыxargs
.
xargs -n 1 -a valid_dns.txt -I {} sh -c 'echo "Domain: {}"; whois {}'
++
С WhoisFreaks у вас есть три варианта получения данных WHOIS:
API поиска WHOIS позволяет запрашивать данные WHOIS для отдельных доменов с помощью одного домена на запрос. Ответ можно получить в формате JSON или XML.
https://api.whoisfreaks.com/v1.0/whois?apiKey=API_KEY&whois=live&domainName=whoisfreaks.com
API массового поиска WHOIS упрощает поиск данных WHOIS, позволяя запрашивать до 100 доменов за один запрос. Вы можете выбрать формат ответа JSON или XML.
https://api.whoisfreaks.com/v1.0/bulkwhois?apiKey=API_KEY
В текст запроса добавьте доменные имена в формате JSON.{ "domainNames":[ "google.com", "abc.com", "google.uk", "google.us" ] }
Веб-интерфейс массовой проверки Whois предлагает удобную функцию уведомлений по электронной почте. После того как вы загрузите обычный текстовый файл или файл CSV, содержащий один домен в строке, он уведомит вас и предоставит выходные файлы в формате CSV. Этот интерфейс поддерживает поиск минимум 101 домена и максимум 3 миллионов доменов.