Netcat을 사용한 UDP를 통한 단방향 통신

Netcat을 사용한 UDP를 통한 단방향 통신

저는 다수의 "스마트" 장치가 UDP를 통해 나에게 데이터를 보내는 상황에 직면했습니다. 보내는 쪽에서는 아무것도 변경할 수 없습니다.

nc(또는 netcat)를 테스트 중인데 다음 사항을 통과할 수 없습니다.

종료 명령 수신:

nc -l -u 8123

테스트 전송 명령:

echo "test" | nc -u 127.0.0.1 8123

첫 번째 패킷은 잘 작동하지만 양쪽 끝이 일종의 절전 상태에 들어가는 것 같아서 CTRL다시 시도해야 합니다 C. 작동하면 수신 측에서 "계속 청취"(-k)하도록 한 다음 패킷을 처리합니다.

답변1

대답은 다음과 같습니다. netcat은 이와 같이 사용할 때 분명히 몇 가지 문제가 있습니다. socat은 솔루션을 제공합니다.

받다:

socat -u udp4-recv:8123 - 

보내다:

echo "test" | socat - udp4-sendto:127.0.0.1:8123

답변2

서버 측: nc -ul 127.0.0.1 1234- 포트 1234에서 UDP 연결을 수신합니다.

반품:nc -l 1234

클라이언트: nc -u 127.0.0.1 1234- UDP, 포트 1234를 사용하여 127.0.0.1에 연결

이제 클라이언트 측에 무언가를 입력하면 서버 측에서 이를 볼 수 있습니다. (서버 측에서 입력할 수도 있으며 클라이언트에 전송됩니다.)

이렇게 하면 echo "test" | nc -u 127.0.0.1 8123서버 측은 이전과 동일하게 유지되지만 이제 nc클라이언트의 표준 입력이 파이프 설명자에 바인딩됩니다. 키보드를 입력하면 갈 곳이 없습니다. nc파이프로부터의 입력을 기다리고 있으며 파이프는 보내야 할 모든 것을 보냈습니다. 이제 nc"동결"되었습니다.

답변3

매뉴얼 페이지에 따르면 완료 시 종료되도록 -q0플래그 를 전달해야 합니다.nc

답변4

몇 가지 DNS 관련 항목을 테스트하려고 하는데 누락된 것은 flags 입니다 -d. ncBSD를 사용하는 Ubuntu 22.04에서 전체 명령 :

nc -d -l -q 0 -u 127.0.0.1 8123

stderr를 통한 디버깅을 위해 추가되었습니다 -v.

관련 정보