我正在尝试编写一个脚本来侦听端口 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。不要在单个主机上进行测试 - 为此您确实需要两台连接的主机