Netcat UDP 서버가 응답을 보내지 않습니다

Netcat UDP 서버가 응답을 보내지 않습니다

저는 OpenBSD netcat이 특정 포트(3333)와 인터페이스(10.42.0.1)에서 UDP 연결을 수신하고 고정된 응답을 보내도록 하려고 합니다. 이를 달성하기 위해 나는 다음을 수행합니다.

echo "asd" | nc -k -u -l -p 3333 -s 10.42.0.1 -v

그런 다음 다음을 수행하여 메시지를 보냅니다.

echo qwe | nc -u 10.42.0.1 3333 -v

출력은 다음과 같습니다

# Server side
Bound on h9ct3d3 3333
XXXXXqwe

# Client side
Connection to 10.42.0.1 3333 port [udp/*] succeeded!

보시다시피 클라이언트는 asd. 그러나 을 제거하면 -k수신됩니다.

##### Server side
echo "asd" | nc -u -l -p 3333 -s 10.42.0.1 -v
Bound on h9ct3d3 3333
# ...
# Wait for the client to execute
# ...
Connection received on h9ct3d3 51318
XXXXXqwe

##### Client side
echo qwe | nc -u 10.42.0.1 3333 -v
# ...
# Wait for the above 'X'to finish
# ...
Connection to 10.42.0.1 3333 port [udp/*] succeeded!
asd

를 사용하지 않고 while 루프를 사용하려고 했지만 -k결코 nc반환되지 않습니다.

#!/bin/bash

while true
do
    echo "Host message" | nc -q 0 -u -l -p 3333 -s 10.42.0.1 -v
    echo "restarting..."
done

이 작업을 어떻게 수행할 수 있나요?

내 netcat 버전은 다음과 같습니다.

OpenBSD netcat (Debian patchlevel 1.206-1ubuntu1)

PD. 서버 는 왜 nc이상한 X문자를 '보내는' 걸까요? 클라이언트는 결코 읽지 않고 단지 완료될 때까지 기다립니다. 1초마다 표시되는 것 같습니다.

답변1

서버가 X를 보내지 않습니다. 클라이언트는 처음 두 개 이후 1초 간격으로 이를 보내고 서버는디스플레이(그렇게 해야 합니다). 벗으면-v고객, X는 전송되거나 표시되지 않으며 데이터는 즉시 전송되어 표시됩니다(3초 이후가 아님). 나는 단서가 없다 -v'천천히 5개의 문자를 보내세요'를 의미합니다!

맨 페이지는 다음과 같이 -k말합니다.

-u 옵션과 함께 사용하면 서버 소켓이 연결되지 않으며 여러 호스트로부터 UDP 데이터그램을 수신할 수 있습니다.

이에 따라 서버는 를 사용할 때는 -v로그를 기록 하지만 . 나Connection from {host} {port} received!-ul-ulk의심하다'응답' 데이터를 보내는 코드는 연결된 소켓에 의존하므로 연결되지 않은 상태로 두면 응답이 방지되지만 확인하기 위해 소스를 파헤치지는 않았습니다.

-q 0TCP(FIN 교환)에는 있지만 UDP에는 감지 가능한 '연결 종료'가 없기 때문에 작동하지 않습니다. 클라이언트 데이터에 대해 인식할 수 있는 것이 있는 경우(예 : 항상 한 줄인 경우) 논리적으로 해당 데이터를 인식하고 프로세스를 종료하여 루프가 반복되도록 하는 head -1항목을 작성하는 것이 가능해야 합니다 . 그러한 인식기/킬러가 사용할 수 있는 ncpid를 얻는 깔끔한 방법을 찾을 수 있었습니다 . nc다른 사람이 여기서 실제 솔루션을 제공할 수 있는 경우를 대비해 CW를 만듭니다.

관련 정보