实现upnp ssdp来查找局域网内的其他节点

news/2024/11/28 9:26:32/

upnp协议常用于一些智能家居产品中,这些产品连上家里局域网后,用同样连入家中局域网的手机就能很快检测到此产品了。在区块链技术中,upnp也被应用于寻找同一局域网内的其他节点。

 

关于upnp的具体描述,这篇文章有很好的介绍,Exploring UPnP with Python,欢迎移步查看。我在这里粗略的介绍下。upnp里面有好几种具体的实现方式,这里介绍下用的最多的ssdp。ssdp一般有服务器端和客户端。服务器端会使用udp监听端口1900的广播信息,如果信息里面有“M-SEARCH”开头的字段,就会回复自己的产品信息,也就是被找到了。而客户端程序就会在局域网内发送端口1900的udp广播信息,来寻找服务器。具体到区块链中,一个节点实例既运行ssdp的服务器程序,也运行ssdp的客户端程序,这样这个节点既能找到局域网内的其他节点,也能被其他节点找到。

 

在用到upnp的时候还有个功能常被用到,就是nat port forwarding,把局域网内的本地端口绑定到路由器上的端口,使运行在局域网内的程序能够转化为在公网上能够互相通信的程序了。这样,互联网上的其他的节点就能根据节点列表主动连接处于局域网内的节点了。它的代码基本逻辑是处于局域网内的程序首先使用upnp协议寻找到局域网的路由器,然后这个路由器必须要有nat port forwarding的功能,然后程序就能调用路由器的这个功能,把本地端口绑定到路由器的外部端口。

 

我根据文章实现了一个ssdp的python程序,tw7613781/ssdp_upnp,也上传到了pypi,大家使用下面命令就能按照包文件,使用这个程序。考虑到他们是会阻塞线程的,在具体实现的时候,我让这两个class都继承了thread.Threading类,让他俩跑到自己的子线程去,然后使用线程安全的python内置queue来通信。既客户端类找到其他节点后把节点ip,port信息写到queue里,然后主线程能在queue读到这个信息,然后进行自己的业务逻辑。

pip install ssdp-upnp

转载于:https://www.cnblogs.com/wtang/p/10010537.html


http://www.ppmy.cn/news/350492.html

相关文章

UPNP协议细节(转)

UPNP协议细节(转) UPNP的全称是 Universal plug-and-play( 通用即插即用).UPnP 是针对智能家电、无线设备以及各种外观尺寸的个人电脑的普遍对等(peer-to-peer)网络连接而设计的一种架构。它旨在为家庭、小型企业、公共场所中或连接到互联网的ad-hoc 网或…

比特彗星端口堵塞解决办法DMZ-端口转发-异常解决

如果遇到比特彗星右下角显示黄灯,显示端口堵塞,可以在路由器中进行开启端口转发或者DMZ(每个路由器说法有可能不一样) 如果只是一台设备进行端口转发,这样就可以完成了,或者使用简单的方法,开启…

UPNP协议

本文转自:http://www.cnblogs.com/semo/archive/2008/07/21/1247950.htmlUPNP的全称是 Universal plug-and-play( 通用即插即用).UPnP 是针对智能家电、无线设备以及各种外观尺寸的个人电脑的普遍对等(peer-to-peer)网络连接而设计的一种架构…

UPNP端口映射全过称

UPNP的全称是 Universal plug-and-play( 通用即插即用).UPnP 是针对智能家电、无线设备以及各种外观尺寸的个人电脑的普遍对等(peer-to-peer)网络连接而设计的一种架构。它旨在为家庭、小型企业、公共场所中或连接到互联网的ad-hoc 网或未管理网络提供易…

MirrorLink(三 UPNP)-- 使用

1、使用libupnp,首先发现设备: 可以获取到一些信息: ApplicationServer相关信息: serviceType : urn:schemas-upnp-org:service:TmApplicationServer:1 serviceId : urn:upnp-org:serviceId:TmApplicationServer1 SCPDURL : h…

UPNP编程要点

UPNP编程 安装SDK相对比较简单,参考阅读SDK目录下的README 我使用命令如下: tar jxvf libupnp-1.6.17.tar.bz2 cd libupnp-1.6.17/ ./configure --prefix/home/momo/DLNA --enable-sample make make install 这样在/home/momo/DLNA目录下就可以…

CTF Crypto --- orz!

文章目录 题目解题过程 题目 from Crypto.Util.number import * from gmpy2 import *flag bxxx t len(flag)//3 part1 bytes_to_long(flag[:t]) part2 bytes_to_long(flag[t:2*t]) part3 bytes_to_long(flag[2*t:]) q getPrime(1024) p next_prime(q) n p * qo getPr…

UPnP实现中的常见脆弱性与风险分析

UPnP 协议栈的脆弱性 与风险分析 由于 UPnP 协议栈包含的协议较多,在实现过程中,容易存在脆弱性。而在 UPnP 工作流程的六个 阶段中,发现、描述、控制三个阶段出现过比较严重的脆弱性问题。这些脆弱性广泛存在于支持 UPnP 技术的物联网 设备…