C语言+shell 实现linux网卡状态检测

本文介绍了一种使用Linux命令行工具ifconfig、grep和awk来检查网络接口状态的方法,包括判断接口是否存在、是否已连接及接口是否开启。

不解释,直接上代码 要求linux环境具备grep和awk(awk可选)

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int get_if_status(char *if_name)
{
    char    buffer[BUFSIZ];
	char    cmd[100];
    FILE    *read_fp;
    int        chars_read;
    int        ret =0;
   
    memset( buffer, 0, BUFSIZ );
    memset( cmd, 0, 100 );
	sprintf(cmd, "ifconfig -a | grep %s",if_name);
    read_fp = popen(cmd, "r");
    if ( read_fp != NULL )
    {
        chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);
		pclose(read_fp);
		
        if (chars_read > 0)
        {
            ret = 1;
        }
        else
        {
			fprintf(stderr, "%s: NO FOUND\r\n",if_name);
			return 0;
        }
    }

	if(ret == 1)
	{
		memset( buffer, 0, BUFSIZ );
		memset( cmd, 0, 100 );
		sprintf(cmd, "ifconfig |grep %s",if_name);
		read_fp = popen(cmd, "r");
		if ( read_fp != NULL )
		{
		    chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);
		    pclose(read_fp);
			
		    if (chars_read > 0)
		    {
		        ret = 2;
		    }
		    else
		    {
				fprintf(stderr, "%s: DOWN\r\n",if_name);
				return 1;
		    }
		}
	}

	if(ret == 2)
	{
		memset( buffer, 0, BUFSIZ );
		memset( cmd, 0, 100 );
		sprintf(cmd, "ifconfig %s | grep RUNNING |  awk '{print $3}'",if_name);
		read_fp = popen(cmd, "r");
		if ( read_fp != NULL )
		{
		    chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);
		    pclose(read_fp);
			
		    if (chars_read > 0)
		    {
				fprintf(stderr, "%s: LINKED\r\n",if_name);
				return 3;
		    }
		    else
		    {
				fprintf(stderr, "%s: UNPLUGGED\r\n",if_name);
				return 2;
		    }
		}
	}

	return -1;
}


int main(int argc, char* argv[])
{
    int i=0;
	if(argc != 2)
	{
		fprintf(stderr, "usage: %s <ethname>", argv[0]);
		return -1;
	}
	
    i = get_if_status(argv[1]);
    printf( "if_status = %d\n", i );
    return 0;
}


嵌入式编译 mips-linux-gnu-gcc -mips32 -EL -mhard-float -Wall -o netlink netlink.c

测试结果

# ./netlink eth100
eth100: NO FOUND
if_status = 0
# 
# ifconfig eth0 down
# ./netlink eth0  
eth0: DOWN
if_status = 1
# 
# ifconfig eth0 up
# ./netlink eth0
eth0: UNPLUGGED
if_status = 2
#
# ./netlink eth0
eth0: LINKED
if_status = 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值