linux 网络连通性测试

测试 主机网络 网络是否连通

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <net/if.h>


struct ethtool_value {
        __uint32_t      cmd;
        __uint32_t      data;
};


/*
	function:	get network status (link up or down)
	params:
			network_name	IN	device name of network
	return:
			0	link up
			1	link down
			-1	get link status error
*/
int networkStatus(char *network_name){
	struct ethtool_value edata;
	int fd = -1;
	int err = 0;
	struct ifreq ifr;


	memset(&ifr, 0, sizeof(ifr));
	strcpy(ifr.ifr_name, network_name);
	fd = socket(AF_INET, SOCK_DGRAM, 0);
	if (fd < 0) {
	        perror("Cannot get control socket");
	        return -1;
	}


	edata.cmd = 0x0000000a;
	ifr.ifr_data = (caddr_t)&edata;
	err = ioctl(fd, 0x8946, &ifr);
	close(fd);
	
	if (err == 0) {
		//printf("Link detected: %s\n", edata.data ? "yes":"no");
		return (edata.data ? 0 : 1);
	} else if (errno != EOPNOTSUPP) {
		perror("Cannot get link status");
		return -1;
	}
}


int main(int argc, char* argv[])
{
	int status;
	
	status = networkStatus("eth0");
	if(status != -1){
		printf("Link status is %s\n", status  == 0 ? "up" : "down");
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值