linux编程获取本机的所有网口名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux编程获取本机的所有网口名称相关的知识,希望对你有一定的参考价值。

怎样编程获取本机(linux系统)的所有网口名称?C语言程序。不是java。

参考技术A struct ifaddrs

struct ifaddrs *ifa_next; /* Next item in list */
char *ifa_name; /* Name of interface */
unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */
struct sockaddr *ifa_addr; /* Address of interface */
struct sockaddr *ifa_netmask; /* Netmask of interface */
union

struct sockaddr *ifu_broadaddr; /* Broadcast address of interface */
struct sockaddr *ifu_dstaddr; /* Point-to-point destination address */
ifa_ifu;
#define ifa_broadaddr ifa_ifu.ifu_broadaddr
#define ifa_dstaddr ifa_ifu.ifu_dstaddr
void *ifa_data; /* Address-specific data */
;追问

我的交叉编译环境中,没有getifaddrs这个函数,也没有ifaddrs.h这个头文件。请问还有别的函数接口或者别的方法吗?

参考技术B ioctl函数追问

能否详细点儿?这么一句还是完全不清楚啊。

追答

#include
#include
#include //ifconf ifreq等结构体
#include

//获取网络接口信息
int getifc()

int inter_fd;
int if_len;
struct ifconf ifc;
struct ifreq buf[16];//接口信息

if ((inter_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)

perror("socket(AF_INET, SOCK_DGRAM, 0)");
return -1;


ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t) buf;

if (ioctl(inter_fd, SIOCGIFCONF, (char *) &ifc) == -1)

perror("SIOCGIFCONF ioctl");
return -1;


if_len = ifc.ifc_len / sizeof(struct ifreq);//接口数量

while (if_len-- > 0)

printf("接口:%s\n", buf[if_len].ifr_name);

return 0;


PS:有人给你一个方向,你应该朝着这个方向走;而不是等别人把你送到目的地。 共勉加油!

本回答被提问者采纳

Linux修改本机名称

1、修改本机名称,一般用于生产环境能够方便区分服务器的用途,如果是自己测试,此步骤可做可不做。
# vi /etc/sysconfig/network打开配置文件,修改HOSTNAME=test
保存退出,然后再执行# hostname test,再注销重新登陆系统,就可以看到修改结果了

2、修改hosts文件,需要配置该本机名称对应的ip,不然安装会报错。
#vim /etc/hosts

以上是关于linux编程获取本机的所有网口名称的主要内容,如果未能解决你的问题,请参考以下文章

linux编程获取本机网络相关参数

Linux 获取物理网口/或虚拟网络接口

Linux中用shell编程获取IP地址及MAC地址

arm开发板上的linux如何通过网口和windows的网口通信,linux中的socket和windows下的socket能通用吗?

LINUX - 获取本地ip

Linux下编程获取本地IP地址的常见方法