How to Wiki Database (change log)
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
7.7 KiB
136 lines
7.7 KiB
====== 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]]
|
|
|