UDP 广播的技术型问题

2018-12-12 05:09:42 +08:00
 smallgoogle
很多智能设备都可以 UDP 广播配网,比如微信的 airkiss 功能;
我想问如何在电脑上发送一个 2.4G 的 wifi UDP 广播。
我大概觉得 airkiss 是用手机端的某些功能开进行 UDP 广播的。
那么如何在电脑上用自己的无线网卡实现一个 UDP 广播,让别的智能设备能接收到呢?
2995 次点击
所在节点    Python
16 条回复
paradislover
2018-12-12 05:19:02 +08:00
参考 smart configure
cnnblike
2018-12-12 05:21:35 +08:00
了解下 avahi 和 zeroconf、bonjour
jimzhong
2018-12-12 08:29:46 +08:00
LZ 可以看一下[这篇文章]( http://www.microhowto.info/howto/send_a_udp_datagram_in_c.html),尤其是其中的 Sending to the IPv4 broadcast address 节。
goofool
2018-12-12 09:29:29 +08:00
pyrhon scapy
ttvast
2018-12-12 11:23:37 +08:00
首先,wifi 通讯是加密的,所以被设置设备无法通过监听 wifi 数据来获得 wifi 密钥的配置(不考虑暴力破解)。
但是,wifi 通讯协议无非是一个二层的无线通讯协议, 也就是在标准 ip 数据包加密之后加一些包头。所以作为被设置设备可以监听到所有的通讯数据包, 并且可以明确两个数据特征:1 发包者的地址(固定) 2 包长(与原始 ip 包长线性相关)。 这样,类似 airkiss 的协议就可以通过载波的方式,将 ssid 和密钥编码到 udp 包长中,被设置设备就可以通过包长序列来解码出 ssid 和密钥。
这种方式在 wifi 通讯复杂的环境下容易受到干扰,并不是每次都可以成功。实际上应用表现也是如此, 我经常会发现配置不上或者要配置很长时间。

以上纯属猜测,但是理论完全可行。
also24
2018-12-12 11:25:54 +08:00
放个多年前的回复,当时研究的是庆科的 easylink

/t/183822
smallgoogle
2018-12-12 11:28:30 +08:00
@goofool 这是局域网扫描。我需要的是对外部发送一个类似 WIFI 信号的广播。
smallgoogle
2018-12-12 11:29:08 +08:00
@also24 你研究出来了么?
smallgoogle
2018-12-12 11:29:22 +08:00
@paradislover 我想的是有没有 python 可以实现的。
icop
2018-12-12 11:42:46 +08:00
首先,你对计算机基本知识了解不够啊。
你先了解下 Socket。我给你找了一篇:
https://www.cnblogs.com/LUO77/p/5801977.html

只要 ping 的通,理论上都可以进行 UDP 或者 TCP 的 Socket 通信。

UDP 还包括 单播,广播,多播。也给你找了一篇。
https://www.cnblogs.com/lidabo/p/5865045.html

正常的处理一般都是 服务器(就是你电脑),做广播处理。广播内容中包含了主机 IP 地址,端口等相关信息。
客户机网段内搜寻,搜寻到后,解析信息,与服务器进行 TCPSocket 通讯。当然你也可以用 UDPSocket 进行单个管理。
also24
2018-12-12 11:47:33 +08:00
@smallgoogle #8
没看我的回复?我以为我已经讲的很清楚了

q397064399
2018-12-12 11:53:38 +08:00
@icop #10 这个排版 看得真心累
also24
2018-12-12 11:57:28 +08:00
BTW:
楼主请仔细看 5 楼的回复,他回复的内容,对实现这个功能很重要。
这个功能并不是一个简单的 “ UDP ” 通信问题,而是如何巧妙的构造携带有数据的 “二层帧” ,至于 UDP,那只是构造这个帧的 “副产品” 而已。
also24
2018-12-12 12:12:24 +08:00
再次强调,这个问题本质上并不是一个 “ UDP 广播” 的问题。
你需要研究的是二层的数据帧,而不是 UDP 协议。

关于 airkiss,网上也是有一些分析文章的,简单看一下就可以发现,它仍然是基于对二层帧的修改的:
https://blog.csdn.net/flyingcys/article/details/50248537

>在实际应用中,我们采用 UDP 广播包作为信息的载体。信息发送方向空间中发送一系列的 UDP 广播包,其中每一包的长度(即 Length 字段)都按照 Air Kiss 通信协议进行编码,信息接收方利用混杂模式监听空间中的无线信号,并从数据链路层截取 802.2 SNAP 格式数据包,便可得到已编码的 Length 字段,随后接收方便可根据 Air Kiss 通信协议解析出需要的信息。
paradislover
2018-12-12 13:04:28 +08:00
@smallgoogle 你要搞懂原理,Python 实现不是分分钟的事情
smallgoogle
2018-12-12 14:43:50 +08:00
@also24 就是没看懂。 - -

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/516716

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX