полинукс – Telegram
полинукс
430 subscribers
119 photos
5 videos
1 file
33 links
Download Telegram
отпуск начался с электронной регистрации на china eastern airlines

мне хочется выкатиться из айти после попытки зарегистрироваться на рейс. я испытываю душевные страдания, когда при нажатии на кнопку "скачать boarding pass" мне в папку загрузок падает пдф.. внутри которого json. видимо, с инфой о том, что сервер пятисотнулся. мне плохо, когда я вижу потекшие NaN. я хочу убиться_головой_ап_стену, когда читаю очередное предложение, состоящее из слов..

видимо, в аэропорт придется приехать сильно заранее.
19😢1👀1
создала пока канал с щитпостом поездки: https://news.1rj.ru/str/+XYJwCfHDe6BlZDYy
здесь постараюсь писать только что-то адекватное хд
щитпостить тоже не обещаю, такого навыка нет :о
у меня есть канал🙂

well, тогда расскажу, что, почувствовав вкус свободы, (я последнюю неделю безработная кста, но об этом позже) я решила ручками имплементировать пинг, без использования сторонних зависимостей, именно что собирая пакетики самой :33
пока есть то, что на первом пике: пинги есть, резолв доменов есть, ttl и rtt есть

fun facts about icmp:
1) если вы сидите на линуксе/маке, то скорее всего отправляете пинги (они же icmp пакеты с типом echo) по udp :) но это не точно, хаха, забайтила. на самом деле есть такая штука как unpriveleged ping, для работы которого нужно создать датаграмм сокет с определённым типом отправляемых пакетов (socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)). как следует из названия, это позволяет открывать сокет для отправки некоторых типов сообщений icmp. в названии упомянуты датаграммы (что есть концепция, которую использует udp), но, кажется, пакетики созданные через айпи сокет и датаграмм сокет выглядят одинаково
2) у icmp части пакетика есть своя чексумма. зачем, если у айпи хедера она тоже есть, еще и вычисляется так же? такой путь. (зацените кста, как она вычисляется, я до этого об этом способе особо не думала, хотя он простой: https://en.wikipedia.org/wiki/Internet_checksum)
3) каждый раз, запуская пинг, вы видите строчки с задорным сообщением "64 bytes from 1.1.1.1 <...>". интересно, что же это за 64 байта, что в них лежит? дата пакета — 64 - 8 = 56 байт. первые 16 байт — время отправки сообщения (то есть момент, когда он покидает ваш хост). остальные 40 — просто константный мусор :) байтики, идущие по порядку (пик два). каждый раз, запуская пинг, думайте, что именно вы приближаете тепловую смерть вселенной на сорок байт.
4) icmp использовался для синка времени до появления ntp, хихи

написанный говнокод лежит здесь: https://github.com/ktp0li/netutils
буду рада комментариям насчет него, но несомненно только конструктивным)0
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍4🔥2😁1🙏1👀1
полинукс
Photo
well, я что-то написала. проблема только одна: получилось говно :)
раз уж пишу на гошке, захотелось заюзать всякие канонично-гошные концепции и полностью обмазаться горутинами и каналами. в процессе пришлось осознать, почему обычно при написании сетевого ПО все делают один поток на чтение из сокета, один на написание (я спамила горутину на каждое чтение из сокета. спойлер: оно начинает течь. и умирать одной большой кучей, когда таймаут подключения истечет)
что сейчас есть:
~ ❯ ./ping ya.ru
PING ya.ru (77.88.44.242) with 12(40) bytes of data
20 bytes from ya.ru (77.88.44.242): icmp_seq=1 ttl=245 time=15.66 ms
20 bytes from ya.ru (77.88.44.242): icmp_seq=2 ttl=245 time=16.16 ms
20 bytes from ya.ru (77.88.44.242): icmp_seq=3 ttl=245 time=14.31 ms
20 bytes from ya.ru (77.88.44.242): icmp_seq=4 ttl=245 time=16.48 ms
^C
--- 77.88.44.242 ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, 4001 ms
rtt min/avg/max/mdev = 14.306/15.655/16.484/0.832 ms
~ ❯ ./ping ya.ru -c 3
PING ya.ru (5.255.255.242) with 12(40) bytes of data
20 bytes from ya.ru (5.255.255.242): icmp_seq=1 ttl=244 time=16.86 ms
20 bytes from ya.ru (5.255.255.242): icmp_seq=2 ttl=244 time=16.72 ms
20 bytes from ya.ru (5.255.255.242): icmp_seq=3 ttl=244 time=17.37 ms

