Qt5 12獲取本機IP位址

2021-10-01 08:51:19 字數 1820 閱讀 4622

最近在寫有關qt網路通訊方面,下面是乙個小模組,獲取主機的ip位址。

qstring get_local_ip()

}return

"0.0.0.0"

;}

首先獲取本機所有ip位址資訊,包括環迴位址如127.0.0.1,以及本機位址如192.168.1.x等等,有安裝虛擬機器的還有其他位址等等。

/**

* @brief 檢測當前網絡卡是否是虛擬網絡卡(vmware/virtualbox)或回環網絡卡

* @param str_card_name 網絡卡的描述資訊

* @return 如果是虛擬網絡卡或回環網絡卡,返回true, 否則返回false

*/bool

is_virtual_network_card_or_loopback

(qstring str_card_name)

/** * @brief 獲取本機ip位址

*/void

print_local_ip()

entry.

clear()

;}}}

以上**能夠過濾虛擬機器虛擬網絡卡,並且列印網絡卡配置上的第乙個ipv4位址,為什麼說是第乙個呢?因為主機可能存在多宿主機,乙個網絡卡配置多個ip位址。所以為了獲取所有的位址,修改如下。

/**

* @brief 獲取本機ip位址

* @param map_ip 輸出引數 ipv4列表

* qstring ipv4位址

* int 網絡卡型別 取值為[0,1],0表示無線,1表示有線

*/void

get_ip

(qmapint>

& map_ip)

elseif(

-1!= inter.

name()

.indexof

("ethernet"))

}}entry.

clear()

;}}}

// 測試

intmain

(int argc,

char

*ar**)

return a.

exec()

;}

其實還有乙個問題,在windows上通過檢視介面裝置資訊,發現每個資訊中都包含裝置廠商相關的內容,並且只有有線網絡卡的裝置描述中包含「pci」字樣。通過檢視windows相關api,發現發現結構體ip_adapter_info中包含了網絡卡資訊,並附帶了示例,鏈結為

進行修改如下。

void

get_ip_list

(qmapint>

& map_ip)if(

(dwretval =

getadaptersinfo

( padapterinfo,

&uloutbuflen)

)== no_error)

while

(addr);}

padapterinfo = padapterinfo-

>next;}}

else

if(padapterinfo)

}int

main

(int argc,

char

*ar**)

return a.

exec()

;}

實現這個功能的主要目的是查詢ipv4的位址,可能讀者的需求不同可以進行更改,也還有其他辦法獲取ip位址資訊,望指出錯誤。

Qt獲取本機ip位址

最近有個專案需要手機可以與pc進行tcp傳輸檔案,pc做server時在我的電腦可以,在其他電腦時手機連線超時。檢視了埠,防火牆等等問題未能解決。最後發現是qt在獲取ip位址時獲取錯了,獲取的是第乙個而不是正在使用的。qstring stripaddress qprocess cmd pro qst...

Qt獲取本機的ip位址 MAC位址

qstring gethostipaddress 如果沒有找到,則以本地ip位址為ip if stripaddress.isempty stripaddress qhostaddress qhostaddress localhost tostring return stripaddress qstr...

獲取本機IP位址

cstring strlocalip char szhostname 64 memset szhostname,0x00,sizeof szhostname gethostname szhostname,sizeof szhostname phostent phost gethostbyname s...