2016-01-20 69 views
2

我能夠檢測到所有IP地址,但我想檢測哪些IPv6地址已被棄用。我如何使用C代碼來做到這一點?可能在/proc/net/if_inet6有這樣的信息,但我不確定這個文件中的第五列是否表明這一點。這是我的/proc/net/if_inet6文件。如何檢測IPv6全局地址是否被棄用?

fdc2714277b700009422b252a33ddc6a 02 40 00 21  eth0 
fdc2714277b70000021a4dfffedd455f 02 40 00 00  eth0 
00000000000000000000000000000001 01 80 10 80  lo 
fe80000000000000021a4dfffedd455f 02 40 20 80  eth0 
fdc2714277b70000ec3e4b537af7f419 02 40 00 01  eth0 

在其具有的條目此第五列的我的棄用IPv6地址和在第五列的條目是我的當前臨時的IPv6地址。

回答

0

你是對的。該列是包含標誌的十六進制值。這些標誌在rtnetlink.h定義:

#define IFA_F_SECONDARY 0x01 
#define IFA_F_DEPRECATED 0x20 
#define IFA_F_TENTATIVE 0x40 
#define IFA_F_PERMANENT 0x80 

因此,與標誌的地址值21是棄用輔助地址。

+0

這表明這些值是針對rnetlink.h文件中的ifa_flags。這些HEX值是否會按照if.h文件中的預定義結構與ifa_flags值衝突,或者這裏針對不推薦使用的IPv6地址0x20是否表示設置了IFF_NOTRAILERS標誌? – neel

+0

對不起,我不明白你在問什麼。標誌字段只包含位,這是這些標誌位的含義。 –

+0

我認爲ifa_flags對於在/linu/if.h文件中定義的每個位都有特定的意義。根據該文件,0x20表示IFF_NOTRAILERS已設置。那麼這是否意味着,如果IFF_NOTRAILERS已設置,它會間接表明它已被棄用的IP地址?標誌在「enum net_device_flags」結構下定義。 – neel