--- 5.255.255.242 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, 3000 ms
rtt min/avg/max/mdev = 16.719/16.985/17.374/0.281 ms

видите странности? я вижу.
а) общее время всегда подозрительно близко к кратному тысяче числу. почему? потому что я не смогла нормально написать ожидание получения пакета Т-Т. я пыталась это делать через неблокирующие операции, но в итоге все равно пришла к тупому time.sleep(1s). в оригинальном пинге кажется тоже используется сон, но там делей вычисляется динамично исходя из rtt предыдущих пакетов
б) второе вытекает из первого: на первом примере видно, что пакетов отправлено больше, чем получено. почему так? потому что пакеты отправляются каждую секунду независимо от того, пришло ли что-то до этого, и всегда получается так, что во время интеррапта тебе что-то не пришло Т-Т

производительность конечно получилась мое почтение, цпутайм на уровне))
~ ❯ time ping 8.8.8.8 -c 3
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=107 time=7.47 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=107 time=8.41 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=107 time=8.69 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 7.474/8.190/8.691/0.519 ms

________________________________________________________
Executed in 2.02 secs fish external
usr time 0.62 millis 621.00 micros 0.00 millis
sys time 3.45 millis 319.00 micros 3.13 millis

~ ❯ time ./ping 8.8.8.8 -c 3
PING 8.8.8.8 (8.8.8.8) with 12(40) bytes of data
20 bytes from 8.8.8.8: icmp_seq=1 ttl=107 time=9.45 ms
20 bytes from 8.8.8.8: icmp_seq=2 ttl=107 time=8.47 ms
20 bytes from 8.8.8.8: icmp_seq=3 ttl=107 time=8.23 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, 3002 ms
rtt min/avg/max/mdev = 8.230/8.717/9.446/0.525 ms
s from ya.ru (77.88.44.242): icmp_seq=1 ttl=245 time=15.66
Executed in    3.01 secs      fish           external
usr time 43.85 millis 0.00 millis 43.85 millis
sys time 23.10 millis 1.43 millis 21.67 millis

код тоже просто ужасен, огромная куча мешанины и спагетти, две поллинг горутины (то есть while true))) и не очень понятные зависимости. eh.. ну.. я пыталась..
из плюсов оно нормально работает с потерей пакетов:
~ ❯ sudo tc qdisc add dev wlan0 root netem loss 50% 25%
~ ❯ ./ping 8.8.8.8 -c 5
PING 8.8.8.8 (8.8.8.8) with 12(40) bytes of data
20 bytes from 8.8.8.8: icmp_seq=1 ttl=107 time=8.74 ms
20 bytes from 8.8.8.8: icmp_seq=3 ttl=107 time=9.07 ms
20 bytes from 8.8.8.8: icmp_seq=5 ttl=107 time=9.38 ms

--- 8.8.8.8 ping statistics ---
5 packets transmitted, 3 received, 40% packet loss, 5002 ms
rtt min/avg/max/mdev = 8.739/9.065/9.385/0.264 ms
🔥6👍1💯1
заметки про ebpf

я тут в рамках микропроекта решила наконец разобраться, что такое ebpf и как его правильно готовить 🤪

краткое введение в ebpf: это фича, позволяющая писать программы на ограниченном си, которые будут безопасно запускаться в кернелспейсе. эта технология позволяет хендлить ивенты и изменять поведение ос, не теряя при этом в производительности (при условии, что ты пишешь оптимальный код, конечно же)). как по мне, самое интересное его применение это xdp: он позволяет обрабатывать пакеты, попадающие в сетевуху еще до того, как они будут обработаны системой (под пакетик будет аллоцирован буфер и все такое). на ebpf есть много хорошей доки (официальная, туториалы от eunomia, дока от цилиума).

