Міні нотатки - випуск 14, Записки програміста

Міні нотатки - випуск 14

Міні нотаток не було цілих два місяці. Я знаю, ви за ними скучили! У цьому випуску: налаштовуємо 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 геніальний. Якщо він бачить у відповіді, скажімо:

… то він розтискає gzip, декодує json та виводить у консоль результат декодування json'а.

Ще з цікавих сніферів є urlsnarf, але в останніх версіях Ubuntu він чомусь став погано працювати. Див також замітку Перехоплення мережевого трафіку за допомогою бібліотеки libpcap.

2. Налаштування VNC-сервера в Ubuntu

Найпростіше увімкнути Desktop Sharing, і підчепитися до машини будь-яким VNC клієнтом на :0. Але якщо хтось увімкнути монітор, він зможе підглядати за вашими діями.

Щоб цього не сталося, на сервері кажемо:

/ .xsession vncserver -geometry 1278x780 -depth 16

Взагалі-то, у вас, швидше за все, встановлена ​​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

Тому останнім часом я редагую код локально, а на сервер заливаю його таким скриптом:

rsync -e ssh --progress \ --exclude 'deps/*/.git' \ --exclude '*.swp' \ --exclude 'tags' \ -zutr/home/eax/project [email protected]:

В результаті вирішилася не лише проблема із мережею. Тепер мені не потрібно синхронізувати .zshrc чи підправлені мною шаблони behaviour'ів для vimerl. Все лежить локально, в одному місці. Зручно.

5. Як довести провайдеру, що він втрачає пакети

Щоб надсилати провайдера дефолтним маршрутом з його пропозиціями спробувати купити інший роутер, використовуйте утиліту mtr:

Відразу видно, де і який відсоток пакетів губиться.

Можна додати наприкінці постів таке посилання:

Стане в нагоді, якщо ви використовуєте OctoPress і не перетравлюєте Disqus.

7. Купа підозрілого UDP-трафіку на 224.0.0.251:5353

Якщо iptraf в Ubuntu показує купу дивного UDP-трафіку на 224.0.0.251:5353, кажемо:

… і проблема піде.

8. Визначаємо версію проекту за кількістю коммітів

Щоб відрізнити версію вашого проекту 2.14.1, зібрану вчора, від версії 2.14.1, зібрану сьогодні, можна додати до версії кількість комітів:

Якщо ви користуєтеся Jenkins, не забудьте вимкнути у властивостях проекту проставлення тегів!

9. Як створити копію схеми у PostgreSQL

На відміну від MySQL у PostgreSQL є схеми. Припустимо, є база даних, до якої ходить багато користувачів, кожен із яких працює зі своєю схемою. Таблиці у всіх користувачів однакові. Щоб завести ще одного користувача з його власною схемою, доводиться трохи перекрутитися. Один із способів вирішити проблему наступний.

Робимо бекап існуючої схеми:

… і заводимо нового користувача:

Замінюємо ім'я схеми в дампі:

На цьому кроці можна зіпсувати дані. Сподіваюся, ви використовуєте досить довгі іменакористувачів та назви схем, щоб цього не трапилося. Або що вам це не критично.

Якщо не використовувати прапорець -f, psql лаятиметься на використання в дампі \N замість NULL.

Ще один спосіб описаний тут.

10. Як зібрати PDF-версію Learn You a Haskell for Great Good

Як виявилось, усе досить просто:

Щоправда, texlive-full – досить важкий пакет.