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

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

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, 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;

}

-----------------------------------------------------------

# ifconfig eth0

eth0 Link encap:Ethernet HWaddr 00:25:35:68:CC:D6

inet addr:192.168.1.168 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::215:c5ff:fe18:ccd6/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:130722 errors:0 dropped:0 overruns:0 frame:0

TX packets:112560 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:104371099 (99.5 MiB) TX bytes:20518584 (19.5 MiB)

Interrupt:16

其中的RUNNING就表示网卡与网线正常链接,拔掉网线再运行此命令就会发现RUNNING不在了。

我的目的是用C语言来实现程序,而linux系统提供了popen/pclose进程管道让C和shell很方便的交互,不过使用的时候要注意设置权限,以免造成安全隐患。废话不多说,看下面C代码结合shell命令检测网卡与网线连通状况:

netstat.c

#include

#include

#include

#include

/**********************************************************************

* 函数名称: GetNetStat

* 功能描述: 检测网络链接是否断开

* 输入参数:

* 输出参数: 无

* 返 回 值: 正常链接1,断开返回-1

* 其它说明: 本程序需要超级用户权限才能成功调用ifconfig命令

* 修改日期 版本号 修改人 修改内容

* ---------------------------------------------------------------------

* 2010/04/02 V1.0 eden_mgqw

***********************************************************************/

int GetNetStat( )

{

char buffer[BUFSIZ];

FILE *read_fp;

int chars_read;

int ret;

memset( buffer, 0, BUFSIZ );

read_fp = popen("ifconfig eth0 | grep RUNNING", "r");

if ( read_fp != NULL )

{

chars_read = fread(buffer, sizeof(char), BUFSIZ-1, read_fp);

if (chars_read > 0)

{

ret = 1;

}

else

{

ret = -1;

}

pclose(read_fp);

}

else

{

ret = -1;

}

return ret;

}

int main()

{

int i=0;

i = GetNetStat();

printf( "\nNetStat = %d\n", i );

return 0;

}

Linux下双网卡绑定(bonding技术)

Linux网卡绑定探析   2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的 ...

Linux下设置网卡静态ip

Linux下设置网卡静态ip 如果是服务器版,没有图形界面只用用命令行修改配置文件 如果是客户端版本,可以用图形界面 配置的前提是要在root用户下才能重启网卡服务 图形界面: system-conf ...

Linux下查看网卡驱动和版本信息

Linux下查看网卡驱动和版本信息 查看网卡生产厂商和信号 查看基本信息:lspci 查看详细信息:lspci -vvv # 3个小写的v 查看网卡信息:lspci | grep Ethernet 查 ...

Linux下多网卡同网段多IP网络分流设定方法

Linux下多网卡同网段多IP网络分流设定方法 -- :: 标签:Linux下多网卡同网段多IP网络分流设定方法 当服务器需要较高的网络流量时,在其它资源不造成瓶颈的情况下无疑会用到多网卡. 第1选项 ...

Linux下修改网卡IP、DNS和网关

Linux下修改网卡IP和网关 建议通过终端字符方式下来修改 一.修改IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOO ...

Linux&&num;160&semi;下修改网卡MAC地址

Linux下修改网卡MAC地址 by:授客 QQ:1033553122 例子:修改网卡接口eth0的mac地址 #停用网卡接口,比如eth0 # ifconfig eth0 down #编辑对应的网卡 ...

Linux&&num;160&semi;下修改网卡接口名

Linux下修改网卡接口名 by:授客 QQ:1033553122 (测试环境:CentOS-6.0-x86_64-bin-DVD1.iso+Vmware) 作用 可以用于解决类似如下Device n ...

linux下一个网卡配置多个ip【虚拟ip】

Linux下配置网卡ip别名何谓ip别名?用windows的话说,就是为一个网卡配置多个ip.什么场合增加ip别名能派上用场?布网需要.多ip访问测试.特定软件对多ip的需要...and so on. ...

linux 下查看网卡工作速率

[root@hadoop058 ~]# mii-tool eth0: negotiated 100baseTx-FD, link ok 100M linux 下查看网卡工作速率 Ethtool是用于查 ...

随机推荐

关于TCP中的MSS

MSS 是TCP选项中最经常出现,也是最早出现的选项.MSS选项占4byte.MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的头部.TCP在三次握手中,每一方都 ...

iOS 图片填充 UIImageView

UIViewContentModeScaleAspectFit,     //这个图片都会在view里面显示,并且比例不变  这就是说 如果图片和view的比例不一样 就会有留白如下图1 UIView ...

HDU-1846 Brave Game

http://acm.hdu.edu.cn/showproblem.php?pid=1846 (一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最 ...

GetCurrentDirectory、SetCurrentDirectory和GetModuleFileName

