#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
int main()
{
int i=0;
int sockfd;
struct ifconf ifc;
unsigned char buf[512];
struct ifreq *ifr;
//初始化ifconf
ifc.ifc_len = 512;
ifc.ifc_buf = buf;
if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0)
{
perror("socket");
exit(1);
}
ioctl(sockfd, SIOCGIFCONF, &ifconf); //获取所有接口信息
//接下来获取逐个网卡的名称和IP地址
ifr = (struct ifreq*)buf;
for(i=(ifc.ifc_len/sizeof(struct ifreq)); i>0; i--)
{
printf("name = [%s]\n", ifr->ifr_name);
printf("local addr = [%s]\n", inet_ntoa(((struct sockaddr_in*)&(ifr->ifr_addr))->sin_addr));
ifr++;
}
return 0;
}
本文介绍了一个使用C语言编写的程序,该程序通过socket接口获取本地计算机的所有网络接口名称及其对应的IP地址。通过调用socket和ioctl函数,并利用ifconf结构体进行数据交互,程序能够遍历并打印出每个网络接口的信息。
888

被折叠的 条评论
为什么被折叠?



