Перенаправлення stdin і stdout на порти


11

Я хотів би взяти програму, Pяка читає з stdin& запису stdout, але підключити її до ncчи іншої такої, що вона читає з певного порту та виводить на інший порт.

# The reading is easy, here P reads from port 50505
nc -l 50505 | P

Як змусити його записати назад, щоб сказати, порт 60606?


Ваше запитання незрозуміло, як зазначено. Ви маєте на увазі, що хтось може відкрити 2 TCP-з'єднання з вашою машиною, одне - до порту 50505, а інше - до порту 50506, надіслати дані першого, призначеного для подачі, Pі очікує, що він прочитає вихід Pз другого TCP-з'єднання? Чому тег UDP?
Стефан Шазелас

Так! Щодо того UDP, я думаю, що хотів ports, але це не було існуюче ключове слово, тому я подумав TCP, і я думаю, що додав UDPіз рефлексу.
Імін Ронг

Відповіді:


12

Я маю на увазі, що хтось може відкрити 2 TCP-з'єднання з вашою машиною, один до порту 50505, а інший до порту 60606, надсилати дані першого, призначеного для подачі на P, і очікує зчитування виходу P з другого TCP-з'єднання, то це було б:

< /dev/null nc -q -1 -l 50505 | P | nc -l 60606 > /dev/null

Або з socat:

socat -u tcp-listen:50505,reuseaddr - | P | socat -u - tcp-listen:60606,reuseaddr

Для того, Pщоб відправити свій вихід назад до того ж з'єднання:

socat tcp-listen:50505,reuseaddr exec:P

3

Вам не потрібно ncдля роботи з портами. bashможе зробити це сам:

Bash обробляє кілька імен файлів спеціально, коли вони використовуються в перенаправленнях, як описано в наступній таблиці:

/dev/fd/fd
    If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
    File descriptor 0 is duplicated.
/dev/stdout
    File descriptor 1 is duplicated.
/dev/stderr
    File descriptor 2 is duplicated.
/dev/tcp/host/port
   If host is a valid hostname or Internet address, and port is an integer 
   port number or service name, bash attempts to open a TCP connection to
   the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer 
    port number or service name, bash attempts to open a UDP connection to
    the corresponding socket.

3
/dev/tcpчасто відключений і його не можна використовувати для прослуховування . Вам потрібна, zshякщо вам потрібна оболонка, яка може створювати прослуховувальні розетки tcp.
Стефан Шазелас

@ StéphaneChazelas Я мушу визнати, що ніколи не пробував. Це нічого не говорить про це обмеження на сторінці людини, чи не так?
Hauke ​​Laging

Ну як би ти це зробив? Розетка для слухачів - це двері для створення більшої кількості приймаючих сокетів, переадресації не працюють на це також. zsh використовує для цього вбудований ( ztcp -lдля прослуховування та ztcp -aприйому з'єднань у розетці прослуховування).
Stéphane Chazelas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.