[udp] netcat으로 UDP 패킷을 하나만 보내는 방법은 무엇입니까?

UDP 패킷에 짧은 값을 하나만 보내고 싶지만 명령을 실행합니다.

echo -n "hello" | nc -4u localhost 8000

서버가 hello 항목을 받고 있음을 알 수 있지만 netcat 명령을 종료하려면 Ctrl+ c를 눌러야 합니다.

Hello 를 보낸 후 어떻게 종료 할 수 있습니까?


죄송합니다. 맨 페이지를 다시 읽고 -q옵션을 찾았습니다 .

 echo -n "hello" | nc -4u -q1 localhost 8000

작동합니다 (1 초 후에 종료 됨).

어떤 이유로 -q0.



답변

bash를 사용하는 경우 다음과 같이 작성하는 것이 좋습니다.

echo -n "hello" >/dev/udp/localhost/8000

그리고 netcat의 모든 특이성과 비 호환성을 피하십시오.

이것은 또한 다른 호스트로의 전송도 작동합니다. 예 :

echo -n "hello" >/dev/udp/remotehost/8000

이것은 파일 시스템의 “실제”장치가 아니라 bash “특수” 별칭 입니다. Bash 매뉴얼 에 추가 정보가 있습니다 .


답변

-q1내 netcat 에서 옵션을 찾지 못했습니다 . 대신 -w1옵션을 사용했습니다 . 다음은 udp 패킷을 호스트 및 포트로 보내기 위해 수행 한 bash 스크립트입니다.

#!/bin/bash

def_host=localhost
def_port=43211

HOST=${2:-$def_host}
PORT=${3:-$def_port}

echo -n "$1" | nc -4u -w1 $HOST $PORT


답변

현재 netcat (v0.7.1)에는 -c 스위치가 있습니다.

-c, --close                close connection on EOF from stdin

그 후,

echo "hi" | nc -cu localhost 8000

트릭을해야합니다.


답변

Netcat은 개행마다 하나의 패킷을 보냅니다. 그래서 당신은 괜찮습니다. 더 복잡한 작업을 수행하면 다른 작업이 필요할 수 있습니다.

나는 이것을 깨달았을 때 Wireshark를 속이고 있었다. 도움이되는지 모르겠습니다.


답변

나는 같은 문제가 있었지만 -w 0옵션을 사용 하여 하나의 패킷 만 보내고 종료했습니다. 다음 명령을 사용해야합니다.

echo -n "hello" | nc -4u -w0 localhost 8000


답변