Итак! У меня есть сканирование nmap, которое сохраняет вывод в файл,nmapscan.txt:
sudo nmap -sP 192.168.1* > nmapscan.txt
У меня также есть несколько других команд для очистки и сохранения всех желаемых выходных данных в один файл,livehosts.txt:
cat ./temp/nmapscan.txt | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' > ./temp/macaddresses.txt
Который сохраняет mac-адреса. И:
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' ./temp/nmapscan.txt > ./temp/ipaddresses.txt
Который сохраняет IP-адреса. И:
cat ./temp/nmapscan.txt | grep -o -P '(?<=for).*(?=.attlocal)' > ./temp/hostnames1.txt
Который сохраняет имена хостов. И:
cut -d' ' -f 2 ./temp/hostnames1.txt > ./temp/hostnames2.txt
Что я и сделал, чтобы очистить имена хостов (извините, забыл включить это в исходный пост)... И:
cut -d' ' -f 1 ./temp/hostnames2.txt | paste ./temp/macaddresses.txt ./temp/ipaddresses.txt - > ./temp/livehosts.txt
.. который является конечным продуктом, объединяющим желаемые данные и отображающим следующее:
xx:xx:xx:xx:xx:xx 192.168.1.1 Netgear
xx:xx:xx:xx:xx:xx 192.168.1.111 John's Toilet Cam
Я хочу сделать сканирование и написать снова, и хочу, чтобыlivehosts.txtфайл будет более или менее обновлен. Простое выполнение сканирования и повторной записи, как есть, записывает поверх файла. И не все устройства подключены в разное время.
Я пробовал:
>>
Но это просто удваивает объем данных, уже имеющихся в файле.
Будет ли лучшим способом сделать это: удвоить данные, удалить повторяющиеся данные и затем записать их в новый файл?
Как бы вы это сделали? Спасибо!
решение1
Слишком много ненужных манипуляций.
Прежде всего, используйте -oG
опцию (grepable format). Это облегчит вам работу. Источник:Справочное руководство Nmap - Вывод. И нет необходимости делать перенаправление файла ( > nmapscan.txt
), так как nmap уже имеет -oN
опцию. Вы можете записывать в файл, но все равно иметь вывод на консоль.
Я не уверен, что ваша целевая спецификация вообще законна:
nmap -sP 192.168.1*
Возможно, nmap
мне удалось правильно его интерпретировать, но насколько мне известно, это неверный синтаксис.
Вместо этого используйте 192.168.1.0/24
или 192.168.1.1-255
(предполагая, что вы хотите просканировать небольшую сеть с адресами от 192.168.1.0 до 192.168.1.255.