Puncte:1

Socat - este posibil?

drapel us

Există vreo modalitate de a asculta și de a executa o comandă (pentru fiecare conexiune) în timp ce redirecționarea portului cu socat? Un exemplu care nu funcționează pentru a fi mai clar:

socat TCP-LISTEN:8080,reuseaddr, "exec:ls" furk tcp:localhost:80

Puncte:0
drapel cl
A.B

Ca aceasta?

socat tcp-listen:8080,reuseaddr,furk system:'ls; exec socat - tcp\:localhost\:80'
  • Primul parametru primește ,furculiţă a avea socat stați să ascultați pentru mai multe conexiuni

  • sistem: este de preferat executiv: pentru a avea un interpret shell și pentru a rula cu ușurință o comandă suplimentară după ls comanda,

  • care este un nou socat comanda

    care va avea stdin/stdout conectat la ieșirea/intrarea clientului de la distanță și îl va redirecționa bidirecțional către următoarea destinație. Rețineți că este : separator (și alte câteva caractere speciale) trebuie să fie eliminate cu a \ pentru a nu confunda pe primul socat comanda. Dacă această linie devine mai complexă, devine mai ușor să executați pur și simplu un script ca acesta:

    socat tcp-listen:8080,reuseaddr,furk exec:/path/to/myscript.sh
    

    cu /path/to/myscript.sh:

    #!/bin/sh
    ls
    exec socat - tcp:localhost:80
    

    exec comanda în shell este opțională, dar evită plecarea inutilă în jurul shell-ului.

socat de asemenea, exportă câteva variabile proprii care pot fi reutilizate în script, pe care le-ați putea verifica, de exemplu, astfel (cu o conexiune făcută):

$ env - socat TCP-LISTEN:8080,reuseaddr,furk exec:printenv
SOCAT_PID=1057351
SOCAT_PPID=1057284
SOCAT_VERSION=1.7.4.1
SOCAT_SOCKADDR=127.0.0.1
SOCAT_SOCKPORT=8080
SOCAT_PEERADDR=127.0.0.1
SOCAT_PEERPORT=42970
hyogy avatar
drapel us
Acest lucru este uimitor! Mulțumesc!(: Încă un sfat, vă rog: folosind acea linie, cum ați decoda șirurile în base64? Adică: datele care trec prin portul 8080 sunt codificate în bază64, dar vreau să le decodez înainte ca datele să ajungă la portul 80 (datele revenirea de la portul 80 nu trebuie să fie codificată)
A.B avatar
drapel cl
A.B
De îndată ce utilizați o conductă undeva (de exemplu: `base64 -d | socat ... `), comunicarea nu va fi complet bidirecțională. Apoi, probabil că acest lucru necesită bifurcarea unor comenzi în script pentru a obține două jumătăți de direcții să funcționeze. Ar trebui să expuneți (probabil într-o altă întrebare) întreaga problemă. Verificați https://xyproblem.info/ . Crezi că poți să o rezolvi cu Y = socat, dar noi nu știm nimic despre X. Chiar dacă socat o poate rezolva, nu pot spune pentru că nu știu problema ta.
hyogy avatar
drapel us
Vă mulțumim pentru ajutorul vostru bun!! Am să vin cu o nouă întrebare și te voi anunța dacă vrei!(;
A.B avatar
drapel cl
A.B
de fapt, pentru acest caz specific, este ușor, cu excepția faptului că întâmpinați o problemă cu sincronizarea: nu există nicio modalitate de a ști când se termină intrarea, așa că comunicarea trebuie să se termine mai întâi și probabil că nu va fi un răspuns trimis înapoi la timp. iată linia de pus în myscript.sh: `exec base64 -d | socat - tcp:localhost:80`. `-` înseamnă STDIO, iar în timp ce intrarea vine de la `base64 -d`, ieșirea este trimisă înapoi neafectată, așa cum este scris în comentariu.
hyogy avatar
drapel us
Am postat întrebarea relativă dacă vă interesează (: https://serverfault.com/questions/1070792/bidirectional-communication-unidirectional-decode
A.B avatar
drapel cl
A.B
Tocmai ai rescris o problemă XY, în timp ce eu am dat deja răspunsul în comentarii. Comentariul meu a spus că funcționează bidirecțional în cele din urmă. Scuze daca nu asta am scris in comentariul anterior.
hyogy avatar
drapel us
Am găsit soluția perfectă, verifică întrebarea dacă vrei!(:

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.