如何检测 IPv6 全局地址是否已弃用?

How to detect IPv6 global address is deprecated or not?

我能够检测到所有 IP 地址,但我想检测哪些 IPv6 地址已弃用。我怎样才能使用 C 代码做到这一点?可能在 /proc/net/if_inet6 中有该信息,但我不确定此文件中的第五列是否表明了这一点。这是我的 /proc/net/if_inet6 文件。

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

在第五列中有条目 21 是我已弃用的​​ IPv6 地址,第五列中的条目 01 是我当前的临时 IPv6 地址。

你是对的。该列是一个包含标志的十六进制值。标志在 rtnetlink.h:

中定义
#define IFA_F_SECONDARY 0x01
#define IFA_F_DEPRECATED 0x20
#define IFA_F_TENTATIVE 0x40
#define IFA_F_PERMANENT 0x80

因此标志值为 21 的地址是已弃用的辅助地址。