C语言实现linux网卡连接检测

来源:互联网 发布:查看linux网络地址 编辑:程序博客网 时间:2024/06/05 19:42

直接上代码吧

#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <sys/ioctl.h>#include <linux/if.h>#include <linux/mii.h>#include <linux/sockios.h>#include <errno.h>int get_if_miireg(const char *if_name, int phy_id, int reg_num ){int fd = -1; struct ifreq ifr; struct mii_ioctl_data *mii; int value;if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){perror("socket");close(fd);return -1; }bzero(&ifr, sizeof(ifr));strncpy(ifr.ifr_name, if_name, IFNAMSIZ-1); ifr.ifr_name[IFNAMSIZ-1] = 0; if (ioctl(fd, SIOCGMIIPHY, &ifr) < 0){ perror("ioctl");close(fd);return -1; }mii = (struct mii_ioctl_data *)&ifr.ifr_data;mii->reg_num = reg_num;//0x01if (ioctl(fd, SIOCGMIIREG, &ifr) < 0){ perror("ioctl");close(fd);return -1;}close(fd);value = ((mii->val_out&0x04)>>2);return value;}int main(int argc, char* argv[]){    int i=0;    if(argc != 2)    {        fprintf(stderr, "usage: %s <ethname>", argv[0]);        return -1;    }    i = get_if_miireg(argv[1],0x10,0x01);    printf( "if_status = %d\n", i );    return 0;}


只能识别网线是否连接,还没识别网卡是否存在状态,也不识别网卡存在是否为down状态。

知道的兄弟姐妹回复一下啊!

1 0
原创粉丝点击