Міні нотатки - випуск 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 – досить важкий пакет.