Я пытаюсь использовать nmap для проверки связи со списком доменов, я использую:
nmap -sP -iL /path/to/file/domains
Пинг работает нормально, но в выводе для доменов, для которых пинг прошел успешно, я получаю IP-адрес домена следующим образом:
Host 66.249.92.104 is up (0.55s latency).
Есть ли способ получить вывод в виде доменов вместо IPS?
Предполагая, что вы не очищали вывод (т.е. 66.249.92.104 действительно является одним из проверяемых хостов), проблема в том, что в DNS нет записи PTR для IP. То есть нет никакого обратного сопоставления IP -> FQDN, которое Nmap может представить в выходных данных.
Например, вот что вы получаете, когда существует запись PTR:
$ nmap -sP www.yahoo.com | grep ^Host
Warning: Hostname www.yahoo.com resolves to 2 IPs. Using 72.30.2.43.
Host ir1.fp.vip.sk1.yahoo.com (72.30.2.43) appears to be up.
Я бы порекомендовал такой двухэтапный процесс (хотя он не так эффективен, поскольку вы запускаете новый процесс nmap для каждого зонда, вы сохраняете свою информацию вместе):
$ cat domains
www.yahoo.com
www.google.com
$ cat nmap-keep-names.sh
#!/bin/sh
for domain in `cat $1`
do
echo Probing $domain
nmap -sP $domain 2> /dev/null \
| grep ^Host
done \
| sed '$!N;s/\n/ /' \
| sed 's/Probing //' \
| sed 's/Host.*(\(.*\)) \(.*\)/(\1) \2/'
$ ./nmap-keep-names.sh domains
www.yahoo.com (72.30.2.43) appears to be up.
www.google.com (66.102.7.104) appears to be up.
Перед запуском Nmap вы просто распечатываете примечание с подробным описанием того, какое имя хоста вы исследуете. Затем вы можете отформатировать вывод, чтобы использовать информацию, которую вы передали в Nmap.
Примечание №1 - 1e100.net - это домен, принадлежащий Google. Так что даже когда запись PTR существует, нет гарантии, что вы этого ожидаете.)
Примечание №2 - в конце я выполнил команду sed, чтобы очистить вывод. В этом нет необходимости, и вывод можно полностью использовать без этого.
Использование -R включает обратное разрешение имен.
добавьте параметр -oG ("greppable output").