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

Linux下取本机所有网口的ip地址

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

<!-- lang: cpp -->
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <arpa/inet.h>

/* Sample: 取本机所有网口的ip地址 */
int main(int argc, char** argv)
{
    int ret = 0;
    int fd = -1;
    
    fd = socket(AF_INET, SOCK_DGRAM, 0);
    if ( fd < 0 ) {
        printf("%s@%d: error, errno = %d\n", __FILE__, __LINE__, errno);
        ret = -1;
        goto out;
    }

    // 要小心,这里是最大取32个网口,如果有超过32个网口;下面ioctl会踩内存的。
    struct ifconf ifc;
    struct ifreq buf[32];
    memset(buf, 0, sizeof(buf));
    ifc.ifc_len = sizeof(buf);
    ifc.ifc_buf = (caddr_t)buf;

    ret = ioctl(fd, SIOCGIFCONF, (char*)&ifc);
    if ( ret < 0 ) {
        printf("%s@%d: error, errno = %d\n", __FILE__, __LINE__, errno);
        goto out;
    }

    int ifcnt = ifc.ifc_len / sizeof(struct ifreq);
    while ( ifcnt-- > 0 ) {
        ret = ioctl(fd, SIOCGIFADDR, (char*)&buf[ifcnt]);
        if ( ret < 0 ) {
            printf("%s@%d: error, errno = %d\n", __FILE__, __LINE__, errno);
            goto out;
        }
        printf("%s: %s\n", buf[ifcnt].ifr_name, 
                inet_ntoa(((struct sockaddr_in*)(&buf[ifcnt].ifr_addr))->sin_addr));
    }

out:
    if ( fd >= 0 )
        close(fd);
    
    return ret;
}

转载于:https://my.oschina.net/jonas1q84/blog/113148

相关文章:

  • android 蓝牙源码分析
  • 新版本的GNS3(0.8.2)模拟ASA的教程
  • LVM的综合性介绍及实现
  • (实战篇)如何缓存数据
  • android 抓包分析
  • 从外形如何分辨iTouch是几代的?
  • Word中使用正则表达式进行查找和替换
  • 打开Windows2008 R2 Server Manager或执行Windows Update时出现0x800F0818错误
  • 针对11.2 RAC丢失OCR和Votedisk所在ASM Diskgroup的恢复手段
  • Linux 获取CPU温度
  • OpenCV第五章练习p163_5~8
  • 用gdbserver调试共享库(二)
  • java类型通配符
  • 用jQuery实现一些导航条切换,显示隐藏
  • ASP.NET 学习笔记_02 Calender的使用
  • @jsonView过滤属性
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Angular6错误 Service: No provider for Renderer2
  • canvas绘制圆角头像
  • CentOS 7 防火墙操作
  • EOS是什么
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Promise面试题,控制异步流程
  • React-flux杂记
  • webpack入门学习手记(二)
  • XForms - 更强大的Form
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 聚簇索引和非聚簇索引
  • 理解在java “”i=i++;”所发生的事情
  • 那些年我们用过的显示性能指标
  • 深度学习在携程攻略社区的应用
  • 项目实战-Api的解决方案
  • 一个JAVA程序员成长之路分享
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)nginx 安装、启停
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .NET Core 版本不支持的问题
  • .net framework4与其client profile版本的区别
  • .net mvc部分视图
  • .NET企业级应用架构设计系列之结尾篇
  • .NET学习教程二——.net基础定义+VS常用设置
  • @Documented注解的作用
  • [2016.7 test.5] T1
  • [20170705]diff比较执行结果的内容.txt
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [Android]Android开发入门之HelloWorld
  • [autojs]逍遥模拟器和vscode对接
  • [BJDCTF 2020]easy_md5