![Netcat을 사용한 UDP를 통한 단방향 통신](https://linux55.com/image/91698/Netcat%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%9C%20UDP%EB%A5%BC%20%ED%86%B5%ED%95%9C%20%EB%8B%A8%EB%B0%A9%ED%96%A5%20%ED%86%B5%EC%8B%A0.png)
저는 다수의 "스마트" 장치가 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
. nc
BSD를 사용하는 Ubuntu 22.04에서 전체 명령 :
nc -d -l -q 0 -u 127.0.0.1 8123
stderr를 통한 디버깅을 위해 추가되었습니다 -v
.