UDP 에코 서버가 패킷을 가져 와서 수신 한 내용에 정확하게 응답하기를 원합니다. 어떻게 간단하게 사용하여이 작업을 수행 할 수 있습니다 netcat
또는 socat
? 영원히 살아 있어야하며 여러 호스트에서 오는 패킷을 처리해야합니다.
UDP 에코 서버가 패킷을 가져 와서 수신 한 내용에 정확하게 응답하기를 원합니다. 어떻게 간단하게 사용하여이 작업을 수행 할 수 있습니다 netcat
또는 socat
? 영원히 살아 있어야하며 여러 호스트에서 오는 패킷을 처리해야합니다.
답변:
또 다른 netcat과 같은 도구는 nmap 버전입니다.이 도구는 이와 같은 ncat
것을 단순화하기 위해 많은 내장 기능을 갖추고 있습니다. 이것은 작동합니다 :
ncat -e /bin/cat -k -u -l 1235
-e 수단이 빈 / 고양이 / 실행 (사용자가 입력 한 내용을 다시 반향)
-k 수단이 연결 유지, 그것은 각 연결 후 듣기 유지하는 것이
-u 수단 UDP
는 포트 1235에서 수신하는 -l 1235 개 수단
내가 사용하는 socat -v PIPE udp-recvfrom:5553,fork
서버와 실행하는 socat - udp:localhost:5553
클라이언트를.
이것은 큰 도움 이 되었습니다!
socat TCP4-LISTEN:2000,fork EXEC:cat
포크 nc -u -l -p 4321
한 다음 dup (2) 를 사용하여 연결 하는 C 프로그램을 작성할 수 있습니다 .
그런 다음 무한 루프에서 부모는 stdin에서 읽고 부모가 읽는 모든 것을 stdout에 씁니다.
socat -v PIPE UDP-LISTEN:5555,fork
있지만 두 번째 연결이 거부됩니다. 그건 그렇고, 그것은 TCP-LISTEN과 잘 작동합니다. 코드 작성을 피하고 있습니다. 그렇지 않으면 C로 모두 작성할 수 있습니다.
Windows에서 실행 중이고 cygwin과 같은 환경과 같은 유닉스를 사용하는 경우 netcat migth는 -e 매개 변수를 제공하지 않습니다. 이것은 나를 위해 잘 작동했습니다.
netcat
Ubunutu에 사전 설치된 솔루션
netcat
사전 설치된 우분투 16.04에은에서 온다 netcat-openbsd
, 더없는 -c
옵션을하지만, 매뉴얼 솔루션을 제공합니다 :
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
그런 다음 클라이언트 예 :
echo abc | netcat localhost 8000
TODO : 입력 문자열 값을 수정하는 방법? 다음은 응답을 반환하지 않습니다.
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
그러나 원격 쉘 예제는 작동합니다.
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
그러나 동시 요청을 간단하게 처리하는 방법을 모르겠습니다.