如何区分以太网与其他网络?

Som*_*ent 0 c linux networking

在这里的答案中建议,获取机器的IP地址,可以getifaddrs()用来获取程序运行的机器的IP地址,这很有效:D:D

但是,在两个不同的系统上运行相同的程序,一个显示

SERVER_ADDRESS lo 127.0.0.1
SERVER_ADDRESS eth0 129.xxx.xxx.xxx
SERVER_ADDRESS virbr0 192.zzz.zzz.1
Run Code Online (Sandbox Code Playgroud)

而另一个显示

SERVER_ADDRESS lo0 127.0.0.1
SERVER_ADDRESS en0 192.yyy.yyy.yyy
Run Code Online (Sandbox Code Playgroud)

我打算用来strcmp区分以太网,但现在我意识到它不能跨系统工作,因为可能会打印出不同的字符串.

是否有功能(或更好的方法)来检查是否ifa_name是以太网?

alk*_*alk 7

要(再次)状态此明确:将所有地址127.0.0.0/255.0.0.0净(范围),因为有从地址127.0.0.0127.255.255.255,被定义为被视为本地回环地址.发往此类的数据不会离开本地机器.

无论如何,因为你已经在使用getifaddrs()现场很容易.. - 只需测试返回ifa_flags的结构的成员,如下所示:struct ifaddrsIFF_LOOPBACK

#include <sys/types.h>
#include <ifaddrs.h>
#include <net/if.h> /* for IFF_LOOPBACK */

...

struct ifaddrs * pIfAddrs = NULL;

if (!getifaddrs(&pIfAddrs)) {
  /* Test if the first interface is looping back to the local host. */
  int iIsLoopBack = (0 != (pIfAddrs->ifa_flags & IFF_LOOPBACK)); 
  ...
}

...

/* clean up */
if (pIfAddrs) {
  freeifaddrs(pIfAddrs);
  pIfAddrs = NULL;
}

...
Run Code Online (Sandbox Code Playgroud)