免费邮箱:收发服务器动态公网地址
来源:互联网 发布:js 判断对象是否包含 编辑:程序博客网 时间:2024/04/30 08:29
不多说,先上图:
目标:将免费邮箱作为服务器公网地址传递的中介发送端:sendmail + msmtp接收端:fetchmail原始邮件过滤:awk, sed
*将接收工作置于Linux平台下将有机会获得好的体验,譬如一键ssh连接,无需手动将地址复制粘贴至putty中。
I.探测与发送
msmtp配置文件参照: OpenWrt发送邮件(支持TLS)
定时任务如下:
#!/bin/bash# Code by Soundtrack9407# blog.csdn.net/ke515041ADDR=`curl -s icanhazip.com`ADDR_OLD="/var/addr_old"WAN_LOG="/etc/diy/wan_history"#---------------------------------send_mail(){ echo -e "Subject: Data\r\n\r\n$1" | msmtp --from=xxx@126.com -t xxx@126.com}write_ADDR(){ echo $1 > /var/addr_old}#---------------------------------if [ -n "$ADDR" ] ; then if [ -f "$ADDR_OLD" ] ; then if [ "$ADDR" != "$ADDR_OLD" ] ; then send_mail $ADDR write_ADDR $ADDR echo $ADDR >> $WAN_LOG fi else send_mail $ADDR write_ADDR $ADDR echo $ADDR >> /etc/diy/wan_history fifi
脚本流程图
II.接收与解析
Windows平台:使用网易邮箱客户端Chrome插件,登录密码为客户端授权码,新邮件数量提示功能(有延时)。
Linux平台,以Ubuntu 16.04 LTS 为例:
sudo apt-get install fetchmail
fetchmail将根据配置文件来检查邮箱:
poll pop3.126.com proto pop3
uidl
auth password
user xxxxx@126.com
password 第三方客户端授权码
options
keep
ssl
keep,从邮箱中复制邮件内容而不是剪切;
ssl,开启TLS,提高传输安全性;
fetchmail -f ~/.fetchmail
收取后的邮件将置于/var/mail/目录下
III. 过滤
收取后的邮件充斥着原始信息,从中提取服务器公网地址:
示例:
From sendmail@126.com Wed Jan 4 22:18:35 2017Return-Path: <sendmail@126.com>Received: from Inspiron (localhost [127.0.0.1]) by Inspiron (8.15.2/8.15.2/Debian-3) with ESMTP id v04EIYwU002366 for <helloworld@localhost>; Wed, 4 Jan 2017 22:18:35 +0800Received: from pop3.126.idns.yeah.net [220.181.15.128] by Inspiron with POP3 (fetchmail-6.3.26) for <helloworld@localhost> (single-drop); Wed, 04 Jan 2017 22:18:35 +0800 (CST)Received: from localhost (unknown [113.84.191.99]) by smtp7 (Coremail) with SMTP id DsmowAD3aajjNmxYXgBIDw--.62687S3; Wed, 04 Jan 2017 07:42:28 +0800 (CST)Subject: DataX-CM-TRANSID:DsmowAD3aajjNmxYXgBIDw--.62687S3Message-Id:<586C36E4.A43509.22999@m15-114.126.com>X-Coremail-Antispam: 1Uf129KBjDAr29KB7ZKAUJBBBBB549EdanIXcx71AAAAAA7v73 VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjxUvG-eUUUUUX-Originating-IP: [113.84.191.99]Date: Wed, 4 Jan 2017 07:42:28 +0800 (CST)From: sendmail@126.comX-CM-SenderInfo: xsxezudrp/1tbicwRAGlUw3+XZSAUEAsz113.84.191.99
提取关键字”X-Originating-IP”(发件人ip),过滤
awk '/X-Originating-IP/{print $2}' /var/mail/soundtrack | sed 's/\[*]*//g;N;D'
使用keep关键字,fetchmail会将邮件全部复制下来(有待改进之处,只复制最新邮件并删除旧邮件,可有效减少数据处理量),但只需要最新的地址。
操作:先按关键字过滤并打印有ip地址的列,再去方括号取最后一行(最新):
helloworld@Inspiron:~/vps$ awk '/X-Originating-IP/{print $2}'[123.84.108.108][123.84.191.99][123.84.186.217][123.84.191.213][123.84.190.22][123.84.108.144][123.84.187.226][123.84.109.167][123.84.189.45][12.124.188.125][163.46.192.61][12.124.189.74][12.148.124.254]helloworld@Inspiron:~/vps$ awk '/X-Originating-IP/{print $2}' | sed 's/\[*]*//g;N;D'12.148.124.254
Ⅳ.调用自动化
在Ubuntu平台下,创建到远程服务器的ssh、OpenVPN连接,用脚本取代重复操作(这大抵就是Linux平台的好处):
#!/bin/bash# Mutli-VPS SSH Connect Controllerras_vps=(game "" "22" key/key_vps)canada_vps=(game "192.169.12.1" "22" key/key_vps)action(){ ssh $1@$2 -p $3 -i $4}echo "VPS Secure Connect"echo "->1 RAS"echo "->2 Canada"read -p "[1-2] " num if [ "$num" -eq "1" ];then fetchmail -f ~/.fetchmail ras_vps[1]="`awk '/X-Originating-IP/{print $2}' /var/mail/soundtrack | sed 's/\[*]*//g;N;D'`"ficase $num in 1)action ${ras_vps[0]} ${ras_vps[1]} ${ras_vps[2]} ${ras_vps[3]} ;;& 2)action ${canada_vps[0]} ${canada_vps[1]} ${canada_vps[2]} ${canada_vps[3]} ;;& esac
V.改进
A.在Linux平台下已经能获取到发件人地址,便没有必要将服务器地址作为正文进行发送。
B.不使用icanhazip.com获取公网地址,更改为向主路由查询Router Automatic Controller “curl”。
鸣谢
Google
使用 fetchmail
Fetchmail使用简介(转)
shell脚本检测网络是否畅通
Manual Reference Pages - fetchmail
- 免费邮箱:收发服务器动态公网地址
- 常用收发邮件服务器地址
- 免费邮箱
- 不能用公网地址访问内网服务器的详解
- 不能用公网地址访问内网服务器的详解 .
- 在LINUX服务器下查看公网IP地址
- 内网用户通过公网IP地址访问内部服务器
- 无法ping通阿里云ECS服务器公网地址解决
- ipsec-vpn某端公网地址为动态配置步骤
- 公网 rtsp流媒体地址
- 获取公网ip地址
- 公网HLS地址
- 获取公网IP地址
- 获取公网IP地址
- Zookeeper动态更新服务器地址
- 服务器公网打开问题
- 个人电脑变成公网服务器
- CISCO ASA5505在只有一个公网地址的情况下,做内部服务器端口映射供外网访问!!
- ReentrantLock锁
- Hybird app阶段分析
- PAT BASIC LEVEL 1014. 福尔摩斯的约会 (20)
- VMWare+ubuntu 使用记录
- 大米云主机首批优秀体验师新鲜出炉——综合篇
- 免费邮箱:收发服务器动态公网地址
- 设计模式:外观模式-facade
- 二、模块详解2
- webpack-dev-server使用方法
- tomcat线程数
- 简单的基于LruCache的图片加载器
- Android 视频播放器
- vim命令总结
- Python函数—基础