在C语言和Linux操作系统中,获取IP地址和MAC地址是一项常见的任务。在网络编程中,获取本机IP和MAC地址对于建立连接以及进行网络通信非常重要。本文将介绍如何使用C语言在Linux环境下获取IP地址和MAC地址的方法。

获取IP地址可以使用getifaddrs()函数来实现。getifaddrs()函数可以用来获取系统中所有网络接口的信息,包括接口名、IP地址、子网掩码等。以下是一个使用getifaddrs()函数获取IP地址的示例代码:

```c
#include
#include
#include
#include
#include
#include

int main() {
struct ifaddrs *ifap, *ifa;
struct sockaddr_in *sa;

if (getifaddrs(&ifap) == -1) {
perror("getifaddrs");
exit(EXIT_FAILURE);
}

for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr->sa_family == AF_INET) {
sa = (struct sockaddr_in *) ifa->ifa_addr;
printf("Interface: %s\n", ifa->ifa_name);
printf("IP Address: %s\n", inet_ntoa(sa->sin_addr));
}
}

freeifaddrs(ifap);

return 0;
}
```

以上代码首先调用getifaddrs()函数获取系统中所有接口信息,然后使用循环遍历每个接口,找到IPv4地址并打印出来。

另外,要获取MAC地址可以使用ioctl()系统调用以及SIOCGIFHWADDR命令来实现。以下是一个获取MAC地址的示例代码:

```c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

int main() {
int sockfd;
struct ifreq ifr;

sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1) {
perror("socket");
exit(EXIT_FAILURE);
}

strcpy(ifr.ifr_name, "eth0");
if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) == -1) {
perror("ioctl");
exit(EXIT_FAILURE);
}

close(sockfd);

printf("MAC Address: %02X:%02X:%02X:%02X:%02X:%02X\n",
(unsigned char) ifr.ifr_hwaddr.sa_data[0],
(unsigned char) ifr.ifr_hwaddr.sa_data[1],
(unsigned char) ifr.ifr_hwaddr.sa_data[2],
(unsigned char) ifr.ifr_hwaddr.sa_data[3],
(unsigned char) ifr.ifr_hwaddr.sa_data[4],
(unsigned char) ifr.ifr_hwaddr.sa_data[5]);

return 0;
}
```

以上代码创建一个套接字并使用ioctl()函数和SIOCGIFHWADDR命令来获取指定接口的MAC地址,并打印出来。

总结而言,通过这两个示例代码,可以在C语言和Linux环境下获取本机的IP地址和MAC地址。这对于网络编程和系统管理都是非常有用的技能。希望本文的内容可以帮助读者更好地了解如何获取IP和MAC地址。