返回> 网站首页 

[转载]linux下检测网卡与网线连通状态

yoours2015-06-10 12:15:56 阅读 1820

简介一边听听音乐,一边写写文章。

Linux下检测网卡与网线连接状态,使用ioctl向socket发送SIOCETHTOOL命令字。 
 
link_stat.c 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
 
#include <fcntl.h> 
#include <errno.h> 
#include <sys/ioctl.h> 
 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <linux/if.h> 
#include <linux/sockios.h> 
#include <linux/ethtool.h> 
 
int get_netlink_status(const char *if_name); 
 
int main() 

    if(getuid() != 0
    { 
        fprintf(stderr, "Netlink Status Check Need Root Power.\n"); 
        return 1
    } 
 
    printf("Net link status: %d\n", get_netlink_status("eth0")); 
 
    return 0

 
// if_name like "ath0", "eth0". Notice: call this function 
// need root privilege. 
// return value: 
// -1 -- error , details can check errno 
// 1 -- interface link up 
// 0 -- interface link down. 
int get_netlink_status(const char *if_name) 

    int skfd; 
    struct ifreq ifr; 
    struct ethtool_value edata; 
 
    edata.cmd = ETHTOOL_GLINK; 
    edata.data = 0
 
    memset(&ifr, 0sizeof(ifr)); 
    strncpy(ifr.ifr_name, if_name, sizeof(ifr.ifr_name) - 1); 
    ifr.ifr_data = (char *) &edata; 
 
    if (( skfd = socket( AF_INET, SOCK_DGRAM, 0 )) < 0
        return -1
 
    if(ioctl( skfd, SIOCETHTOOL, &ifr ) == -1
    { 
        close(skfd); 
        return -1
    } 
 
    close(skfd); 
    return edata.data; 

微信小程序扫码登陆

文章评论

1820人参与,0条评论