获取openwrt wan口ip方法

2023-11-20

2020年7月30日14点39分

更新:
之前写的方法,获取的是wan口的ip和网关,使用过程发现,以有线上网模式为例,获取wan口网关时,若网关中出现连续的1.1,会获取失败,表明该正则表达式是有问题的。即下面这个grep -oE 之后的内容有问题。

ubus call network.interface.wan status | grep nexthop | grep -oE '([0-9]{1,3}.){3}.[0-9]{1,3}'

检查后发现,在’([0-9]{1,3}.){3}.[0-9]{1,3}'中,“{3}”之后多了一个“.”,去掉之后,1.1可以正确获取。或者按照获取ip的表达式来写,也是一样可以正确获取。

ubus call network.interface.wan status | grep nexthop | grep -oE '([0-9]{1,3}.){3}[0-9]{1,3}'

但带来的另外一个问题是,这种方式会有两个返回值,一个是0.0.0.0,另一个是正常的网关。

0.0.0.0
192.168.60.1

如果用这个方法,就需要对两个返回值再做一次处理。暂时没有想好怎么处理,又重新找了其他方式,如下所示:

route -n |awk 'NR==3{print}'| awk '{ print $2; }'

以查询路由表的形式获取。

route -n 

获取到路由表,对结果处理,如下,取第三行,第二列的字符串

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.60.1    0.0.0.0         UG    0      0        0 eth0.2
192.168.60.0    0.0.0.0         255.255.254.0   U     0      0        0 eth0.2
192.168.60.1    0.0.0.0         255.255.255.255 UH    0      0        0 eth0.2
192.168.250.0   0.0.0.0         255.255.255.0   U     0      0        0 br-lan

结果为:

192.168.60.1

到此,就可以获取到wan口网关了,欢迎大家补充。

------------------------------------------------------------分割线--------------------------------------------------------------

2020年5月14日18点20分

输入以下命令后,直接返回ip,在函数中使用时,可以封装popen函数来执行shell命令,获取返回结果。

有线上网wan口ip

ubus call network.interface.wan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

有线上网wan口网关

ubus call network.interface.wan status | grep nexthop | grep -oE '([0-9]{1,3}.){3}.[0-9]{1,3}'

4g上网模式ip

ubus call network.interface.ppp0 status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

4g上网模式wan口网关

ubus call network.interface.ppp0 status | grep nexthop | grep -oE '([0-9]{1,3}.){3}.[0-9]{1,3}'

wifi上网模式wan口ip

ubus call network.interface.wwan status | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

wifi上网模式wan口网关

ubus call network.interface.wwan status | grep nexthop | grep -oE '([0-9]{1,3}.){3}.[0-9]{1,3}'

在C语言中调用以上shell命令,返回值就是对应的IP信息。关于C语言中调用shell命令,可以看另一篇文章:C语言获取linux shell命令返回值

参考: https://blog.csdn.net/u011007991/article/details/52994101

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

获取openwrt wan口ip方法 的相关文章

