If a C programmer asks "do you want to see something cool?", run away.
--John Van Enk

Friday, October 10, 2008

Gordon “Fyodor” Lyon "Nmap Network Scanning" book Free beta release

Если вдруг кто еще не знает, то Фёдор (хоть убейте но единственные ассоциации которые у меня вызывает это имя - это "Дядя", "Матроскин" и "Простоквашино " =) ) выложил уже довольно давно в онлайн доступ pre-release бета версию своей книги "Nmap Network Scanning", официальный запуск которой планируется в этом месяце. Онлайн версия не полная, однако тот обьем материала, который доступен уже превышает все то, что было опубликовано прежде (не, ну может конечно я и перегнул, но все же ...). Онлайн версия это кончено хорошо, но интернет не всегда есть, да и хорошо было бы иметь локальную копию - так, на всякий случай. За сим:

wget -r -l0 -np -k -p http://nmap.org/book/

-r - рекурсивная загрузка
-l0 - бесконечная вложенность ссылок
-np - no parent, т.е. не загружать файлы выше базового адреса
-k - конвертировать ссылки для удобства оффлайн просмотра
-p - загружать все файлы, которые необходимы для отображения html страниц

и не забываем поставить trailing slash в конце адреса.

После окончания загрузки получаем следующую структуру директорий

`-- nmap.org
|-- book
|   |-- images
|   |   |-- zenmap-icons
|-- book-icons
|-- css
|-- images
`-- zenmap
`-- images

Для того, чтобы сделать локальную копию книги более удобочитаемой я написал пару скриптов, которые "вырезают" из файлов все лишнее. Первый скрипт на ruby режет все "лишнее" в файле, точнее не режет, а выводит все "нужное" в консоль


parse.rb


input = ARGF.read

# write the contets of head tag with opening html tag
start_pos = input.index /<html>/
end_pos = input.index /<[bB][oO][dD][yY]/
puts input[start_pos..end_pos-1]

# write opening body tag
puts "<body>"

start_pos = input.index /<div class="navheader">/
end_pos = input.index /<div class="navfooter">/
puts input[start_pos..end_pos-1]

# write closing body and html tags
puts "</body></html>"



Второй скрипт на shell, который собственно выполняет предыдущий скрипт для каждого html файла в директории nmap.org/book

process-dir.sh


#!/bin/sh

mv toc.html index.html

file_list=`ls | grep html`

for file in $file_list
do
echo ">>>>>processing file " $file
ruby parse.rb $file > $file"_tmp"
mv $file"_tmp" $file
done


Собственно далее копируем оба скрипта в nmap.org/book и делаем в консоли sh process-dir.sh.

P.S. Если кто вдруг подскажет мне quick&dirty way как сконвертировать все это добро в PDF - буду премного благодарен ;-)