首页 > 编程语言 >golang实现R6900路由器外网IP更新通知程序

golang实现R6900路由器外网IP更新通知程序

时间:2024-04-11 12:14:34浏览次数:30  
标签:mailConn R6900 string err IP golang ip return 路由器

程序一分钟执行一次,检测路由器外网IP地址变更则自动发送邮件,使用网易126 smtp协议发送邮件,邮箱地址及授权码请自行替换,getIp函数中的grep根据自己的网卡信息调试替换

R6900路由器的交叉编译语句:CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=5 go build xxxx.go

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 package main   import (     "fmt"     "gopkg.in/gomail.v2"     "io/ioutil"     "log"     "os/exec"     "strconv"     "time" )   // 邮件主题 var subject = "路由器外网IP更新"   //定义收件人 var mailTo = []string{     "****@qq.com",     "****@163.com", }   // ip地址 var ip string   func main() {     ip := getIp()     send(ip)     ticker := time.NewTicker(time.Minute * 1)     for range ticker.C {         newIp := getIp()         if newIp != ip {            ip = newIp            send(ip)         }     } }   // 获取当前ip func getIp() string {     return execCmd("/usr/sbin/ip a | grep 'scope global ppp0' | awk '{print $2}'") }   // 发送邮件 func send(ip string) {     body := "新的外网IP为:" + ip     log.Print(body)     err := execSend(mailTo, subject, body)     if err != nil {         log.Print("mail send fail")         log.Print(err)         return     }     log.Print("mail send successfully") }   // 执行发送 func execSend(mailTo []string, subject string, body string) error {     mailConn := map[string]string{         "user""****@126.com",         "pass""********",         "host""smtp.126.com",         "port""25",     }       port, _ := strconv.Atoi(mailConn["port"])       m := gomail.NewMessage()       m.SetHeader("From", m.FormatAddress(mailConn["user"], "路由器R6900"))     m.SetHeader("To", mailTo...)    //发送给多个用户     m.SetHeader("Subject", subject) //设置邮件主题     m.SetBody("text/html", body)    //设置邮件正文       d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"])       err := d.DialAndSend(m)     return err }   // 执行shell命令 func execCmd(command string) string {     cmd := exec.Command("/bin/sh""-c", command)     stdout, _ := cmd.StdoutPipe()     if err := cmd.Start(); err != nil {         fmt.Println("Execute failed when Start:" + err.Error())         return ""     }     out_bytes, _ := ioutil.ReadAll(stdout)     stdout.Close()       if err := cmd.Wait(); err != nil {         fmt.Println("Execute failed when Wait:" + err.Error())         return ""     }     return string(out_bytes) }

标签:mailConn,R6900,string,err,IP,golang,ip,return,路由器
From: https://www.cnblogs.com/lvjinlin/p/18128745

相关文章

  • 深入浅出 妙用Javascript中apply、call、bind
    这篇文章实在是很难下笔,因为网上相关文章不胜枚举。巧合的是前些天看到阮老师的一篇文章的一句话:“对我来说,博客首先是一种知识管理工具,其次才是传播工具。我的技术文章,主要用来整理我还不懂的知识。我只写那些我还没有完全掌握的东西,那些我精通的东西,往往没有动力写。炫耀从来......
  • iPad手绘+Ai二合一课程,Procreate+Mj+SD零基础到精通(10节视频课)
    课程内容:1系统课AI辅助设计流-从零进阶轻松驾驭AI设计,mp42商务沟通阶段ChatGPTMidjourney-聊天机器人项目调研资料收集,mp43_商务沟通阶段ChatGPT_Midjourney-Midjourney基础界面初识初步设置.mp44_商务沟通阶段ChatGPT_Midjourney-Midjourney基础Prompt结......
  • pip重装
    查找pip文档中提出的重装pip的解决方案ensurepip模块重装pipPython自带一个ensurepip模块,可以在Python环境中安装pip。linux操作系统命令:$python-mensurepip--upgradeShellCopy苹果操作系统命令:$python-mensurepip--upgradeShellCopywindows操作系列命......
  • SIPA INAF U8145 危地马拉的贫困和不平等关系分析
    问题集3:SIPAINAFU8145危地马拉的贫困和不平等关系分析定于4月5日星期五晚上11:59,上传到Courseworks上的一个pdf文件中在本练习中,您将对危地马拉的贫困和不平等现象进行评估。数据来自《生活条件百科全书》(ENCOVI)2000年,由国家统计研究所(INE)收集危地马拉国家统计研究所,在世界银行......
  • iptables命令
    iptables命令语法顺序 -L显示所选链的所有规则。如果没有选择链,所有链将被显示。也可以和z选项一起使用,这时链会被自动列出和归零。精确输出受其它所给参数影响。-n只显示数字ip、port-t指定表-Aappend,追加最后-Iinsert最前面插入新规则-D删除规则-p......
  • iptables
    软件防火墙Linux提供的软件防火墙,名为iptables,它可以理解为是一个客户端代理,通过iptables的代理,将用户配置的安全策略执行到对应的安全框架中,这个安全框架称之为netfilter。iptables是一个命令行的工具,位于用户空间,我们用这个工具操作真正的框架,也就是netfilter真正实现流量过......
  • JavaScript处理异步循环的技术详解
    文章的更新路线:JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题(HTML基础知识和CSS基础知识已经更新完毕)正文使用async/await和Promise:优势:代码简洁,易读,适用于处理依赖关系较强......
  • Ubuntu-kali配置动态ip(简单)
    使用gedit文本编辑器打开网络接口配置文件gedit/etc/network/interfaces新增两行内容如下:autoeth0ifaceeth0inetdhcp其意思为:网卡开机自动挂载,以DHCP方式配置网卡。点击保存后叉掉。同样,使用文本编辑器打开resolv.conf配置文件。该配置文件主要作用是解析域名ged......
  • C/C++学习笔记-eclipse不支持C++11问题
    转 https://blog.csdn.net/qq_35703954/article/details/81540315std::thread的使用,结果编译报错信息如下: 问题分析:查看错误提示,发现thread不是命名空间std的一个成员,那么我们知道thread很明显是std的成员,那么久只有一种可能:即没有引入相关的头文件,但是检查发现,头文件也有。又......
  • 鸿蒙开发TypeScript语言:【简介与Hello World!】
    TypeScript教程TypeScript是JavaScript的一个超集,支持ECMAScript6标准([ES6教程])。TypeScript由微软开发的自由和开源的编程语言。TypeScript设计目标是开发大型应用,它可以编译成纯JavaScript,编译出来的JavaScript可以运行在任何浏览器上。语言特性TypeScript......