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<qhostaddress> alladdresses() [static]</code>
這個便利函數傳回主機上面發現的所有ip位址。相當于allinterfaces()傳回的所有對象調用addressentries()來擷取qhostaddress對象清單,然後對每一個對象調用qhostaddress::ip()方法。
<code>qlist<qnetworkinterface> allinterfaces() [static]</code>
傳回的主機上找到的所有的網絡接口的清單。在失敗情況下,它會傳回一個空清單。
<code>qlist<qnetworkaddressentry> 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>