Czy mogę potokować / przekierowywać aplikację konsoli za pomocą netcat, aby można było z niej korzystać zdalnie?

10

Czy jest możliwe „” rury instancji aplikacji konsoli poprzez netcata, więc netcat nasłuchuje dla nowego połączenia i przekierowuje stdini stdoutprzez połączenie sieciowe.

jammmie999
źródło
tak, ale może to być jedna wkładka, co jest w porządku, rury są takie. Nie wiem, czy możesz powiedzieć nc i potok do już działającej instancji za pomocą pid. możesz nc do ip i potokować to do nc, który nasłuchuje i potokować to do nc, który nasłuchuje itp. i potokować to do nc do ip.
barlop
Zmieniłem tytuł, ponieważ to, o czym wspominasz, bardziej przypomina przekierowanie wejścia / wyjścia niż użycie potoku (który dotyczy tylko przenoszenia wyjścia jednego procesu na wejście innego).
Przełom
@Breakthrough czym to się różni od rur? skoro mówi o przekierowaniu IO, a nie o plikach, czym różni się od pipingu?
barlop
Przekierowanie We / Wy @barlop ( <lub >) znacznie różni się od piping ( |), chociaż czasami można osiągnąć równoważną operację, używając kombinacji obu. Ponownie jednak dzięki przekierowaniu wejścia / wyjścia możesz zmienić lokalizację obu strumieni; potokowanie po prostu przekierowuje standardowe wyjście jednego procesu na standardowe wejście innego procesu.
Przełom
@Breakthrough zobacz, o co cię prosiłem. > i <oczywiście różnią się od pipingu, ponieważ <i> używają plików. Ale on nie mówi o plikach. Zapytałem cię: „czym to [przekierowanie IO] różni się od potoków?
Skoro

Odpowiedzi:

16

Cóż, jak udokumentowano w Wikipedii i netcatdokumentacji, istnieje -eopcja, która powoduje, że spawnuje ( e xecute) program po otrzymaniu połączenia, podłączając gniazdo do stdin, stdout i stderr procesu. Przykładowe użycie:

nc -l -pnumer_portu -enazwa_programu

Przykłady często pokazują /bin/shlub bashsą używane jako nazwa_programu . Nie zaleca się korzystania z tej opcji, ponieważ w zasadzie otwiera ona anonimowy, pozbawiony hasła portal dostępu do komputera. Oczywiście można to złagodzić, stosując program o mniejszej mocy niż powłoka (taka, która nie ma możliwości ucieczki do powłoki), minimalizując użycie jej i utrzymując ją w tajemnicy. Niemniej jednak pierwotni twórcy netcatpoczuli się na tyle mocno, że ta opcja była złym pomysłem, że domyślnie ją wyłączyli i uwarunkowali ją w opcji kompilacji „GAPING_SECURITY_HOLE”. Zostało to krótko wspomniane w tym samouczku NetCat i innej netcatdokumentacji.

Wyszukiwarka Google doprowadziła mnie do dyskusji na ten temat w innych witrynach Stack Exchange: przepełnienie stosu i awaria serwera . Wielu współautorów zaoferowało następującą technikę zrobienia tego samego bez korzystania z -eopcji (tj. W wersji, netcatktóra ma -ewyłączoną opcję):

Na serwerze:
mkfifonazwa_rurki
nc -l -pnumer_portu <nazwa_rurki   | nazwa_programu >nazwa_rurki

Na kliencie:
nc server_machine_name  numer_portu

Kilka uwag:

  • W niektórych wersjach netcat, -limplikuje -p, więc należy powiedzieć tylko -l, a następnie numer portu.
  • Możesz zawinąć swoje rozwiązanie w while truepętlę.
Scott
źródło