linux获取ipv6公网ip,Linux 获取IPv6网关

2023-11-10

基于hisi3536实现的,ubuntu下只要找到对应的配置文件(ipv6_route)即可

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PROCNET_ROUTE_PATH        "/proc/net/route"

#define PROCNET_IFINET6_PATH      "/proc/net/if_inet6"

#define PROCNET_ROUTE_IPV6_PATH "/proc/net/ipv6_route"

#define SCOPE_LINK_STR            "fe80"

int net_get_ipv6_gateway2(char type, const char *ifname, char *addr, int length)

{

FILE *fp;

char addr6[46] = {0};

char tmpAdd6[8][5];

char tmpOther[9][64];

struct sockaddr_in6 sap = {0};

if (!ifname || !addr || length <= 0)

return -1;

fp = fopen(PROCNET_ROUTE_IPV6_PATH, "r");

if (!fp) return -1;

lockf(fileno(fp), F_LOCK, 0);

while (fscanf(fp, "%s %02s %s %s %4s%4s%4s%4s%4s%4s%4s%4s %s %s %s %s %20s\n",

tmpOther[0], tmpOther[1], tmpOther[2], tmpOther[3],

tmpAdd6[0], tmpAdd6[1], tmpAdd6[2], tmpAdd6[3],

tmpAdd6[4], tmpAdd6[5], tmpAdd6[6], tmpAdd6[7],

tmpOther[4], tmpOther[5], tmpOther[6], tmpOther[7], tmpOther[8]) != EOF) {

if (!strcmp(tmpOther[8], ifname) && atoi(tmpOther[1]) == 0) {

sprintf(addr6, "%s:%s:%s:%s:%s:%s:%s:%s",

tmpAdd6[0], tmpAdd6[1], tmpAdd6[2], tmpAdd6[3],

tmpAdd6[4], tmpAdd6[5], tmpAdd6[6], tmpAdd6[7]);

if (strncmp(tmpAdd6[0], SCOPE_LINK_STR, strlen(SCOPE_LINK_STR)) == 0) {

//fe80 Scope:Link

if (type == 1) {

inet_pton(AF_INET6, addr6, &sap.sin6_addr);

inet_ntop(AF_INET6, &sap.sin6_addr, addr, length);

lockf(fileno(fp), F_ULOCK, 0);

fclose(fp);

return 0;

}

} else {

//2001 Scope:Global

if (type == 0) {

inet_pton(AF_INET6, addr6, &sap.sin6_addr);

inet_ntop(AF_INET6, &sap.sin6_addr, addr, length);

lockf(fileno(fp), F_ULOCK, 0);

fclose(fp);

return 0;

}

}

}

}

lockf(fileno(fp), F_ULOCK, 0);

fclose(fp);

return -1;

}

//demo

char ip6Addr[64] = {0};

net_get_ipv6_gateway2(0, "eth0", ip6Addr, sizeof(ip6Addr));

root@IT-PC-135:/home/user1/# cat /proc/net/ipv6_route

20010f80075400000000000000000000 40 00000000000000000000000000000000 00 00000000000000000000000000000000 00000100 00000000 00000001 00000001 eth0

fe800000000000000000000000000000 40 00000000000000000000000000000000 00 00000000000000000000000000000000 00000100 00000000 00000000 00000001 eth0

00000000000000000000000000000000 00 00000000000000000000000000000000 00 20010f80075400000000000000000001 00000001 00000000 00000000 00000003 eth0

00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 000001d6 00200200 lo

00000000000000000000000000000001 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000001 00000476 80200001 lo

20010f80075400000000000000000050 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000001 00000268 80200001 lo

fe80000000000000922b34fffe4e70f4 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000001 0000003d 80200001 lo

ff000000000000000000000000000000 08 00000000000000000000000000000000 00 00000000000000000000000000000000 00000100 00000000 00000000 00000001 eth0

00000000000000000000000000000000 00 00000000000000000000000000000000 00 00000000000000000000000000000000 ffffffff 00000001 000001d6 00200200 lo

# cat /proc/net/ipv6_route --查看设备的ipv6路由信息,以一个条目为例。

fe80000000000000023439fffea33934 80 00000000000000000000000000000000 00 00000000000000000000000000000000 00000000 00000001 00000000 80200001

解释:

fe80000000000000023439fffea33934 80 :为目的网络及前缀。

00000000000000000000000000000000 00:只有主路由表,则默认0。

00000000000000000000000000000000:网关地址。

00000000:rt->rt6i_metric rt6_select时使用,路由选择的条件。

00000001:rt->dst.__refcnt 路由表管理时使用。

* __refcnt wants to be on a different cache line from

* input/output/ops or performance tanks badly

00000000:rt->dst.__use 路由被使用次数。

80200001:rt->rt6i_flags 是否刷新等。

