답변:
bash를 사용하는 경우 다음과 같이 작성하는 것이 좋습니다.
echo -n "hello" >/dev/udp/localhost/8000
그리고 netcat의 모든 특이성과 비 호환성을 피하십시오.
이것은 또한 다른 호스트로의 전송도 작동합니다. 예 :
echo -n "hello" >/dev/udp/remotehost/8000
이것은 파일 시스템의 "실제"장치가 아니라 bash "특수" 별칭 입니다. Bash 매뉴얼 에 추가 정보가 있습니다 .
127.0.0.1
대신 사용해야 했습니다 localhost
. (예, localhost
에 /etc/hosts
있습니다.)
/dev/udp/
실제 파일이 아닙니다. 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를 속이고 있었다. 도움이되는지 모르겠습니다.
echo -n "hello\nworld" >/dev/udp/localhost/514
하면 두 줄을 얻을 수 있습니다
-q seconds: after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.