У меня есть однострочная команда, которая перечисляет 10 самых активных IP-адресов из журнала доступа к веб-серверу:
cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -n10
Примерный набор результатов (всего 3 записи для простоты):
20 12.34.56.7
22 3.67.89.201
29 9.0.203.255
Как вы можете видеть, счетчик предшествует IP-адресу, причем два разделяются пробелом. На самом деле перед счетом тоже есть пробелы, но я не могу их здесь показать.
Мне нравится делать обратный DNS-поиск IP-адресов, чтобы он выглядел так:
20 12.34.56.7 (d12-34-56-7.abhsia.telus.net)
22 3.67.89.201 (customer.vpls.net)
29 9.0.203.255 (9-0-203-255.hlrn.qwest.net)
Как я могу сделать это, не прибегая к сценарию (то есть придерживаясь однострочной команды)? Любой совет высоко ценится.
источник
while
как ввод разделяется на основе пробелов, так что вы можете читать счетчик и IP-адрес отдельно. Смотрите мое обновление. Вы можете поиграть сdig
параметрами, чтобы изменить вывод - я не использовал его на самом деле.cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | sed "s/^[ \t]*//" | tail -n10 | while read count ip ; do echo "$count " "$ip" "( $(dig +noall +answer -x $ip | awk '{ print $(NF) }') )"; done
ценим вашу помощь!for i in `cat input.txt` ; do dig +noall +answer -x $i ; done >> output.txt
cat file | xargs -n1 dig +noall +answer -x