Chcę, aby serwer echa UDP pobierał pakiety i odpowiadał dokładnie na to, co otrzymał. Jak mogę to zrobić za pomocą netcat
lub socat
? Powinien pozostać przy życiu na zawsze i obsługiwać pakiety pochodzące z kilku hostów.
Chcę, aby serwer echa UDP pobierał pakiety i odpowiadał dokładnie na to, co otrzymał. Jak mogę to zrobić za pomocą netcat
lub socat
? Powinien pozostać przy życiu na zawsze i obsługiwać pakiety pochodzące z kilku hostów.
Odpowiedzi:
Kolejnym narzędziem podobnym do netcat jest wersja nmap ncat
, która ma wiele wbudowanych gadżetów upraszczających takie rzeczy. To by działało:
ncat -e /bin/cat -k -u -l 1235
-e oznacza, że wykonuje polecenie / bin / cat (aby powtórzyć to, co wpisujesz)
-k oznacza utrzymanie przy życiu, że nasłuchuje po każdym połączeniu
-u oznacza udp
-l 1235 oznacza, że nasłuchuje na porcie 1235
Kiedyś socat -v PIPE udp-recvfrom:5553,fork
działałem na serwerze i socat - udp:localhost:5553
dla klientów.
To była świetna pomoc!
socat TCP4-LISTEN:2000,fork EXEC:cat
Możesz także użyć socat (zamiast netcat) jako serwera echa i netcat jako klienta.
Serwer echa Socat (nasłuchuje na porcie TCP 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Klient Netcat (łączy się z serverip na porcie TCP 1234):
nc serverip 1234
Możesz napisać program C, który rozwidla, nc -u -l -p 4321
a następnie używa dup (2) do połączenia:
Następnie w nieskończonej pętli rodzic czyta ze standardowego wejścia i zapisuje na standardowym ekranie wszystko, co czyta rodzic.
socat -v PIPE UDP-LISTEN:5555,fork
, ale drugie połączenie zostanie odrzucone. Nawiasem mówiąc, działa dobrze z TCP-LISTEN.
Jeśli pracujesz w systemie Windows i używasz środowiska uniksowego, takiego jak cygwin, netcat migth nie podaje parametru -e. Dla mnie to zadziałało.
netcat
rozwiązanie wstępnie zainstalowane w Ubunutu
netcat
Preinstalowany w Ubuntu 16.04 pochodzi netcat-openbsd
i nie ma -c
opcji, ale ręczny daje rozwiązanie:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
Następnie przykład klienta:
echo abc | netcat localhost 8000
DO ZROBIENIA: jak zmodyfikować wartość ciągu wejściowego? Poniższe nie zwraca żadnej odpowiedzi:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
Przykład powłoki zdalnej działa jednak:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
Jednak nie wiem jak sobie radzić z równoległymi żądaniami.