UDP 패킷의 내용을 기반으로 작업을 수행하는 스크립트입니까?

UDP 패킷의 내용을 기반으로 작업을 수행하는 스크립트입니까?

포트 2088에서 브로드캐스트되는 UDP 패킷을 수신하고 데이터를 읽은 다음 URL에 POST하는 스크립트를 작성하려고 합니다. 특히 호출할 때 LIFX 표시등이 빨간색으로 바뀌도록 노력하고 있습니다. 전화기의 상태가 변경될 때마다(오프훅, 온훅, 벨 울림 등) UDP 2088에서 상태를 브로드캐스트합니다.

따라서 의사코드는 다음과 같습니다.

Start Loop
Listen for UDP 2088 from source [my phone]
If data = [x] then send command to turn on lamp
else if data = [y] send command to turn off lamp

가장 큰 문제는 실제로 패킷에서 데이터를 가져오는 방법을 잘 모르겠다는 것입니다. Wireshark에서는 읽을 수 있지만 netcat 등을 실행하면 읽을 수 없는 출력이 나타납니다.

$ netcat -u -l 2088 -vv는
0.0.0.0에 바인딩됨 2088은
192.168.250.51
^C5 에서 연결 2088을 수신함

감사해요!

답변1

UDP 패킷 후에 종료하는 유일한 방법은 netcat바쁜 루프와 시간 초과를 사용하는 것입니다.

while :
do
    data=$(nc -u -l -p 2088 -w 1 </dev/null 2>/dev/null)
    [ -n "$data" ] && printf "%s\n" "$(printf "%s" "$data" | hex)"
done

이 유형의 코드로 가려움증을 긁어보세요.

echo hello | nc -q 1 -w 1 -u "$listeningHost" 2088

최소한 두 가지 버전을 netcat사용할 수 있습니다. 이 예는 확실히 작동합니다전통적인;아직 테스트해보진 않았습니다오픈BSD. 단일 호스트에서 테스트하지 마십시오. 이를 위해서는 실제로 두 개의 연결된 호스트가 필요합니다.

관련 정보