天天看點

Qt之QNetworkInterface簡述常用接口擷取所有IP位址擷取網絡接口清單更多參考

qnetworkinterface類負責提供主機的ip位址和網絡接口的清單。

qnetworkinterface表示了目前程式正在運作時與主機綁定的一個網絡接口。每個網絡接口可能包含0個或多個ip位址,每個ip位址都可選擇性地與一個子網路遮罩和/或一個廣播位址相關聯。這樣的清單可以通過addressentries()方法獲得。當子網路遮罩或者廣播位址不必要時,可以使用alladdresses()便捷函數來僅僅獲得ip位址。

qnetworkinterface使用hardwareaddress()方法擷取接口的硬體位址。

不是所有的作業系統都支援這些所有的特性。隻有ipv4位址可以保證在所有平台上都能被這個類列舉出來,尤其是ipv6位址的列舉目前隻支援windows xp及相關版本、linux、macos和bsds。

<a href="#%e7%ae%80%e8%bf%b0">簡述</a>

<a href="#%e5%b8%b8%e7%94%a8%e6%8e%a5%e5%8f%a3">常用接口</a>

<a href="#%e8%8e%b7%e5%8f%96%e6%89%80%e6%9c%89ip%e5%9c%b0%e5%9d%80">擷取所有ip位址</a>

<a href="#%e8%8e%b7%e5%8f%96%e7%bd%91%e7%bb%9c%e6%8e%a5%e5%8f%a3%e5%88%97%e8%a1%a8">擷取網絡接口清單</a>

<a href="#%e6%9b%b4%e5%a4%9a%e5%8f%82%e8%80%83">更多參考</a>

枚舉 qnetworkinterface::interfaceflag

辨別 qnetworkinterface::interfaceflags

指定網絡接口相關的辨別,可能的值:

常量

描述

qnetworkinterface::isup

0x1

網絡接口處于活動狀态

qnetworkinterface::isrunning

0x2

網絡接口已配置設定資源

qnetworkinterface::canbroadcast

0x4

網絡接口工作在廣播模式

qnetworkinterface::isloopback

0x8

網絡接口是環回接口:也就是說,它是一個虛拟接口,其目的是主機本身

qnetworkinterface::ispointtopoint

0x10

網絡接口是一個點對點接口:也就是說,有一個,單一的其他位址可以直接由它到達。

qnetworkinterface::canmulticast

0x20

網絡接口支援多點傳播

注意:一個網絡接口不能既是broadcast-based又是point-to-point。

interfaceflags類型是一個qflags類型定義,它存儲一個或interfaceflag的組合值。

<code>qlist&lt;qhostaddress&gt; alladdresses() [static]</code>

這個便利函數傳回主機上面發現的所有ip位址。相當于allinterfaces()傳回的所有對象調用addressentries()來擷取qhostaddress對象清單,然後對每一個對象調用qhostaddress::ip()方法。

<code>qlist&lt;qnetworkinterface&gt; allinterfaces() [static]</code>

傳回的主機上找到的所有的網絡接口的清單。在失敗情況下,它會傳回一個空清單。

<code>qlist&lt;qnetworkaddressentry&gt; addressentries() const</code>

傳回ip位址清單,這個接口具備連同與其相關的網絡掩碼和廣播位址。

如果不需要子網路遮罩或廣播位址的資訊,可以調用alladdresses()函數來隻擷取ip位址。

interfaceflags flags() const

傳回與此網絡接口關聯的标志。

qstring hardwareaddress() const

傳回此接口的底層硬體位址。在以太網接口上,這将是表示mac位址的字元串,用冒号分隔。

其他接口類型可能有硬體位址的其他類型。不應該依賴于實作這個函數傳回一個有效的mac位址。

qstring humanreadablename() const

如果名稱可确定,在windows上,傳回網絡接口的人類可讀的名稱,例如:“本地連接配接”;如果不能,這個函數傳回值與name()相同。使用者可以在windows控制台中修改人類可讀的名稱,是以它可以在程式的執行過程中變化的名稱。

在unix上,此函數目前傳回值總是和name()相同,因為unix系統不存儲人類可讀的名稱的配置。

bool isvalid() const

如果此qnetworkinterface對象包含一個的有效的網絡接口,則傳回true。

qstring qnetworkinterface::name() const

傳回網絡接口的名稱。在unix系統中,這是一個包含接口的類型和任選的序列号的字元串,例如:“eth0”、“lo”或者“pcn0”;在windows中,這是一個内部id,使用者不能更改。

通過調用便利的靜态函數alladdresses(),可以傳回一個qhostaddress位址清單(隻能擷取ip位址,沒有子網路遮罩和廣播位址的資訊)。

輸出如下:

address : “fe80::550c:ab19:fb48:1c9%15” address : “169.254.1.201” address : “fe80::d086:8566:6065:8954%11” address : “172.18.4.165” address : “fe80::f864:a962:7219:f98e%16” address : “192.168.17.1” address : “fe80::8169:691f:148e:d3cb%17” address : “192.168.178.1” address : “fe80::5996:27a3:83b5:2ae7%18” address : “192.168.56.1” address : “::1” address : “127.0.0.1”

通過調用便利的靜态函數allinterfaces(),可以傳回一個qnetworkinterface網絡接口清單(通過qnetworkaddressentry,可以擷取ip位址、子網路遮罩和廣播位址等資訊)。

通過flags()函數,可以擷取到目前網絡接口的辨別,利用testflag()進行過濾,就可以擷取我們想要的内容(裝置名、硬體位址、名字)。

注意:為了簡單,我注釋掉了ip位址的資訊,需要的可以自行測試。

device : “{be9972cd-860e-4e15-8ce2-3f25ef0a7a24}” hardwareaddress : “94:de:80:21:92:17” human readable name : “本地連接配接” device : “{29f85058-e757-4f60-bf7b-47f6227c8cbc}” hardwareaddress : “00:50:56:c0:00:01” human readable name : “vmware network adapter vmnet1” device : “{a297491c-d43c-4f85-a674-88368f8d4fc1}” hardwareaddress : “00:50:56:c0:00:08” human readable name : “vmware network adapter vmnet8” device : “{1ae5f6fc-478a-4eab-b4d2-86201a6b2090}” hardwareaddress : “0a:00:27:00:00:12” human readable name : “virtualbox host-only network”

<a href="http://blog.csdn.net/liang19890820/article/details/52249509">qt之網絡程式設計</a>

<a href="http://blog.csdn.net/liang19890820/article/details/50774795">qt之qhostinfo</a>

<a href="http://blog.csdn.net/liang19890820/article/details/52273986">qt之qhostaddress</a>

<a href="http://blog.csdn.net/liang19890820/article/details/52276646">qt之qnetworkaddressentry</a>

繼續閱讀