//通过ifreq结构体来获取接口信息
struct ifreq{
# define IFHWADDRLEN    6
# define IFNAMSIZ   IF_NAMESIZEunion{char ifrn_name[IFNAMSIZ];   /* Interface name, e.g. "en0".  */} ifr_ifrn;union{struct sockaddr ifru_addr;struct sockaddr ifru_dstaddr;  struct sockaddr ifru_broadaddr;struct sockaddr ifru_netmask;  struct sockaddr ifru_hwaddr;   short int ifru_flags;/*
enum net_device_flags {IFF_UP              = 1<<0,  /* sysfs */IFF_BROADCAST           = 1<<1,  /* __volatile__ */IFF_DEBUG           = 1<<2,  /* sysfs */IFF_LOOPBACK            = 1<<3,  /* __volatile__ */IFF_POINTOPOINT         = 1<<4,  /* __volatile__ */IFF_NOTRAILERS          = 1<<5,  /* sysfs */IFF_RUNNING         = 1<<6,  /* __volatile__ */IFF_NOARP           = 1<<7,  /* sysfs */IFF_PROMISC         = 1<<8,  /* sysfs */IFF_ALLMULTI            = 1<<9,  /* sysfs */IFF_MASTER          = 1<<10, /* __volatile__ */IFF_SLAVE           = 1<<11, /* __volatile__ */IFF_MULTICAST           = 1<<12, /* sysfs */IFF_PORTSEL         = 1<<13, /* sysfs */IFF_AUTOMEDIA           = 1<<14, /* sysfs */IFF_DYNAMIC         = 1<<15, /* sysfs */IFF_LOWER_UP            = 1<<16, /* __volatile__ */IFF_DORMANT         = 1<<17, /* __volatile__ */IFF_ECHO            = 1<<18, /* __volatile__ */
};*/     int ifru_ivalue;          int ifru_mtu;             struct ifmap ifru_map;    char ifru_slave[IFNAMSIZ];  /* Just fits the size */char ifru_newname[IFNAMSIZ];   __caddr_t ifru_data;      } ifr_ifru;};int connman_inet_ifindex(const char *name)
{struct ifreq ifr; int sk, err; if (!name)return -1;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0) return -1;memset(&ifr, 0, sizeof(ifr));strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name) - 1);err = ioctl(sk, SIOCGIFINDEX, &ifr);close(sk);if (err < 0)return -1;return ifr.ifr_ifindex;
}char *connman_inet_ifname(int index)
{struct ifreq ifr;int sk, err;if (index < 0)return NULL;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0)return NULL;memset(&ifr, 0, sizeof(ifr));ifr.ifr_ifindex = index;err = ioctl(sk, SIOCGIFNAME, &ifr);close(sk);if (err < 0)return NULL;return strdup(ifr.ifr_name);  //需要手动释放内存  free
}int connman_inet_ifup(int index)    //类似于 ifconfig up
{struct ifreq ifr;int sk, err;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0)return -errno;memset(&ifr, 0, sizeof(ifr));ifr.ifr_ifindex = index;if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {err = -errno;goto done;}if (ioctl(sk, SIOCGIFFLAGS, &ifr) < 0) {err = -errno;goto done;}if (ifr.ifr_flags & IFF_UP) {err = -EALREADY;goto done;}ifr.ifr_flags |= (IFF_UP|IFF_DYNAMIC);if (ioctl(sk, SIOCSIFFLAGS, &ifr) < 0) {err = -errno;goto done;}err = 0;done:close(sk);return err;
}///sys/class/net/xxx/flags   最终就是修改内核,在应用层映射出来就是这个配置文件  内核映射在sys文件中
int connman_inet_ifdown(int index) //类似于 ifconfig down
{struct ifreq ifr, addr_ifr;struct sockaddr_in *addr;int sk, err;sk = socket(PF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);if (sk < 0)return -errno;memset(&ifr, 0, sizeof(ifr));ifr.ifr_ifindex = index;if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {err = -errno;goto done;}if (ioctl(sk, SIOCGIFFLAGS, &ifr) < 0) {err = -errno;goto done;}memset(&addr_ifr, 0, sizeof(addr_ifr));memcpy(&addr_ifr.ifr_name, &ifr.ifr_name, sizeof(ifr.ifr_name) - 1);addr = (struct sockaddr_in *)&addr_ifr.ifr_addr;addr->sin_family = AF_INET;if (ioctl(sk, SIOCSIFADDR, &addr_ifr) < 0)connman_warn("Could not clear IPv4 address index %d", index);if (!(ifr.ifr_flags & IFF_UP)) {err = -EALREADY;goto done;}ifr.ifr_flags = (ifr.ifr_flags & ~IFF_UP) | IFF_DYNAMIC;if (ioctl(sk, SIOCSIFFLAGS, &ifr) < 0)err = -errno;elseerr = 0;done:close(sk);return err;
}