DWORD GetCurrentDirectory( DWORD nBufferLength, // size of directory buffer LPTSTR lpBuffer      // ...

Windows 7妙用 笔记本变无线AP轻松共享

笔记本变AP的前提和应用原理 笔记本变AP的前提是你所处的房间或地点需要提供有线宽带的连接,而且你的笔记本要有无线网卡.如果这两个条件具备了,即使没有路由器/无线AP等辅助设备,多个笔记本电脑共享上网 ...

ReactNative学习笔记(一)环境搭建

前言 本文开发环境为Windows,目标平台为Android,react-native版本为0.35.0. 环境搭建 注意,本文不是按照官网的教程来的,官网说必须安装什么Chocolatey,我懒得鸟 ...

Springmvc的原理和业务处理

要尽量弄懂这个springmvc的工作原理:DispatcherServle,HandlerMapping,HandlerAdapter和ViewResolver等对象协同工作,完成springmvc ...

Java封装案例

---恢复内容开始--- 在类的getter/setter方法中在getter方法中要先实列话 在构造方法中无参构造(必须要构造)好处很多!!! 描述学生信息及相关联的专业信息 把Subject和St ...

【Scheme】树结构

将表作为序列的表示方式,可以推广到元素本身也是序列的序列.例如,我们可以认为对象((1 2) 3 4)是通过(cons (list 1 2) (list 3 4))构造出来的. 这个表包含三个项,其中 ...

Loj 2536 解锁屏幕

Loj 2536 解锁屏幕 状态比较显然的状压 \(dp\) ,设 \(f[S][i]\) 表示连接 \(S\) 集合中的点,最后到的点是 \(i\) 的方案数. 转移时,枚举一个 \(j\notin ...

linux查看哪个网卡插着网线,(笔记)Linux下检测网卡与网线连接状态相关推荐

  1. linux查看python环境_运维笔记linux环境提示python: command not found hello

    场景描述: 新部署的容器环境,终端执行python命令,提示没有该命令. 从报错异常可以看出,可能是python环境未安装. 分析思路: 检查python路径: 方式一:type -a python ...

  2. Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序

    文章目录: 1 linux查看那端口监听情况 2 Linux查看某个端口对应的进程号和程序 1 linux查看那端口监听情况 linux中可以使用netstat命令查看端口监听情况,首先来看一下该命令 ...

  3. linux 查看当前用户和组的信息,Linux查看所有用户和组信息

    主要通过以下两个命令: cat /etc/passwd cat /etc/group 步骤一:cat /etc/passwd查看所有的用户信息,详情如下图: 步骤2:cat /etc/passwd|g ...

  4. linux 查看网络流量来源_详解Linux查看实时网卡流量的几种方式

    在工作中,我们经常需要查看服务器的实时网卡流量.通常,我们会通过这几种方式查看Linux服务器的实时网卡流量. 1. sar -n DEV 1 2 sar命令包含在sysstat工具包中,提供系统的众 ...

  5. linux查看php命令目录权限,PHP执行linux命令mkdir权限问题

    在linux系统中,root帐号执行php命令: mkdir('test', 0777); 结果文件的权限依然为: drwxr-xr-x 2 root root   Jul 27 19:30test ...

  6. linux查看进程的内存使用情况,[转]linux下查看进程内存使用情况

    动态查看一个进程的内存使用 1.top命令 top -d 1 -p pid [,pid ...] //设置为delay 1s,默认是delay 3s 如果想根据内存使用量进行排序,可以shift + ...

  7. linux查看磁盘对应槽位,一种linux系统硬盘槽位识别方法与流程

    技术领域 本发明涉及计算机技术领域,尤具体地说是一种实用性强.linux系统硬盘槽位识别方法. 背景技术: 近年来,随着技术的迅速发展,linux系统的应用也越来越广泛,特别对于国产处理器,linux ...

  8. linux查看执行过的命令行,在Linux命令终端中查看和编辑曾执行过的命令 – LINUX笔记 – CFEI.NET...

    今天我们来讲讲linux的知识,积累的这些知识就是我们以后的财富,各位加油. 因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正.一切为了知识的分享. history 命令 ...

  9. linux查看ogg客户端版本,OGG学习笔记05-OGG的版本

    刚接触OGG的时候,很容易被众多的版本搞晕,虽然官方有提供各版本对应认证OS和DB的表格. 个人认为一个比较简单的方式,是直接去edelivery.oracle.com下载OGG,选定一个大版本后,这 ...

最新文章

  1. MSF渗透测试-CVE-2017-11882(MSOffice漏洞)
  2. 磁悬浮地球仪底座驱动电路板分析
  3. Spring 梳理 - ContentNegotiatingViewResolver
  4. 测验3: 基本数据类型 (第3周)
  5. Web ML+ WebAssembly 支持实现 Google Meet 背景模糊功能
  6. 如何提高数据库访问效率
  7. js兼容性——获取当前浏览器窗口的宽高
  8. AngularJs ngIf、ngSwitch、ngHide/ngShow
  9. android 克隆对象,克隆会破坏单例对象吗?
  10. 同步服务器客户端位置,服务器和客户端信息同步方式
  11. java中子类怎样调用父类的属性_java的继承、重载(overload)、覆盖(override)的总结...
  12. python装饰器property_python装饰器: @property
  13. 日历php 价格 库存,jQuery web 组件 后台日历价格、库存设置的代码
  14. 11.history命令历史
  15. AR技术介绍(Located in Android)
  16. IEEE论文投稿模板大全
  17. 手机内存垃圾不会清理?学会删除这几个文件夹,瞬间腾出几个G
  18. __kindof用法
  19. CTR和CVR联合训练
  20. yaml配置Mybatis

热门文章

  1. MariaDB安装手册
  2. Java50道经典习题-程序23 求岁数
  3. C语言文件——字符读出与写入
  4. 痘痘消失,美丽再现!
  5. Linux程序之触摸,linux触摸屏touch screen调用测试程序
  6. 防患于未然是最好的解决勒索软件方法
  7. 苹果cms V10采集之绑定分类、取消绑定教程
  8. 说说延时队列实现的几种姿势
  9. 微信 - 公众号开发基础配置
  10. uniapp实现app自动检测更新