Мини заметки — выпуск 14
9 сентября 2013
Мини заметок не было целых два месяца. Я знаю, вы по ним соскучились! В этом выпуске: настраиваем VNC в Ubuntu, конвертируем онлайн-книги в PDF, изучаем консольные сниферы, клонируем схемы в PostgreSQL и не только. Предыдущие выпуски: тринадцатый, двенадцатый, одиннадцатый, десятый.
1. Консольные сниферы
Если вам нужно грепнуть сетевой трафик по некоторой строке, используйте ngrep:
Для более сложных вещей лучше использовать tcpdump:
Вместо флага -A можно использовать -X, тогда пакеты будут выводиться в hex’е.
Так можно отсечь неинтересные пакеты:
Удобно использовать tcpdump в связке со strings:
Я лично для того, чтобы посмотреть HTTP-трафик, использую такой однострочник:
Помимо tcpdump есть еще tcpflow, который показывает только данные, без IP и TCP заголовков, но, к сожалению, не поддерживает UDP:
Если вам нужен снифер, осведомленный о существовании протоколов, используйте tshark. Это типа консольный WireShark:
Здесь -i задает интерфейс, -f — фильтр того, что нужно перехватывать, а -R — фильтр того, что нужно выводить. Часть -d tcp.port==8081,http
говорит tshark декодировать трафик на 8081-ый порт, как HTTP. В конце команды перечисляются поля, которые должны выводиться.
Получить более подробный вывод с заголовками запросов/ответов и тп можно так:
Вообще, tshark гениален. Если он видит в ответе, скажем:
Content-Encoding: gzip
… то он разжимает gzip, декодирует json и выводит в консоль результат декодирования json’а.
Еще из интересных сниферов есть urlsnarf, но в последних версиях Ubuntu он почему-то стал плохо работать. См также заметку Перехват сетевого трафика при помощи библиотеки libpcap.
2. Настройка VNC-сервера в Ubuntu
Проще всего включить Desktop Sharing, и подцепиться к машине любым VNC клиентом на :0. Но если кто-нибудь включить монитор, он сможет подглядывать за вашими действиями.
Чтобы этого не случилось, на сервере говорим:
echo "gnome-session --session=gnome-fallback" > ~/.xsession
vncserver -geometry 1278x780 -depth 16
На клиенте:
vncviewer 192.168.0.100:1
Вообще-то, у вас, скорее всего, предустановленна remmina, но, как по мне, какая-то она глюкавая.
Вы можете столкнуться с забавным багом. При нажатии кнопки D у вас свернутся все окна. Лечится переходом в System Tools → System Settings → Keyboard → Shortcuts → Navigation и вешанием на Hide all normal windows какого-нибудь бесполезного сочетания, скажем, Ctr+Alt+Esc. Аналогичная фигня со стрелочками вверх и вниз. Похоже, это касается всех сочетаний, в которых используется кнопка Super.
Для остановки VNC на сервере говорим:
Чтобы запустить vncviewer в полноэкранном режиме, используйте флаг -fullscreen. С помощью клавиши F8 можно работать с буфером обмена и выйти из vncviewer.
3. Как сконвертировать онлайн-книгу в PDF
Для решения этой проблемы есть такая замечательная программа wkhtmltopdf. Убунтовский пакет не умеет работать с несколькими входными HTML-файлами, поэтому качаем бинарник для Linux отсюда.
Вот так собирается PDF из набора html-файлов:
Также wkhtmltopdf умеет работать с URL, но качает при этом он как-то фигово, поэтому лучше заранее сохранить все на диске. В этом случае вы также сможете поправить HTML-код, если PDF получится кривой.
Программа имеет множество флагов, см wkhtmltopdf -H
.
4. Связка из vim и rsync
Если вам нужно собирать код на сервере, удобно редактировать его прямо на этом сервере. Обычно в таких случаях ходят на сервер по ssh и редактируют код в прекрасном текстовом редакторе vim. Но как только интернет начинает по каким-то причинам подтупливать, писать код становится невозможно.
Поэтому в последнее время я редактирую код локально, а на сервер заливаю его таким скриптом:
rsync -e ssh --progress \
--exclude 'deps/*/.git' \
--exclude '*.swp' \
--exclude 'tags' \
-zutr /home/eax/project eax@eax.dev.example.com:
В результате решилась не только проблема с сетью. Теперь мне не нужно синхронизировать .zshrc или подправленные мной шаблоны behaviour’ов для vimerl. Все лежит локально, в одном месте. Удобно.
5. Как доказать провайдеру, что он теряет пакеты
Чтобы слать провайдера дэфолтным маршрутом с его предложениями попробовать купить другой роутер, используйте утилиту mtr:
HOST: portege Loss% Snt Last Avg Best Wrst StDev
1.|-- 10.0.0.1 0.0% 1000 3.1 13.2 1.0 816.6 54.3
2.|-- 11.101.101.11 0.2% 1000 6.9 19.6 6.4 806.3 52.9
3.|-- 12.112.211.21 0.3% 1000 7.3 20.9 3.8 889.2 59.3
4.|-- 17.232.232.71 1.8% 1000 2.8 17.8 2.2 872.2 60.0
5.|-- 94.132.231.49 0.2% 1000 3.0 16.8 2.5 855.4 57.7
6.|-- 217.69.139.199 0.3% 1000 3.1 15.8 2.4 838.5 58.9
Сразу видно, где и какой процент пакетов теряется.
6. Как прикрутить к своему блогу «Twitter-комментарии»
Можно добавить в конце постов такую ссылку:
?screen_name=afiskon
&text=%D1%82%D0%B5%D0%BA%D1%81%D1%82
&url=http://eax.me/mini-notes-issue-14/
Пригодится, если вы используете OctoPress и не перевариваете Disqus.
7. Куча подозрительного UDP-трафика на 224.0.0.251:5353
Если iptraf в Ubuntu показывает кучу странного UDP-трафика на 224.0.0.251:5353, говорим:
sudo update-rc.d -f avahi-daemon remove
… и проблема уйдет.
8. Определяем версию проекта по числу коммитов
Чтобы отличить версию вашего проекта 2.14.1, собранную вчера, от версии 2.14.1, собранную сегодня, можно добавить к версии число коммитов:
2.14.1.187
Если вы пользуетесь Jenkins, не забудьте отключить в свойствах проекта проставление тэгов!
9. Как создать копию схемы в PostgreSQL
В отличие от MySQL в PostgreSQL есть схемы. Допустим, есть база данных, в которую ходит много пользователей, каждый из которых работает со своей схемой. Таблицы при этом у всех пользователей одинаковые. Чтобы завести еще одного пользователя с его собственной схемой, приходится немного извратиться. Один из способов решить проблему следующий.
Делаем бэкап существующей схемы:
Говорим:
… и заводим нового пользователя:
GRANT ALL privileges ON DATABASE dbname TO user2;
Заменяем имя схемы в дампе:
Вообще-то, на этом шаге можно испортить данные. Надеюсь, вы используете достаточно длинные имена пользователей и названия схем, чтобы этого не случилось. Или что для вас это не критично.
Далее:
Если не использовать флаг -f, psql будет ругаться на использование в дампе \N вместо NULL.
Еще один способ описан здесь.
10. Как собрать PDF-версию Learn You a Haskell for Great Good
Как оказалось, все довольно просто:
git clone git@github.com:pvorb/learn-you-a-haskell.git
cd learn-you-a-haskell
sh pdf-en.sh
evince learn-you-a-haskell-en.pdf
Правда, texlive-full — довольно тяжелый пакет.
Дополнение: Мини заметки — выпуск 15
Метки: Всячина.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.