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是以太网?
要(再次)状态此明确:将所有地址127.0.0.0/255.0.0.0净(范围),因为有从地址127.0.0.0到127.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)
| 归档时间: |
|
| 查看次数: |
2471 次 |
| 最近记录: |