找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15872|回复: 6

[脚本] 【求助】为什么更改IP地址,手动输入就OK,脚本就变成0.0.0.0

[复制链接]
发表于 2021-2-21 21:27:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
本帖最后由 57068368 于 2021-2-21 21:28 编辑

上面的代码就是通过大猫的云得到另一个地方的地址。
:log warning $gettestbl   从云上得到另一地方IP地址。显示地址正常。

:global oldgettestbl [/interface gre get gre-tunnel2 value-name=remote-address]   从本机得到老的地址,
:log warning $oldgettestbl    显示老的地址,

:if ($gettestbl != $oldgettestbl) do= {/interface gre set gre-tunnel2 remote-address=$gettestbl   判断新地址与老地址是否一样,不一样进行更改地址,就这一步就出错了,一改地址,就变成了0.0.0.0,希望帮忙看看那里有问题。

:log warning "地址更换完成"
} else={
:log warning "地址一样不需要更换"}



自己在命令行上直接手动打  interface gre set gre-tunnel2 remote-address=$gettestbl 这条命令就能直接更换成IP地址。放到脚本里面就成0.0.0.0
routeros
 楼主| 发表于 2021-2-21 21:33:21 | 显示全部楼层
:local mycvtoken "不能写的秘密"  
:local result [/tool fetch url="https://mail.ros6.com:5656/get&testbl" check-certificate=no as-value output=user http-header-field=("Token:".$mycvtoken)]  
:if ($result->"status" = "finished") do={  
:global gettestbl ($result->"data")  
:log warning $gettestbl  }

:global oldgettestbl [/interface gre get gre-tunnel2 value-name=remote-address]
:log warning $oldgettestbl

:if ($gettestbl != $oldgettestbl) do= {/interface gre set gre-tunnel2 remote-address=$gettestbl  

:log warning "地址更换完成"}
else={
:log warning "地址一样不需要更换"}
routeros
回复

使用道具 举报

发表于 2021-2-22 00:44:48 | 显示全部楼层
:global oldgettestbl [/interface gre get gre-tunnel2 value-name=remote-address]

value-name=刪掉即可。
routeros
回复

使用道具 举报

 楼主| 发表于 2021-2-22 20:10:53 | 显示全部楼层
cspm333 发表于 2021-2-22 00:44
:global oldgettestbl [/interface gre get gre-tunnel2 value-name=remote-address]

value-name= ...

设置地址时还是出错,主要是在这一句上,  帮忙看看应该如何修改,谢谢。:if ($gettestbl != $oldgettestbl) do= {/interface gre set gre-tunnel2 remote-address=$gettestbl }  判断新地址与老地址是否一样,不一样进行更改地址,就这一步就出错了,一改地址,就变成了0.0.0.0,希望帮忙看看那里有问题。

routeros
回复

使用道具 举报

发表于 2021-2-22 22:01:21 | 显示全部楼层
本帖最后由 cspm333 于 2021-2-22 22:05 编辑
57068368 發表於 2021-2-22 20:10
設置地址時還是出錯,主要是在這一句上,  幫忙看看應該如何修改,謝謝。:if ($gettestbl != $oldgettest ...

您script開頭沒宣告gettestbl,腳本讀不到gettestbl變數值,空值時remote-address自然填0.0.0.0

  1. :global gettestbl
  2. :log warning $gettestbl

  3. :global oldgettestbl [/interface gre get "gre-tunnel2" remote-address]

  4. :if ($gettestbl!=$oldgettestbl) do={
  5. /interface gre set "gre-tunnel2" remote-address=$gettestbl
  6. :log warning "地址更換完成"
  7. } else={
  8. :log warning "地址一樣不需要更換"
  9. }
复制代码

routeros
回复

使用道具 举报

发表于 2021-2-24 10:48:44 | 显示全部楼层
你这个不说其他的代码问题

首先你的 gettestbl ip没有进行转码判断

首先需要进行获取成功判断

成功后进行ip 类型判断

然后才进行修改动作

做好上面流程应该是没有问题的了
routeros
回复

使用道具 举报

 楼主| 发表于 2021-3-2 20:43:38 | 显示全部楼层
经与大猫猫学习得知自己错在
:global oldgettestbl [/interface gre get "gre-tunnel2" remote-address]
这条上面了,没有在上面定义OLDGETTESTBL的类型,应先用:global oldgettestbl 进行定义,然后使用:set oldgettestbl [/interface gre get "gre-tunnel2" remote-address] 得到地址,然后后面进行更改就没有问题了。
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-3-29 19:01 , Processed in 0.350668 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表