나는이 가까운 것 같다 netcat을가 UDP 트래픽을 수신 중지 - - 리눅스 슈퍼 사용자 ,하지만 난 더 나은 어쨌든 물어 줄 알았는데
netcat 버전 까지는 Ubuntu 11.04와 그 기본값 netcat
을 사용하고 있습니다 openbsd
.
$ nc
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]
이것은 내가 이상하게 생각하는 것입니다. 첫 번째 경우는 예상대로 작동합니다. 한 터미널에서 UDP 서버를 엽니 다.
$ sudo nc -ul 5000
... 그리고 다른 터미널에서 새로운 UDP 클라이언트 연결을 시작합니다. 그리고 hello
세 번 입력 한 후 Enter 키를 누릅니다.
$ nc -u 127.0.0.1 5000
hello
hello
hello
^C
... 그리고 서버 터미널로 돌아가서 hello
예상대로 세 번 인쇄 되었습니다.
$ sudo nc -ul 5000
hello
hello
hello
^C
지금까지는 모든 것이 예상대로 작동합니다. 그러나 입력을 클라이언트에 파이핑하여 지금 동일하게 시도한다고 가정 해 봅시다. 따라서 먼저 한 터미널에 UDP 서버를 설정하십시오.
$ sudo nc -ul 5000
... 그리고 다른 하나에서는 일부 데이터를 nc
UDP 클라이언트 로 파이프합니다 .
$ echo hello | nc -u 127.0.0.1 5000
hello
hello
^C
... 클라이언트 명령 후에 쉘 입력은 입력을 기다리는 것처럼 정지합니다. 따라서 입력 hello
하고 ENTER를 두 번 더 누릅니다. 그러나 서버는 첫 번째 hello
(파이프를 통해 파이프 됨 echo
) 만 등록했습니다 . 또한 Ctrl-C를 누르고 클라이언트 echo hello | nc -u 127.0.0.1 5000
명령 을 반복하려고해도 서버는 여전히 첫 번째보고 만 유지합니다 hello
.
$ sudo nc -ul 57130
hello
^C
... Ctrl-C를 사용하여 서버를 중지하고 다시 시작한 후에 만 클라이언트 echo hello | nc -u 127.0.0.1 5000
명령을 반복하고 작동하는 것을 관찰 할 수 있습니다.
이 방법 nc
으로 동작합니까? echo hello | nc -u 127.0.0.1 5000
서버를 다시 시작할 필요없이 적어도 반복 된 호출 이 등록 될 것으로 예상 합니까? 아니면 그런 종류의 행동을위한 특별한 명령 줄 스위치가 있습니까?
편집 : 나는이 좋은 PDF 프레젠테이션 발견 socat - 소켓의 모든 종류를 취급 , 다음이 포함되어 netcat
대 socat
노트 :
netcat-제한 사항
● 원샷 만 (소켓을 닫은 후 종료)
...
예 1 : netcat 교체
...
● 소스 포트가있는 UDP 클라이언트 :
nc -u -p 500 1.2.3.4 500
socat-udp : 1.2.3.4 : 500, sp = 500
● TCP 서버 :
nc -l -p 8080
socat-tcp-l : 8080, reuseaddr
...
...하지만 서버 명령을 " socat - udp4-listen:5000,reuseaddr
"로 바꾸고 클라이언트 줄을 " socat - udp:127.0.0.1:5000
"로 바꾸면 파이프 입력, " echo hello | socat - udp:127.0.0.1:5000
"으로 유일한 차이점은 여기서는 적어도 단어 hello
가 전송 된 후에 명령이 존재 하지만 서버가 다시 시작될 때까지이 명령을 연속적으로 실행해도 서버에서 수신이 발생하지 않습니다.
cat $(echo -e "hello\nhello\nhello\n" > tmpf; echo tmpf) | nc -u 127.0.0.1 5000
") 나는 세 가지를 참조 할 때, 그러나,hello
들, 걸 퍼즐 여전히 존재하는이 명령에 너무 종류의 것 "잠금", 것처럼에서 입력 된 입력을 대기 Ctrl-C를 다시 실행 한 후 서버를 다시 시작할 때까지 데이터가 표시되지 않습니다! 그것이 내가 더 잘 알고 싶은 것입니다-건배!