簡體   English   中英

與C linux中的ipv6范圍相比,如何查找ipv4地址的范圍名稱(鏈接,主機和全局)

[英]how to find ipv4 address scope name (link, host and global) as compared with ipv6 scope in C linux

在這里,我不是在談論作用域ID,它是關於作用域名稱(主機,鏈接,站點或全局)的。 如何比較/獲取ipv4地址以及ipv6的范圍。

直接解決方案是將地址與Wikipedia上此列表中的前綴進行比較。

為了匹配我的IP6答案 :但是,正如IP4所指出的那樣,分類是IP6協議中包含的建議,因此並不完全等效。

有幫助宏可以幫助您:

#define IN_LINKLOCAL(i) (((uint32_t)(i) & 0xffff0000) == 0xa9fe0000)
#define IN_PRIVATE(i)   ((((uint32_t)(i) & 0xff000000) == 0x0a000000) || \
                         (((uint32_t)(i) & 0xfff00000) == 0xac100000) || \
                         (((uint32_t)(i) & 0xffff0000) == 0xc0a80000))

struct sockaddr_in s4;
if (IN_LOOPBACK(ntohl(s4->sin_addr.s_addr)) {
  puts ("loopback");
} else if (IN_MULTICAST(ntohl(s4->sin_addr.s_addr)) {
  puts ("multicast");
} else if (IN_BADCLASS(ntohl(s4->sin_addr.s_addr)) {
  puts ("reserved");
} else if (IN_LINKLOCAL(ntohl(s4->sin_addr.s_addr)) {
  puts ("link-local");
} else if (IN_PRIVATE(ntohl(s4->sin_addr.s_addr)) {
  puts ("private");
} else {
  puts ("global");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM