Недавно я обнаружил в документации QNX, что она позволяет устанавливать IPC на основе сообщений между процессами на отдельных физических машинах с помощью serial device ( dev/serX
), и это заставило меня задуматься:
Возможно ли в Linux создание общесистемного специального устройства для туннеля TCP / UDP? Что-то вроде nc
stdin / stdout открыто публикуется в / dev / что-то.
В конце я хотел бы иметь возможность записать что-то в такой файл на одном компьютере и получить это на другом конце, например:
#machine1:
echo "Hello" > /dev/somedev
#machine2:
cat < /dev/somedev
Я взглянул на nc
человека, но не нашел никакой возможности указать источник / назначение io, кроме stdio.
Ответы:
socat
может сделать это и многое другое с вещами, напоминающими «потоки»Что-то, использующее эту основную идею, должно сделать это для вас:
(адаптировано со страницы примеров )
Если вы хотите зашифровать, вы можете использовать вариант
ssl-l:54321,reuseaddr,cert=server.pem,cafile=client.crt,fork
на machine1 и что-то вродеssl:server-host:1443,cert=client.pem,cafile=server.crt
на machine2(Подробнее о socat ssl )
источник
Передача сообщений должна быть реализована на более высоком уровне; TCP не имеет понятия сообщения - TCP-соединения передают потоки октетов.
Вы можете достичь чего-то вроде того, что вы запрашиваете,
nc
и именованных каналов , видитеman mkfifo
; или проверьте,socat
как указывает Алекс Страгиес.Без службы среднего уровня основные проблемы заключаются в том, что (1) данные не могут быть записаны в сеть, если на другом конце их не слушают, и (2) соединения TCP являются двунаправленными.
Поскольку вы не можете записывать данные в сеть, если кто-то их не слушает, вы всегда должны запустить прослушиватель, прежде чем сможете отправлять данные. (В системе передачи сообщений процесс, обрабатывающий сообщения, обеспечит некоторую буферизацию.)
Ваш пример может быть легко переписан:
Сначала запустите слушатель на машине 2 (место назначения):
В вашем примере это будет
Это заблокирует и подождет, пока кто-нибудь отправит данные на порт 1234.
Затем вы можете отправить некоторые данные из machine1 (источник):
В вашем примере это будет
Если вы хотите каким-то образом обработать полученные данные и ответить на них, вы можете использовать средство совместной обработки оболочки. Например, это очень простой (и очень упрямый) веб-сервер:
Посмотрите, как достигается двунаправленная связь между основной частью сценария и сопроцессом с использованием файловых дескрипторов в массиве
$ncfd
.источник
cat
означает "некоторый процесс чтения для стандартного ввода".Если вы просто хотите соединить два компьютера с помощью базовой программы, такой как nc, вы можете перенаправить из / в
/dev/tcp/<host>/<port>
.Это не настоящие устройства, а вымысел, созданный bash, поэтому такие вещи, как «
cat /dev/tcp/foo/19
не будут работать, аcat < /dev/tcp/foo/19
будут работать».источник