随机推荐

  • Qt使用QChart制作多路虚拟示波器

    使用QT做虚拟示波器 共16通道 波形是重叠在一起 不同颜色区分 想用写好的TCP传输来让单片机与电脑通信 解刨数据 放入到示波器中进行显示 准备工作 首先我缺一个绘图的控件 于是在网上找了找 网上给我介绍的有三种 分别是qcustompl
  • C、C++、C#、python、java编程—函数

    C资料 菜鸟教程 C语言中文网 C community C 资料 菜鸟教程 cplusplus C community C 资料 菜鸟教程 microsoftC 文档 python资料 菜鸟教程 python标准库 Java资料 菜鸟教程
  • 【Ansible故障解决】解决Ansible初始连接host服务器需验证问题

    Ansible故障解决 解决Ansible初始连接host服务器需验证问题 一 ansible介绍 二 修改ansible cfg配置文件 1 ansible的配置文件修改 2 修改配置文件中的其他部分 3 编辑主机清单 三 测试ansib
  • sh、bash 和 dash 几种 shell 的区别是什么?

    在调试基于 Debian 的 Docker 镜像时 进入容器后在终端中按上箭头键后终端显示 A 下箭头显示 B 右箭头显示 C 左箭头显示 D 按删除键也是显示了几个特殊字符 很奇怪 仔细看了一下 原来进入容器的时候终端使用的 sh 切换为
  • iPhone惊爆史诗级漏洞:亿万台手机可永久越狱 苹果无法修复

    在我认为完美越狱已死的时候没想到国外大神爆出了一个 不可修补 iPhone漏洞 这个漏洞会让iPhone永久越狱从iPhone 4S到iPhone X的所有设备均会受到影响 但是目前还是不支持A12芯片的 据发现它的安全研究员axi0mX称
  • C++实现大数运算(加减乘除求余)

    前言 只有部分GCC编译器支持int128 而我们平常使用的软件 最大只有 int64 当这些不够用时 我们该怎么办 我本身想写代码实现整数型大数据的加减乘除和求余 结果写着写着想着连小数运算的也一起写上 反正加的代码不多 电脑是死的 人是
  • 报错解决:No module named tensorflow.contrib

    今天在跑代码的时候发现一个报错 如下图所示 于是乎我就按照下面的提示安装啊 可惜的是 无效 然后我就去查了下自己的TensorFlow版本 是1 15 再看了下Readme md 怀疑是不是版本太高了 想到就做 换了个低版本的TensorF
  • ruoyi(若依)分离版框架,FluentMybatis封装后,导入功能的前后端实现

    我这里使用的是车辆来作为示例 首先是前端 导入按钮 点击导入按钮后的对话框 导入的一系列方法 下面是后端 Controller层 我们使用了FluentMybatis进行了封装 mapper层被封装了 但会有一些封装好的方法 我们只要 利用
  • vue 项目中使用高德地图

    官方文档 高德地图API官网 高德地图2 0参考手册 高德地图JS API 2 0 示例 在项目中使用 vue amap 高德地图JSAPI在Vue框架下使用 高德地图在线 JS API 示例 一 账号准备 首先 需要注册并登录高德地图开放
  • uni-app 之 表格设置

    uni app 之 表格设置 image png
  • QT connect()连接函数

    函数重载 连接函数后多种重载方法 常用的有 函数4个参数 发射信号的对象 发射的信号 接受信号的对象 要执行的槽 按键单击信号连接到按键槽函数 方法1 connect ui gt pushButton SIGNAL clicked bool
  • java与C++之间的区别

    前言 研究生期间主要使用的是C 语言 因工作的要求 现在需要学习java语言 在学习的这段时间里 发现两种语言之间有着很多相似的地方 但又有一些区别 下面说一下java和c 中比较显著的区别 适用于有c 基础的读者 一 在数据类型 关键字方
  • 销售人员的月工资数量(月工资=基本工资+提成,提成=商品数*1.5)

    include
  • mfc窗口创建的create与oncreate

    在view类中 create 是虚函数由框架调用 是用来 生成一个窗口的子窗口 oncreate 消息响应函数 是用来 表示一个窗口正在生成 某个CWnd的Create函数由当前CWnd的Owner调用 而在CWnd Create中 又会调
  • JDBC乱码解决方法

    JDBC操作数据库出现中文乱码解决方案 学习JDBC的时候 我不止一次碰到过数据库中文乱码问题 解决方法其实很简单 在配置文件的url中加入如下语句就ok了 useUnicode true characterEncoding utf8 出现
  • MySQL幻读:大家好,我是幻读,我今天又被解决了

    什么是幻读 幻读的定义我这里还得补充一句 幻读仅专指 新插入的行 中途通过 update 更新数据而出现同一个事务前后两次查询的 结果集合 不一样 这种不算幻读 然后前几天有位读者跟我说 这个幻读例子不是已经被 可重复读 隔离级别解决了吗
  • localStorage和sessionStorage和Cookie的区别

    localStorage和sessionStorage和Cookie是前端开发中三种常见的临时存储客户端会话信息或者数据的方法 它们都存储在客户端中 区别 一 三者存储的有效时期不同 1 Cookie存储的有效时期可以设置 一般在浏览器关闭
  • 实战wxPython:042 - 高级控件之选项卡Notebook

    在wxPython中 book控件允许用户在各种面板之间切换 最常见的例子是带有选项卡界面的浏览器和系统选项对话框 选项卡wx Notebook提供了一个选项卡栏和一个 页面区域 该页面区域用于显示与每个选项卡相关的页面 默认情况下 选项卡
  • Anaconda下载速度慢,用清华镜像

    Anaconda在官网下载速度慢 关键是下载到一半就没了 清华镜像相对还是要好一点 以下网址持续更新 https mirrors tuna tsinghua edu cn anaconda archive
  • 获取openwrt wan口ip方法

    2020年7月30日14点39分 更新 之前写的方法 获取的是wan口的ip和网关 使用过程发现 以有线上网模式为例 获取wan口网关时 若网关中出现连续的1 1 会获取失败 表明该正则表达式是有问题的 即下面这个grep oE 之后的内容