Przekieruj stdin i stdout na porty


10

Chciałbym wziąć program, Pktóry odczytuje stdini zapisuje stdout, ale podłącza go nclub cokolwiek innego, co czyta z określonego portu i wysyła do innego portu.

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

Jak mogę uzyskać zwrot z portu 60606?


Twoje pytanie jest niejasne, jak stwierdzono. Masz na myśli, że ktoś może otworzyć 2 połączenia TCP z twoim komputerem, jedno do portu 50505, a drugie do portu 50506, wysłać dane o pierwszym przeznaczonym do karmienia Pi oczekiwać odczytania wyniku Pz drugiego połączenia TCP? Dlaczego tag UDP?
Stéphane Chazelas,

Tak! O ile UDPmyślę, że chciałem ports, ale to nie było istniejące słowo kluczowe, więc pomyślałem TCPi myślę, że dodałem UDPodruchowo.
Yimin Rong,

Odpowiedzi:


12

Mam na myśli, że ktoś może otworzyć 2 połączenia TCP z twoim komputerem, jedno do portu 50505, a drugie do portu 60606, wysłać dane o pierwszym przeznaczonym do podania do P i oczekiwać odczytania wyniku P z drugiego połączenia TCP, to byłoby:

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

Lub z socat:

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

Aby Pwysłać dane wyjściowe z powrotem do tego samego połączenia:

socat tcp-listen:50505,reuseaddr exec:P

3

Nie potrzebujesz ncdo pracy z portami. bashmoże zrobić to sam:

Bash obsługuje kilka nazw plików, zwłaszcza gdy są one używane w przekierowaniach, jak opisano w poniższej tabeli:

/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/tcpjest często wyłączony i nie można go używać do słuchania . Potrzebujesz, zshjeśli chcesz powłoki, która może tworzyć nasłuchiwane gniazda TCP.
Stéphane Chazelas,

@ StéphaneChazelas Muszę przyznać, że nigdy nie próbowałem. Nie mówi nic o tym ograniczeniu na stronie podręcznika, prawda?
Hauke ​​Laging

Jak byś to zrobił? Gniazdo nasłuchiwania jest bramą do tworzenia bardziej akceptowalnych gniazd, przekierowania nie działają tak dobrze w tym przypadku. zsh używa do tego wbudowanego ( ztcp -ldo nasłuchiwania i ztcp -aakceptowania połączeń w gnieździe nasłuchującym).
Stéphane Chazelas,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.