howto-db/data/pages/nex_protocol.txt
2024-05-09 01:00:04 +00:00

137 lines
7.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Nex (протокол) ======
Минималистичный сетевой протокол семейства [[https://ru.wikipedia.org/wiki/Gopher|Gopher]] / [[:gemini_protocol|Gemini]] для обмена преимущественно текстовыми файлами.
От последнего отличается отсутствием:
* внешних и внутренних редиректов
* [[:gemini_protocol#коды_статусов|статус-кодов]] и других заголовков - MIME тип документа определяется расширением файла (по-умолчанию text/plain)
* разметки, за исключением кликабельных ссылок, в формате %%=> url/uri [alt]%%
* обязательной сертификации TLS, следовательно - привязки к домену посредством CN/SNI, что выгодно при использовании классической адресации 0200::/7 в Yggdrasil, где передаваемый трафик уже зашифрован а DNS - зачастую не используется
===== Спецификация =====
==== NEX ====
Сервер принимает подключения посредством TCP на порту 1900 и в зависимости от наличия слеша в конце пути запроса, возвращает либо директорию либо текстовый или бинарный файл.
**Пример запроса:**
<code>
telnet nightfall.city 1900
nex
</code>
**Подробнее:**
%%nex://nightfall.city/nex/info/specification.txt%%
==== NPS ====
Протокол отправки данных по типу Titan для Gemini, по-умолчанию используется порт 1915.
Целостность отправляемого пакета обеспечивается точкой в последней строке сообщения, после чего пакет считается отправленным и соединение с сервером прекращается.\\
Формат взаимодействия с сервером может отличаться, обычно документация прилагается отдельно взятым ресурсом, но в целом принцип следующий
**Пример запроса:**
<code>
nc nightfall.city 1915
classifieds
YOUR MESSAGE GOES HERE
.
</code>
где строки:
- установка соединения посредством синтаксиса netcat
- целевой ресурс на сервере - в данном случае, аргумент указывает URI %%classifieds%%
- тело сообщения, можно указать несколько строк
- единственная точка в новой строке - завершает отправку, в содержимое сообщения данным сервером не добавляется
Текст из файла
<file - file.txt>
classifieds
╦ ╦╔═╗╔═╗╔╦╗╦═╗╔═╗╔═╗╦╦
╚╦╝║ ╦║ ╦ ║║╠╦╝╠═╣╚═╗║║
╩ ╚═╝╚═╝═╩╝╩╚═╩ ╩╚═╝╩╩═╝
.
</file>
<code>
cat file.txt | nc nightfall.city 1915
</code>
Посмотреть отправленное сообщение можно по адресу:
%%nex://nightfall.city/classifieds/%%
Также появился внутрисетевой сервер отправки сообщений [[:social_media:kevachat|KevaChat]], работает подобным образом:
<code>
nc 201:23b4:991a:634d:8359:4521:5576:15b7 1915
</code>
* В некоторых дистрибутивах для поддержки IPv6 в %%nc%% может потребоваться установка пакета %%netcat-openbsd%%
* IPv6 также поддерживается утилитами %%telnet%% и %%ncat%% (вместо [[https://netcat.sourceforge.net|nc]]), %%ncat%% лучше работает с кириллицей
* Для работы с кириллицей в терминале (на что собственно и ориентирован протокол), важно также убедиться в наличии поддержки окружением кодировки ввода UTF-8 (установить можно командой %%stty iutf8%% в %%~/.bashrc%%)
**Спецификация:**
%%nex://nightfall.city/nps/info/specification.txt%%
===== Программное обеспечение =====
==== Клиент ====
=== GUI ===
* [[https://github.com/skyjake/lagrange|Lagrange]] (C) - браузер для различных smallnet протоколов, включая nex
=== CLI ===
* [[https://git.sr.ht/~hedy/gelim|gelim]] (Go)
* [[https://git.32bit.cafe/yequari/pynex|pynex]] (Python)
==== Сервер ====
* [[https://hg.sr.ht/~m15o/nexd|nexd]] - очень простой сервер на Go для публикации статики на 1900 порту, по-умолчанию открывает файлы с названием "[[https://hg.sr.ht/~m15o/nex-pfm/browse/handler.go?rev=tip#L93|index]]" (репозиторий mercurial)
* [[https://github.com/YGGverse/nexd|форк сервера nexd]] - включает пакет [[https://hg.sr.ht/~m15o/nex-pfm|nex-pfm]] и модифицированный для Linux / amd64 makefile
* [[https://github.com/YGGverse/next|next]] - сервер на PHP с множеством настроек
* [[https://hg.sr.ht/~m15o/kinex|kinex]] - проксирующий сервер на Go для публикации статики на 8080 порту, также добавляет разметку HTML
==== Библиотеки ====
* [[https://github.com/YGGverse/nex-php|nex-php]], [[https://github.com/YGGverse/nps-php|nps-php]] - PHP 8 / Composer библиотеки для разработки веб-приложений
* [[https://github.com/ratchetphp/Ratchet|Ratchet]] - универсальная библиотека PHP 8 / Composer для разработки асинхронных серверов
===== Проксирование =====
В виду простоты протокола, передаваемые данные легко проксируются любым сервером, поддерживающим маршрутизацию потоков TCP
==== Nginx ====
<file - /etc/nginx/nginx.conf>
stream {
server {
listen 1915;
proxy_pass [IP]:1915;
}
}
</file>
===== Внутрисетевые ресурсы =====
* %%nex://[301:23b4:991a:634d::1900]/index.gmi%% - блог проекта YGGverse в формате [[:gemini_protocol#gemtext|gemtext]]
* %%nex://[301:23b4:991a:634d::feed]/index.gmi%% - агрегатор лент RSS на базе движка с открытым кодом [[https://github.com/YGGverse/Pulsar|Pulsar]]
* %%nc 201:23b4:991a:634d:8359:4521:5576:15b7 1915%% - NPS сервер [[social_media:kevachat|KevaChat]]
===== Ссылки =====
* [[https://nightfall.city]] (%%nex://nightfall.city%%) - домашняя страница - документация, полезные ссылки и ресурсы сообщества
* [[https://hg.sr.ht/~m15o/]] - тематические проекты с открытым кодом
* [[https://blog.ikuamike.io/posts/2021/netcat/|Справочный материал по вариантам netcat (en)]]
* [[:gemini_protocol#сравнение|Сравнение протоколов gemini, spartan, scroll, nex]]