Linux连接有线连接命令,Linux下检测网卡与网线连接状态,使用ioctl向socket发送SIOCETHTOOL命令字...

本文介绍了一个简单的C程序,用于检查指定网络接口的Netlink状态。该程序通过使用ioctl和SIOCETHTOOL来获取接口链接状态,并返回其是否处于活动状态。需要注意的是,此程序需要root权限才能运行。
摘要由CSDN通过智能技术生成

typedef unsigned short u16;

typedef unsigned int u32;

typedef unsigned char u8;

#include 

#include 

int get_netlink_status(const char *if_name);

int main(int argc, char* argv[])

{

if(argc != 2)

{

fprintf(stderr, "usage: %s ", argv[0]);

return -1;

}

if(getuid() != 0)

{

fprintf(stderr, "Netlink Status Check Need Root Power.\n");

return 1;

}

printf("Net link status: %s\n", get_netlink_status(argv[1])==1?"up":"down");

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, 0, sizeof(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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值