当前位置: 首页 > news >正文

通过Socket configuration controls 获取网络设备地址

常用的头文件, 基本通用了.

#ifndef _INC_H #define _INC_H #include <stdio.h> #include <errno.h> #include <time.h> #include <signal.h> #include <stdint.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <getopt.h> #include <inttypes.h> #include <sys/types.h> #include <sys/time.h> #include <sys/file.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netinet/in_systm.h> #include <netinet/in.h> #include <netinet/ip.h> #include <netinet/ip_icmp.h> #include <arpa/inet.h> #include <netdb.h> #include <sys/select.h> #include <net/if.h> #include <sys/ioctl.h> #endif

代码实现:

其他Socket configuration controls可以在/usr/include/bits/ioctls.h中查看到.

static int iface_sock = -1; int iface_init(void) { int sock = -1; sock = socket( AF_INET, SOCK_DGRAM, 0 ); if ( sock < 0 ) { fprintf( stderr, "create socket for iface fail.\n" ); return -1; } iface_sock = sock; return 0; } void iface_destory(void) { if ( iface_sock < 0 ) return ; close( iface_sock ); } int iface_address_by_name(char *devname, uint32_t *addr) { int err = -1; struct ifreq ifr; if ( iface_sock < 0 ) { goto _out; } strcpy( ifr.ifr_name, devname ); err = ioctl( iface_sock, SIOCGIFADDR, &ifr, sizeof( ifr ) ); if ( err < 0 ) { goto _out; } printf( "DEBUG: NIC-%s: %s\n", devname, inet_ntoa( ((struct sockaddr_in *)( &ifr.ifr_addr ))->sin_addr ) ); if ( addr ) { *addr = ((struct sockaddr_in *)( &ifr.ifr_addr ))->sin_addr.s_addr; } err = 0; _out: return err; } int iface_address_by_index(uint32_t index, uint32_t *addr) { int err = -1; struct ifreq ifr; if ( iface_sock < 0 ) { goto _out; } ifr.ifr_ifindex = index; err = ioctl( iface_sock, SIOCGIFADDR, &ifr, sizeof( ifr ) ); if ( err < 0 ) { goto _out; } printf( "NIC-%u-: ip=%s\n", index, inet_ntoa( ((struct sockaddr_in *)( &ifr.ifr_addr ))->sin_addr ) ); if ( addr ) { *addr = ((struct sockaddr_in *)( &ifr.ifr_addr ))->sin_addr.s_addr; } err = 0; _out: return err; } int lookup_nic_address(char *devname, uint32_t *addr) { int err = -1; int sock = 0; struct ifconf ifcs; struct ifreq *ifr; sock = socket( AF_INET, SOCK_DGRAM, 0 ); if ( sock < 0 ) { goto _out; } ifcs.ifc_len = 0; ifcs.ifc_req = NULL; err = ioctl( sock, SIOCGIFCONF, &ifcs, sizeof( ifcs ) ); if ( err < 0 ) { goto _out; } if ( ifcs.ifc_len > 0 ) { ifcs.ifc_req = malloc(ifcs.ifc_len); if (ifcs.ifc_req) { if (ioctl(sock, SIOCGIFCONF, &ifcs, sizeof( ifcs ) ) < 0) { free(ifcs.ifc_req); goto _out; } else { for (ifr = ifcs.ifc_req; (char *)ifr < (char *)ifcs.ifc_req + ifcs.ifc_len; ++ifr) { /*printf("%s\n", ifr->ifr_name);*/ if (!strcmp(ifr->ifr_name, devname )) { printf( "INIT: NIC-%s index=%u ip=%s\n", devname, ifr->ifr_ifindex, inet_ntoa( ((struct sockaddr_in *)( &ifr->ifr_addr ))->sin_addr ) ); if ( addr ) { *addr = ((struct sockaddr_in *)( &ifr->ifr_addr ))->sin_addr.s_addr; } err = 0; break; } } free(ifcs.ifc_req); } } } _out: if ( sock > 0 ) { close( sock ); } return err; }

相关文章:

  • vim amp; emacs color Scheme
  • Azure 聊天机器人3-集成luis(语言识别)服务
  • Azure聊天机器人4-实现luis dialog
  • Oprofile工具的使用
  • C# 自然语言处理1-识别文字到语音
  • 在wxPython中使用OpenGL
  • C#自然语言处理2-识别语音并执行进程
  • Winforms:只读TextBox的文字颜色不随ForeColor的改变而改变
  • c# OpenCV -1 直接比对两张图片
  • 快速LightMap烘焙
  • c# OpenCv 2-使用haarcascade模型进行人脸识别
  • irrlicht引擎源码剖析3 - 引用计数
  • 我的官方网站正式上线了!欢迎访问!
  • C# OpenCV4 -EigenFaceRecognizer识别人脸2
  • C# OpenCV5 - 使用casecade分类器
  • #Java异常处理
  • 【comparator, comparable】小总结
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • ES6--对象的扩展
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Javascript基础之Array数组API
  • js继承的实现方法
  • js学习笔记
  • JWT究竟是什么呢?
  • linux学习笔记
  • mac修复ab及siege安装
  • Mysql优化
  • mysql中InnoDB引擎中页的概念
  • PHP CLI应用的调试原理
  • Python进阶细节
  • spring-boot List转Page
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Swift 中的尾递归和蹦床
  • Vue实战(四)登录/注册页的实现
  • win10下安装mysql5.7
  • Yii源码解读-服务定位器(Service Locator)
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 分布式熔断降级平台aegis
  • 基于遗传算法的优化问题求解
  • 简单数学运算程序(不定期更新)
  • 将回调地狱按在地上摩擦的Promise
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 聊聊redis的数据结构的应用
  • 想写好前端,先练好内功
  • 新版博客前端前瞻
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 如何正确理解,内页权重高于首页?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # centos7下FFmpeg环境部署记录
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ${ }的特别功能
  • ( 10 )MySQL中的外键
  • (4)事件处理——(7)简单事件(Simple events)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (python)数据结构---字典