實現upnp ssdp來查詢區域網內的其他節點

2022-08-24 03:18:11 字數 923 閱讀 6547

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

使用分頁查詢外掛程式來實現模糊查詢

最近在寫乙個分布式的專案,虛心學習,一起進步。我們知道分頁查詢資料然後展示是乙個很常見的功能,這裡我們不考慮使用前端框架提供的分頁外掛程式,我們使用乙個叫pagehelper的工具 com.github.pagehelpergroupid pagehelperartifactid version d...

區域網IP查詢

1.linux區域網ip查詢 nmap sp 192.168.1.0 24 查詢192.168.1段內可ping通的所有ip並列印到螢幕上,還有很多引數,具體如下 il 從主機 網路列表中輸入 ir 選擇隨機目標 exclude 排除主機 網路 excludefile 從檔案中排除列表 host d...

python基於UDP廣播實現查詢區域網伺服器

udp廣播案例 傳送端 from socket import import time 設定目標位址 dest 192.168.31.255 9999 192.168.31是我的網段,255代表任意ip s socket af inet,sock dgram s.setsockopt sol sock...