0

このプログラムを使用して、Debian マシンのすべての IP アドレスを見つけています。「ifaddrs」構造体の ifa_name フィールドを使用してループバック アドレスを削除できますが、

  struct ifaddrs * ifAddrsStruct=NULL;
  getifaddrs(&ifAddrsStruct);
  if (!strcmp(ifAddrIterator->ifa_name,"lo"))
   // Filter these addresses

IP アドレスのリストから、IP アドレスがリンクローカル (ネットワーク セグメント内の通信のみを目的としており、有効なネットワーク アドレス) であるかどうかを調べる方法はありますか? 前もって感謝します。

4

3 に答える 3

0

皮切りに:

sockaddr* addr = ifAddrsStruct->ifa_addr;

現在、IPv4 のリンクローカル アドレスはアドレス ブロック169.254.0.0/16で定義されているため、次のようになります。

  • もしもaddr->sa_family == AF_INET
  • static_cast<sockaddr_in*>(addr)->sin_addrその範囲と比較します。

IPv6 では、fe80::/64プレフィックスが割り当てられるため、次のようになります。

  • もしもaddr->sa_family == AF_INET6
  • static_cast<sockaddr_in6*>(addr)->sin6_addrそのプレフィックスと比較します。
于 2013-10-28T16:47:10.060 に答える