国产人妻精品区一区二区,国产农村妇女毛片精品久久,JAPANESE日本丰满少妇,日本公妇理伦a片,射精专区一区二区朝鲜

五分鐘技術趣談 | MQTT設備接入時獲取真實IP地址的解決方案
作者 | 中移物聯2023-07-31

Part 01

● 需求背景 ●

在(zai)OneNET平臺某私(si)有化項目(mu)中,項目(mu)方的(de)(de)需(xu)求是要獲取設備真實IP地址,然后(hou)根據設備的(de)(de)IP來統計(ji)處于各個省內(nei)區域的(de)(de)設備數量展示到大(da)屏上。

Part 02

● 查找解決方案 ●

以MQTT設(she)備接(jie)入為例,由于(yu)項(xiang)目方使用的(de)外層負(fu)載(zai)是Nginx軟負(fu)載(zai),并且(qie)MQTT協議是基于(yu)TCP,只能(neng)走(zou)4層方式(shi)轉(zhuan)發報文,Nginx轉(zhuan)發報文的(de)時候會將源(yuan)TCP連接(jie)的(de)IP地(di)(di)址改寫為自己的(de)內網IP地(di)(di)址,不(bu)能(neng)像F5這種(zhong)硬(ying)負(fu)載(zai)可以直(zhi)接(jie)將設(she)備的(de)源(yuan)地(di)(di)址轉(zhuan)發到后端服務上,因此就(jiu)不(bu)能(neng)直(zhi)接(jie)通(tong)過(guo)配(pei)置Nginx的(de)方式(shi)來讓MQTT接(jie)入服務獲取到設(she)備源(yuan)IP地(di)(di)址,也就(jiu)不(bu)能(neng)實現項(xiang)目方的(de)需(xu)求(qiu)。

經(jing)過網上查詢相關解決方案(an),發現(xian)一(yi)個(ge)Internet協議(yi)叫做proxy protocl(參考資料(liao)://www.jianshu.com/p/cc8d592582c9),該協議(yi)可以通過為TCP包添加(jia)一(yi)個(ge)很小的頭信息(xi),來傳遞客(ke)戶端(duan)信息(xi)(協議(yi)棧、源IP、目的IP、源端(duan)口、目的端(duan)口等),在網絡情況復雜又需(xu)要獲(huo)取用(yong)戶真實(shi)IP時非常有用(yong)。其本(ben)質(zhi)是在三次握(wo)手結束(shu)后由代(dai)理在連接(jie)中插(cha)入了(le)一(yi)個(ge)攜帶了(le)原(yuan)始連接(jie)四元組信息(xi)的數據包。

image

proxy protocol協(xie)議流程

查閱到proxy protocol報文的格式如(ru)下圖中所(suo)示(shi),里(li)面包(bao)含了客(ke)戶端(duan)的源地址和(he)端(duan)口等信息,能夠滿足(zu)我們的需求。

image

proxy protocol報文格式

后端服務(wu)要獲取這個特殊報文也需要在Nginx上配置開(kai)啟proxy_protocol協議,如下圖中所示。

image

Nginx上配置開啟proxy_protocol協議

通過wireshark工具抓包我(wo)(wo)們也發現包結(jie)構和查閱到的資料是(shi)一致的,接下(xia)來我(wo)(wo)們要做的就是(shi)在MQTT協議(yi)解(jie)析的時(shi)候(hou)把這個特殊(shu)的包也要解(jie)析處理并保存這個客戶端的真實IP。

image

Wireshark抓proxy_protocol協(xie)議包

Part 03

● 實踐操作 ●

說干(gan)就(jiu)干(gan),我(wo)們修改MQTT接入服務的(de)源代碼是基于(yu)Netty框(kuang)架實(shi)現的(de),于(yu)是我(wo)們在(zai)編解(jie)碼的(de)時候增加了真實(shi)IP解(jie)碼器(qi),如下圖所(suo)示。

image

真(zhen)實IP解碼器

隨后(hou)(hou)我(wo)們在解碼(ma)器的(de)decode方法中,將(jiang)原始報(bao)文(wen)(wen)解析(xi)出來,判斷(duan)是(shi)否有proxy protocol報(bao)文(wen)(wen),然后(hou)(hou)解析(xi)報(bao)文(wen)(wen)并(bing)提取里面(mian)的(de)設備真實(shi)源IP地址和(he)端口,并(bing)將(jiang)之保持在Netty中的(de)ChannelAttribute上下文(wen)(wen)中,方便后(hou)(hou)續獲取。

注意(yi),這(zhe)里的proxy protocol報文和MQTT協議中的報文是(shi)粘包在一起的,所以(yi)我(wo)們需要提取源(yuan)地址后將剩余的MQTT協議包分離處理交(jiao)給(gei)后續的MQTT協議解碼器進行(xing)處理,這(zhe)就是(shi)整體處理流程。

image

真實IP解碼器(qi)源碼

Part 04

● 測試認證 ●

重(zhong)新打(da)包(bao)部署服務(wu)后,我們根(gen)據日志看到(dao)通過Nginx負載方式能夠正常獲取(qu)到(dao)測試設(she)備的源IP信息(xi),滿足需求(qiu)。

image

對(dui)于4層(ceng)的(de)UDP協議獲取設備(bei)源IP也可以參考(kao)本方(fang)案(an)解決。

熱門文章
全新計劃體現了高通技術公司對需要更長產品生命周期的客戶的承諾;長期產品計劃涵蓋十多款物聯網專用芯片,展示具有更長生命周期的廣泛芯片種類,促進物聯網應用在企業和工業等用例中的使用。
2023-07-31
X