upnp的ssdp服务器和客户端
ssdp-upnp的Python项目详细描述
SSDP_upnp
简介
acticle Exploring UPnP with Python 提供了对upnp的非常好的理解。ssdp是它的实现之一。
该包包括 3个单独的类 、ssdp服务器、ssdp客户端、nat upnp类。前两个类继承自类threading.thread类,因此两个类实例运行在自己的单个线程上。它们不会阻塞主线。在ssdp客户机找到具有相同产品名的对等机之后,它可以通过 queue与主线程通信。NAT UPNP类在主线程上运行,因此它不会阻塞I/O,它只搜索LAN GDI(具有UPNP NAP转发功能的路由器),并将内部端口与外部端口绑定。
服务器的逻辑是用1900端口监听广播地址。如果收到“m-search”消息,它将响应其服务信息。客户端只需发送一条带有“m-search”的广播消息,即可获取服务器的服务信息。
该软件包可用于局域网环境中对等点相互查找的区块链解决方案中。
API
服务器类
run()
:在主线程中运行带有I/O阻塞的服务器
start()
:在I/O非阻塞的其他线程中运行服务器
stop()
:停止服务器
客户
run()
:在主线程中运行带有I/O阻塞的客户机
start()
:在I/O非阻塞的其他线程中运行客户机
stop()
:停止客户端
NAT
addportforward(内部端口,外部端口)
:在主线程中运行函数。如果绑定失败,则返回无;如果绑定成功,则返回元组(外部IP、外部端口)。
removeportforward(外部端口)
:在主线程中运行函数。如果成功则返回true,如果失败则返回false。
示例
pip install ssdp-upnp
import sys
from ssdp_upnp.ssdp import Server, Client, Nat
from ssdp_upnp.ssdp import gen_logger
from queue import Queue
logger = gen_logger('sample')
if __name__ == '__main__':
try:
if sys.argv[1] == 'server':
upnpServer = Server(8048, 'blockchain', 'main')
upnpServer.start()
elif sys.argv[1] == 'client':
queue = Queue()
upnpClient = Client('blockchain', 'main', queue)
upnpClient.start()
logger.info(queue.get())
elif sys.argv[1] == 'nat':
nat = Nat()
print(nat.addPortForward(8011, 8015))
else:
logger.warning('need params server or clinet')
except Exception as e:
logger.error(e)