V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
smallgoogle
V2EX  ›  Python

UDP 广播的技术型问题

  •  
  •   smallgoogle · 2018-12-12 05:09:42 +08:00 · 2997 次点击
    这是一个创建于 2203 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很多智能设备都可以 UDP 广播配网,比如微信的 airkiss 功能;
    我想问如何在电脑上发送一个 2.4G 的 wifi UDP 广播。
    我大概觉得 airkiss 是用手机端的某些功能开进行 UDP 广播的。
    那么如何在电脑上用自己的无线网卡实现一个 UDP 广播,让别的智能设备能接收到呢?
    16 条回复    2018-12-12 14:43:50 +08:00
    paradislover
        1
    paradislover  
       2018-12-12 05:19:02 +08:00 via Android
    参考 smart configure
    cnnblike
        2
    cnnblike  
       2018-12-12 05:21:35 +08:00
    了解下 avahi 和 zeroconf、bonjour
    jimzhong
        3
    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
        4
    goofool  
       2018-12-12 09:29:29 +08:00 via Android
    pyrhon scapy
    ttvast
        5
    ttvast  
       2018-12-12 11:23:37 +08:00   ❤️ 1
    首先,wifi 通讯是加密的,所以被设置设备无法通过监听 wifi 数据来获得 wifi 密钥的配置(不考虑暴力破解)。
    但是,wifi 通讯协议无非是一个二层的无线通讯协议, 也就是在标准 ip 数据包加密之后加一些包头。所以作为被设置设备可以监听到所有的通讯数据包, 并且可以明确两个数据特征:1 发包者的地址(固定) 2 包长(与原始 ip 包长线性相关)。 这样,类似 airkiss 的协议就可以通过载波的方式,将 ssid 和密钥编码到 udp 包长中,被设置设备就可以通过包长序列来解码出 ssid 和密钥。
    这种方式在 wifi 通讯复杂的环境下容易受到干扰,并不是每次都可以成功。实际上应用表现也是如此, 我经常会发现配置不上或者要配置很长时间。

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

    /t/183822
    smallgoogle
        7
    smallgoogle  
    OP
       2018-12-12 11:28:30 +08:00
    @goofool 这是局域网扫描。我需要的是对外部发送一个类似 WIFI 信号的广播。
    smallgoogle
        8
    smallgoogle  
    OP
       2018-12-12 11:29:08 +08:00
    @also24 你研究出来了么?
    smallgoogle
        9
    smallgoogle  
    OP
       2018-12-12 11:29:22 +08:00
    @paradislover 我想的是有没有 python 可以实现的。
    icop
        10
    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
        11
    also24  
       2018-12-12 11:47:33 +08:00
    @smallgoogle #8
    没看我的回复?我以为我已经讲的很清楚了

    q397064399
        12
    q397064399  
       2018-12-12 11:53:38 +08:00
    @icop #10 这个排版 看得真心累
    also24
        13
    also24  
       2018-12-12 11:57:28 +08:00
    BTW:
    楼主请仔细看 5 楼的回复,他回复的内容,对实现这个功能很重要。
    这个功能并不是一个简单的 “ UDP ” 通信问题,而是如何巧妙的构造携带有数据的 “二层帧” ,至于 UDP,那只是构造这个帧的 “副产品” 而已。
    also24
        14
    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
        15
    paradislover  
       2018-12-12 13:04:28 +08:00 via Android
    @smallgoogle 你要搞懂原理,Python 实现不是分分钟的事情
    smallgoogle
        16
    smallgoogle  
    OP
       2018-12-12 14:43:50 +08:00
    @also24 就是没看懂。 - -
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:40 · PVG 06:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.