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

少なくとも2つのバージョンがnetcat利用可能です。この例は間違いなく動作します伝統的な;まだテストしていませんオープンBSD。単一ホストでテストしないでください。これには実際には2つの接続されたホストが必要です。

関連情報