根据 UDP 数据包的内容执行操作的脚本?

根据 UDP 数据包的内容执行操作的脚本?

我正在尝试编写一个脚本来侦听端口 2088 上广播的 UDP 数据包,读取数据,然后 POST 到 URL。具体来说,当我打电话时,我试图让 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 收到连接 2088
^C5

谢谢!

答案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。不要在单个主机上进行测试 - 为此您确实需要两台连接的主机

相关内容