Python发送UDP数据包未收到安防摄像头响应问题排查
问题分析与解决
核心差异:发送的数据内容不同
你用echo 'a' | nc -u ...时,echo默认会在输出的字符串末尾加上换行符(\n),实际发送给摄像头的是a\n(字节形式为b'a\x0a');但你的Python脚本只发送了b'a',缺少这个换行符。很多设备的UDP服务会以换行符作为数据结束的标识,没有的话就不会触发回复逻辑。验证方法
在终端执行echo -n 'a' | nc -u 192.168.1.100 37810测试(-n参数让echo不添加换行),如果摄像头也不回复,就可以确认是换行符的问题。修改后的Python脚本
import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # 添加换行符,和echo默认行为对齐 s.sendto("a\n".encode(), ("192.168.1.100", 37810))额外排查点
如果加了换行还是没反应,可以用tcpdump抓包对比两次发送的数据包内容,确认是否还有其他差异(比如数据包长度、校验等);另外也可以尝试给socket绑定一个固定端口,避免临时端口被防火墙拦截,但这种情况概率较低,因为tcpdump已经显示发送成功。
内容的提问来源于stack exchange,提问作者Rodrigo Gusso
相关产品推荐
相关产品推荐

