TL;DR 在使用 Golang 編寫(xiě) TCP/UDP socket 的時(shí)候,第一步做的就是地址解析。
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、網(wǎng)站空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、天水網(wǎng)站維護(hù)、網(wǎng)站推廣。
該函數(shù)返回的地址包含的信息如下:
TCPAddr 里, IP 既可以是 IPv4 地址,也可以是 IPv6 地址。 Port 就是端口了。 Zone 是 IPv6 本地地址所在的區(qū)域。
從返回結(jié)果看該函數(shù)的參數(shù), network 指 address 的網(wǎng)絡(luò)類(lèi)型; address 指要解析的地址,會(huì)從中解析出我們想要的 IP , Port 和 Zone 。
從源碼中可以看出,參數(shù) network 只能是如下四個(gè)值,否則會(huì)得到一個(gè)錯(cuò)誤。
解析過(guò)程跟 ResolveTCPAddr 的一樣,不過(guò)得到的是 *UDPAddr 。
UDPAddr 包含的信息如下:
所需工具材料:已安裝有TCP/IPV4協(xié)議
有兩種方法:
第一種方法:
1、點(diǎn)右下角的網(wǎng)絡(luò)標(biāo)志,鼠標(biāo)右鍵選擇打開(kāi)網(wǎng)絡(luò)和共享中心。
2、點(diǎn)本地連接或者無(wú)線連接。
3、點(diǎn)詳細(xì)信息。
4、此時(shí)可以看到IPV4地址。
第二種方法:
1、點(diǎn)開(kāi)始——在運(yùn)行中輸入cmd回車(chē)。
2、輸入ipconfig
/all回車(chē)。
3、此時(shí)可以看到本地連接或者無(wú)線連接的IPV4地址。
實(shí)際業(yè)務(wù):go 二進(jìn)制文件在私有化部署中,需要對(duì)客戶(hù)的服務(wù)器mac和ip進(jìn)行綁定,系統(tǒng)只能運(yùn)行在綁定的服務(wù)器上。把mac和ip地址配置到config中。
運(yùn)行效果:系統(tǒng)可正常編譯,正常訪問(wèn),在用戶(hù)Auth接口進(jìn)行核對(duì)。
//檢驗(yàn)Mac和內(nèi)網(wǎng)IP,測(cè)試環(huán)境不做校驗(yàn)
func (c *CommonBase)CheckMacAndIp()error {
ipCfg :=g.Cfg().GetString("machine.Ipaddr")
macCfg :=g.Cfg().GetString("machine.Macip")
if ipCfg =="127.0.0.1" {
return nil
}
macArray,_ :=gipv4.GetMacArray()
if len(macArray) ==0 {
return gerror.New("mac地址獲取失敗")
}
if garray.NewStrArrayFrom(macArray).Contains(macCfg) ==false {
return gerror.New("示授權(quán)的應(yīng)用MAC,請(qǐng)聯(lián)系")
}
ipArray,_ :=gipv4.GetIpArray()
ipIntranetArray,_ :=gipv4.GetIntranetIpArray()
if len(ipArray) ==0 len(ipIntranetArray) ==0 {
return gerror.New("ip地址獲取失敗")
}
if garray.NewStrArrayFrom(ipArray).Merge(ipIntranetArray).Contains(ipCfg) ==false {
return gerror.New("示授權(quán)的應(yīng)用IP,請(qǐng)聯(lián)系")
}
return nil
}
項(xiàng)目使用GoFrame框架1.6。考慮到客戶(hù)可能會(huì)對(duì)內(nèi)存數(shù)據(jù)做分析破解,可以把mac和ip地址做AES加密。