参考:http://blog.csdn.net/eleven_xiy/article/details/72777931

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux获取ipv6公网ip,Linux 获取IPv6网关 的相关文章

  • wps如何自己制作流程图_怎么制作流程图,wps自动生成流程图方法

    在职场中我们要会熟练使用各种办公软件 才能提高我们的工作效率 下面我为大家分享三种制作流程图的方法 非常简单哦 一 在Word中制作流程图 1 首先点击 插入 再点击 形状 点击新建绘图画布 就出来画布了 2 再点击 插入 形状 会出现流程
  • IDEA配置tomcat并发布web项目的步骤

    目录 一 配置Tomcat具体步骤 1 创建一个项目 2 新建一个模块 3 添加框架支持 4 在IDEA 中部署工程到Tomcat 上运行 5 运行web程序 二 Tomcat服务器 1 Tomcat服务器介绍 2 Tomcat目录的介绍
  • 上海万应云数科——全国企业大数据信息底座

    上海万应云数字科技有限公司 基于企业全量数据库 重点具有如下几方面能力 1 量化管理 量化企业现状 全量信息 工商 行政 司法 知识产权 上市 经营等 量化企业标识 特征信息 五型经济 资质 产 业链 业务方向 信用 风险 量化企业发展 评
  • 【磕盐随记】关于位姿估计中的左导和右导,局部扰与全局扰动

    昨天写了一个点面ICP的小程序 用于评估退化性 我自己加一个扰动当作先验状态x0 R0 然后试图让扰动后的点云帧与地图匹配 以恢复扰动前的位置 原理很简单 只需要用高斯牛顿法求解 然后每次迭代重新搜索关联匹配就行了 但是 在这一过程中 我发
  • 【三分钟教程】docker快速部署nginx服务

    1 下载nginx镜像 root localhost docker pull nginx 1 14 1 14 Pulling from library nginx 27833a3ba0a5 Pull complete 0f23e58bd0b
  • 【Elasticsearch】学好Elasticsearch系列-Mapping

    本文已收录至Github 推荐阅读 Java随想录 先看后赞 养成习惯 点赞收藏 人生辉煌 文章目录 Mapping 的基本概念 查看索引 Mapping 字段数据类型 数字类型 基本数据类型 Keywords 类型 Dates 时间类型
  • Python3中出现'gbk' codec can't encode characte的成功解决方法?

    亲身测试 所遇问题完全解决 2018 07 08 21 37 环境 windows Pycharm python3 6 2 使用Python写文件的时候 或者将网络数据流写入到本地文件的时候 大部分情况下会遇到 UnicodeEncodeE
  • 爱心css特效,CSS3 SVG点击爱心散开动画特效

    margin 0 padding 0 box sizing border box position relative svg like position fixed z index 10 top calc 50vh 160px left c
  • C#_基础题1-10套

    one 1 用户输入一个整数 用if else判断是偶还是奇 2 输入一个字母 判断是大写还是小写字母 3 求1 99所有奇数的和 用while语句 4 用户输入三个整数 将最大数和最小数输出 5 输入三个数 按从小到大的顺序排列 6 将1
  • 【JavaWeb】 CSS基础 学习笔记

    CSS 一 CSS选择器 标签名选择器 id选择器 class 选择器 类选择器 组合选择器 二 常用样式 字体颜色 宽度 和 高度 背景颜色 字体样式 红色 1 像素实线边框 DIV 居中 文本居中 超连接去下划线 表格细线 列表去除修饰
  • 2022-02-08 读书笔记:《精通特征工程》1 基础特征工程

    精通特征工程 速读学习1 基础特征工程 该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 time 2022 02 08 学习目标 通过Python示例掌握特征工程基本原则和实际应用 增强机器学习算法效果 目录 第1
  • 每日一题(最长回文长度字符串)

    题目要求 给你一个字符串 s 找到 s 中最长的回文子串 原串中连续不断的串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s
  • python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv

    python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv 在这篇技术博客中 我将介绍如何从头开始构建一个基于XPath的HTML解析爬取到的美食数据并可视化 并将其应用于一个具体的例子 我亲自写的完整代码 c
  • 输入网址后到网页显示出来会发生什么?

    当你输入一个网址的时候 后台到底发生了一件件什么样的事 原文http www cnblogs com wenanry archive 2010 02 25 1673368 html
  • python——变量和简单的数据类型

    第2章 变量和简单数据类型 2 1 运行hello world py时发生了什么 print Hello python world Hello python world 在运行以上文件时 python解释器读取整个程序 确定其中每个单词的含
  • 【msvcr120.dll下载】msvcr120.dll丢失怎么修复

    遇到因为msvcr120 dll文件丢失而无法正常运行软件或游戏程序的朋友们不用着急了 根据小编整理的这篇教程文章 将msvcr120 dll文件放在操作系统 system32 文件夹的合适位置 便能解决这一问题 缺少哪一项dll 在运行软
  • RangeRCNN阅读笔记

    RangeRCNN阅读笔记 概述 摘要 绪论 创新点与主要贡献 相关工作 3D目标检测 3D语义分割 方法描述 网络结构 距离图主干 RV PV BEV 3D RoI Pooling 损失函数 实验 细节 消融实验 结论 另一波总结与思考
  • 三阶矩阵的lu分解详细步骤_计算方法(三)矩阵分解2-LU分解

    LU分解 LU Decomposition 是矩阵分解的一种 可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积 作为解线性方程以及优化高斯消去法的一个分解方法 在后续文章中会使用到 如下列方程组Ax b 系数矩阵A为 则矩阵可以被分
  • 解决[Vue warn]: Invalid prop: custom validator check failed for prop “index“的问题

    解决方法 index里面呢的 index的值不能有空格 并且要为字符串类型 然后在后面加上 toString

随机推荐