通过端口映射的方法,我们可以通过互联网访问到局域网内的一台服务器,并可登录其上进行维护。但现在对一般的单位和家庭用户,都是使用ADSL的拨号方式上互联网,采用动态IP地址的方法,这就需要我们及时知道当前所用的互联网地址。其中的方法有很多,这里介绍的一种使用curl命令获取外网地址并发送到指定邮箱的方法。使用的环境是ubuntu linux环境,用sh编写,首先使用curl访问checkip.dyndns.org网页获得自己的外网IP地址,然后跟保存在本地的外网IP地址作比较,如果没有变化,就不发送邮件,如果地址不一样,就使用curl的发送邮件的命令将新的IP地址发送到指定的邮箱。源码如下:

#!/bin/sh
ip=`curl "http://checkip.dyndns.org" | sed 's/.*Current IP Address: \([0-9\.]*\).*/\1/g'`
echo "Send IP: $ip""aaaa\n"
oldip=`sed -n -e 'p' /home/clc/ip.txt`
echo "OldIP: $oldip""bbb\n"
if [ "$ip" != "$oldip" ]
then
echo "hello!"
echo $ip > /home/clc/ip.txt
message="to=xxx@163.com\nSubject="$ip"\n\nHeaders=ip\n\n[Message]="$ip
echo $message > /home/clc/message.txt
curl -n --ssl-reqd -u 邮箱用户名(如xxx):邮箱密码 --mail-from "发送邮箱(如:xxx@163.com)" --mail-rcpt "接收邮箱(如:xxx@163.com)" -k --url smtps://smtp.163.com:465 -T "/home/clc/message.txt"
echo "Send OK!"
#curl -n -u 邮箱用户名(如xxx):邮箱密码 --mail-from "发送邮箱(如:xxx@163.com)" --mail-rcpt "接收邮箱(如:xxx@163.com)" --url smtp://smtp.163.com -T "/home/clc/message.txt"
fi

将该sh文件的权限改成可执行,并定时运行。本人使用每隔一小时运行一次的方法。这里需注意两点:

1、使用curl发送邮件的使用,如果不使用SSL协议,就使用下面一行的发送命令。

2、使用curl发送的邮件文件的正式内容之前必须有个空行,空行之前的内容都被curl忽略了。