ifreq ifr 配置网口信息相关推荐

  1. Linux系统利用C语言获取网口信息(IP地址,MAC地址,状态,带宽speed等)

    目录 设计思路 ioctl操作参数 获取网口的遍历结构 获取对应的参数信息 源代码 ifinfo.c ifinfo.h test.c 测试结果 设计思路 首先给需要查询的信息定义个结构(当然,这里可以 ...

  2. 【linux】配置网口IP|RDMA配置IP|ens、eno、enp网口的区别|ping不通问题排查|DNS设置

    目录 linux网口配置IP 1.查看接口信息 2.配置IP 3.重启网络服务确认ip配置结果 一个网卡配置多个IP Centos配置DNS 配置RDMA网卡 查看哪个网口连线方法 ens.eno.e ...

  3. 在web.xml文件中配置Servlet时,主要配置哪些信息?

    web前端的学习内容是比较多的,其中有一部分就是关于在web.xml文件中配置Servlet时的相关内容,在web.xml文件中配置Servlet时,主要配置哪些信息?来看看下面的详细介绍. 使用ID ...

  4. 配置网口相机(大恒水星相机)

    配置网口相机(大恒水星相机) 相机参数: 首先查看电脑是否为支持千兆网口. 从这里看的出来(GbE)是千兆的. 也可以用鲁大师,用鲁大师查看,确实是千兆网口. 命令行输入ipconfig/all,可以 ...

  5. android wifi动画显示,android动态配置Wifi信息

    我们找到 android.net.wifi.WifiConfiguration.java 看看如何配置Wifi信息. /**************************************SS ...

  6. 计算机的相关配置信息,win7系统查看电脑配置相关信息的方案介绍

    win7系统使用久了,好多网友反馈说win7系统查看电脑配置相关信息的问题,非常不方便.有什么办法可以永久解决win7系统查看电脑配置相关信息的问题,面对win7系统查看电脑配置相关信息的图文步骤非常 ...

  7. HttpClient4.5使用RequestConfig配置连接信息

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 RequestConfig类 超时相关配置 代 ...

  8. mybatis使用拦截器显示sql,使用druid配置连接信息

    mybatis使用拦截器显示sql,使用druid配置连接信息 mybatis sql Druid 1.显示出sql内容: 新建2个类: MybatisInterceptor :拦截sql,并获得输出 ...

  9. 小程序初始化服务器数据,微信小程序 项目实战(一)生命周期 配置服务器信息 splash启动页...

    步骤一:小程序 生命周期 //app.js App({ onLaunch: function () { //当小程序初始化完成时,会触发onLaunch(全局只触发一次) }, onShow: fun ...

最新文章

  1. 别太把图神经网络当回事儿
  2. macOS完全卸载Android Studio方法
  3. Kotlin 在kotlin内使用Java的一些注意(长篇)
  4. PE文件数据结构汇总
  5. Metal之探究理解视频渲染RGB与YUV颜色编码
  6. AdoHelper使用MySQL存储过程示例
  7. java中nodelist的用法_我可以在Java中使用for-each遍历一个NodeList吗?
  8. Abaqus二次开发的一些自制脚本
  9. 6 important .NET concepts: - Stack, heap, Value types, reference types, boxing and Unboxing.
  10. 安装Firefly错误-Unable to find vcvarsall.bat
  11. 基于javaweb的学生考勤管理系统(java+SSM+Poi导出+Easyui+JFreeChart+maven+mysql)
  12. 锐捷校园网自动认证路由脚本
  13. HiTool工具烧录uImage过程
  14. Windows开启卓越性能模式,一键睿频
  15. 洛谷-UVA12676 Inverting Huffman(反转树)
  16. java 去系统运行时间_java 如何获取应用的运行时间
  17. 应用之星推出“图文app”制作工具,并附上教程
  18. 牛客网练习赛36 Ribbit的数列 分块
  19. 外网访问内网FTP服务器
  20. 高压加工食品的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

热门文章

  1. 深思iOS应用加固方案
  2. 强制删除|病毒清除好帮手Unlocker
  3. window服务器加固(等保2级)
  4. Kendo UI Web教程大全
  5. 电路设计漫谈之:高频喜欢低感抗,低频喜欢低(电)阻抗 - 再谈接地
  6. [AHK]用AutoHotkey面向对象实践“观察者模式”
  7. Property使用
  8. Python中for语句的使用方法
  9. 国产系统之殇:你知道的这些系统都是国外的
  10. 一篇看懂顺序表!!(刘欣大佬《码农翻身》特别提及)