предположим, мы написали простой hello world (как здесь). что делать дальше? как его собрать и запустить пастись в кернелспейс? как взаимодействовать с написанным через юзерспейс?
для этого есть несколько инструментов, самые известные из них:
👁сборка через старый добрый clang и инъекция кода ручками. xdp загружать довольно просто: пара строк команды ip. за другие типы програм не шарю(. никто не мешает идти по этому, классическому пути, но я побоялась что умру в процессе написания юзерспейс части утилиты на сях
👁тулсет от eunomia. юзает wasm (кек). я попыталась его заюзать, но поняла, что если захочется припилить юзерспейс, то при использовании их доки придется страдать и учиться писать на сях (пример)
👁bcc. тулкит, благодаря которому родилось невероятное количество полезных утилит (не, вы только посмотрите. еще и лабы для того, чтобы научиться ими пользоваться, есть). я попыталась его заюзать, но жопа сгорела, когда я поняла, что там линковщик немного с приколом. тебе нужно писать код, отличающийся от манов для чистого ebpf, а мне не хотелось слишком сильно прилипать к одной платформе. из плюсов можно довольно быстро и удобно разрабатывать и писать юзерспейс часть программы на питончике
👁cilium ebpf. тулкит для гошки от создателей ebpf-based имплементации нетворкинга для кубернетиса. забавная штука, на которой я в итоге и остановилась. через нее можно сбилдить кернелспейс часть утилиты и потом удобно аттачить её и получать доступ к ее переменным и структурам из юзерспейса. создатели настолько преисполнились в своем познании, что написали свой модуль для того, чтобы писать ебпф программы не на си, а сразу на ассембли🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥5
три месяца без постов😃

а я время зря не теряла!! просто не хотелось постить недоделки, а штуки все не доводятся до завершения...🫠

за это время я:
👁все же допилила ту штучку с ebpf (линк с кратким описанием: https://github.com/ktp0li/epbf-ping-fooler). сейчас неторопливо пишу об этом статью, контента набралось больше, чем на постик (хотя делать её или нет — хороший вопрос, учитывая, что относительно недавно выходила статья от другого челика с точно такой же идеей)
👁почти допилила маленький сократитель ссылок с авторизацией на го+тс (https://github.com/b4ck5p4c3/linkshort). там осталось только одну ручку докрутить и задеплоить, но все не могу сесть х) тс кстати довольно приятный язык! если не смотреть на жс-специфику
👁снова сменила работу (так получилось...), чичас досиживаю испыталку в озоне, жестко насилую там нджинксы в команде, что отвечает за весь л4 и л7 балансинг
👁села изучать зиг (он прикольновый :3) и чичас пишу на нём маленькую программу под uefi. хочу сделать что-то подобное неофетчу, но не имея никакого интерфейса для простого фетчинга информации о системе в виде ОС. единственный способ в таком случае достать подобного рода инфу — парсить системные таблички, такие как smbios и acpi. первые сейчас и паршу х))
👁на выходных законтрибутила в сорс для любимой читалки манги!! там буквально пара строчек, но я тааааак довольна, что вот несколько дней все не работало, а теперь благодаря мне можно снова спокойно читать мангу >:33 (https://github.com/Skittyblock/aidoku-community-sources/pull/929)

а между тем этому канальчику уже стукнул год. спасибо всем, кто ставит реакции и комментит, это очень греет мне душу <3
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄3017🔥9👍3❤‍🔥2👏1😁1💅1
я снова в тбилиси😮

в этот раз приехала на две недели: первая отпуск, вторую буду работать (god bless удаленка, тут еще и +1 к мск, вставать можно попозже :3). за пару дней успела зайти в тбилисский спейс и увидеться со знакомыми ребятами оттуда, покататься на 🤪бэхе🤪 (@beloe_vedro) одного из них, порешать вопросики связанные с банками и пересечься с прелестной @fixmes. оче оче надеюсь в этот отпуск успеть много всего увидеть потрогать понюхать :33

если вы в это же время тоже будете в тби, то буду рада пересечься!!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
21🔥65💅1
еще раз сходили в forthspace🤪

в прошлый раз, год назад, я заглядывала к ребятам в самый разгар переезда (еще и помогала им вещи перевозить хд), и очень рада видеть, как они обжились на новом месте. у них теперь такое огромное помещение!! есть отдельные кухня, гостиная, музыкальная комната (!), целый этаж под хардварочную (!!!)
гордимся соотечественниками, при встрече кладём лари в коробку для донатов

придя в ф0, мы с другом решили заняться чем-то смешным и сели патчить его мобилку :33 нашей задачей было заставить работать google pay на grapheneOS. для этого нужно любым из возможных способов добавить модуль play integrity fix.
сначала мы пытались пропатчить boot.img через apatch. мобила падала в бутлуп. почему? а вооот, в ишью целая перепись тех, кто не может пошить пиксель после мартовского обновления безопасности))
потом пытались поставить магиск. со второй попытки догадались патчить не boot.img, а init_boot.img. но даже после успешной установки magisk мы так и не смогли поставить zygisk😭 ни отдельная инсталляция, ни попытки установки через магиск так и не позволили нам загрузить модуль
по итогу друг психанул и поставил себе сток, говорит, что теперь его жизнь стала лучше🕺
Please open Telegram to view this post
VIEW IN TELEGRAM
18💅5🖕3❤‍🔥2😁1😢1