Комментарии 30
Пан знает толк в извращеньях :-)
С учебной точки зрения опыт интересный ! ICMP действительно может нести данные и в контексте текущей задачи не отличается от UDP. Кроме уровня в модели OSI.
Вы переизобрели pingfs )
Ping tunnel ещё можно было бы изобрести. Но он тоже уже изобретён. ) http://www.cs.uit.no/~daniels/PingTunnel/
Кстати часто операторы связи приоритезируют ICMP, чтобы скрыть перегрузки каналов связи. И "ping туннель" через таких операторов работает лучше чем UDP.
В ранней сети Корбины между районами Москвы ходили только пинги и мы с друзьями туннелировались как раз через них ;)
обидно бывает читать рассказы тех, кто застал рождение интернета из соединения своего компа с компом друга по проводу для quake по локалке) когда родился позже этого...
обиднее — периодически наблюдать что у кого-то в запасе больше лет чем у тебя, а старпёрские рассказы миллениалов — это всё фигня
обиднее — периодически наблюдать что у кого-то в запасе больше лет чем у тебя
Зачем обижаться? Я тихо радуюсь, что я буду червей кормить — а они ещё помучаются!
Если кому интересно, картинка на обложке из аниме "Врата штейна"
отправляем на другой конец земного шара и на протяжении 0.5сек он хранится, будучи в кэшах роутеров и маршрутизаторов по дороге!
Б-безопасность П-практичность
У вас (или на промежуточном роутере) выключился свет на N секунд и все пакеты с паролем от крипто кошелька потерялись. Б - но это уже не слово безопасность :)
Поэтому нужно отправлять данные на несколько хостов сразу, репликация, очевидно же
А какая разница на сколько хостов, если у вас света нет, к примеру, минуту. Все хосты пришлют ответы которые потеряются раз вас нет.
Т.е. как я понял информация жива только пока ходит запрос. Как только вас нет, то запрос потеряется и вся его информация тоже.
оно открытым текстом отправляется
так что С-сарказм
Память на линиях задержки

Задумал школьный учитель детей ping-у обучить. И умер весь интернет ненадолго. Почему не надолго? Да потому что мертвый интернет не пингуется.
Интересная идея, но бесполезное.
Вспомнилось, как я в своё время реализовал ICMP-туннель между двумя подсетями. Дано: две подсети A, B, между которыми отсутствуют acl - даже пинги не ходят. И есть общий ресурс в третьей подсети C, который доступен всем. Отправляем пинг на общий ресурс, подделывая IP-адрес отправителя. В итоге пакет ходит по маршруту A->C->B. Из встреченных сложностей: нужно знать все три ip-адреса, но позже ICMP-туннель оброс функционалом служебных сообщений, чтобы можно было протестировать туннель или сообщить реальный ip-адрес отправителя. Внутри туннеля бегал обычный tcp, так что потери пакетов восстанавливались им. Для браузинга интернета по выходным этого хватало.
Много думал над этим, но пришел к выводу, что подделывать адрес отправителя бесполезно. Ведь этот адрес в заголовке пакета переписывается NATами и до получателя он дойдёт с другим адресом. Или нет? Если бы эта схема действительно работала, поверх неё можно было бы придумать ещё массу всяких плюшек...
nat'a между подсетями не было в моём случае, просто связь между двумя машинами, на одной из которых был доступ в интернет, и на обеих админские права.
Я, конечно, могу ошибаться, но NAT никак не мешает подделыванию ip-адреса отправителя icmp-пакета, роутер просто пошлёт echo-ответ в поддельный ip-адрес (он то не в курсе ваших махинаций). На похожем принципе реализована ddos атака через icmp - smurf attack
.
Воспользуюсь пожеланиями автора и подкину бесполезных, но весёлых идей.
Во-первых, идея изучения IP (вообще), и ICMP (в частности), по скучным RFC наверняка кем-то будет оценена как бесполезная, но эффект в итоге будет сильно веселее — и английский прокачаешь, и узнаешь больше, и в статьях на хабре не будет чуши, подобной этой:
не упоминаю порты и всё что с ними связано, ведь 1й порт для ICMP это скорее условность
Сразу становится понятно, что источником информации об ICMP являлась соответствующая статья на русской Википедии (да и прямая ссылка в статье как бы подтверждает), ведь нигде больше не написано, что у ICMP есть какой-то неведомый Порт/ID, и равен он 1.

А вот если бы автор изучал ICMP по RFC, или хотя бы по англоязычной Википедии, то он бы ещё до написания статьи знал, что порты в привычном смысле существуют только у транспортных (к коим ICMP не относится никак) протоколов типа UDP или TCP, но у всех интернет-протоколов есть очень даже не условный, а самый что ни на есть конкретный Protocol ID, и именно у ICMP он имеет значение 1. Файл /etc/protocols
(или более близкий автору %SystemRoot%\System32\drivers\etc\protocol
) — это как раз справочник по этим самым ID.
Во-вторых, идея не работать под административным аккаунтом, а для запуска программ, требующих повышения полномочий, использовать doas/sudo/runas.exe
, не нова и не так уж и бесполезна, но будет очень весело, если автор себе в один прекрасный день что-нибудь снесёт вплоть до переустановки ОС. Это к тому, что работа с raw-sockets требует админских прав, о чём автор в статье не упомянул (напрасно).
А вообще — молодец, пиши ещё.
Успехов!
Сильно напомнило накопитель на элт, но без трубки. :)
https://ru.wikipedia.org/wiki/Запоминающая_электронно-лучевая_трубка
Скоро изобретут ассемблер на python
Ping пакеты как временное хранилище данных на python raw socket