获取外网IP并发送邮件通知

名称: IP地址通知器 下载最新版  (在使用的过程中,如果您有什么问题,请给我发邮件,或者在这里(csdn我的博客)上留言.)

版本: 1.26 正式版
作者: 阙荣文 - Que's C++ Studio
日期: 2010/11/10
版权说明: 版权归作者个人所有,免费使用. 如果需要源代码(Visual Studio 2008),请联系 querw@sina.com 购买.

设计目的
获取本机的外网IP地址,并且把IP地址发送到指定邮箱. 不支持使用代理连接的网络.

原理介绍
如果本机在公网上,或者通过拨号直接连接到公网,那么本机的IP地址就是外网IP.但是如果一台电脑在局域网内,通过网关/路由器连接到Internet的话,
就必须要通过外部服务器才能获知本网的外网IP. 这个世界上有很多网页会显示访问者的IP地址,IP地址通知器 V1.0 Beta 就是利用这一点,获得指定
网页中的IP地址信息.

使用说明

1. 配置页面

(1) 开机自动运行: 通过写注册表 "HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run" 实现. 如果在您的电脑上该选项无法工作,
有可能是因为当前用户没有读写注册表的权限,或者请求被第三方程序拦截. 比如360. 如果该选项起效,程序将会在Windows启动后最小化运行.

(2) 运行程序后自动启动: 程序运行后自动开始抓取IP地址.

(3) 总是报告IP地址: 未选中该选项时,只有在IP地址改变时,才会发送邮件通知或者运行指定命令.选中该选项可以使程序每次抓取IP成功后都报告.(发送
邮件或者运行指定命令.)
建议: 如果要选中该选项,请把"检测间隔"设置为至多30分钟以上,过于频繁的发送邮件有可能会使您的邮件被认为是垃圾邮件.

(4) 启用气泡提示: 选中该选项时,程序会在报告IP地址的同时,在系统托盘区显示一个气泡提示.

(5) IP源: 提供IP地址的网页, 必须以 "http://" 开头.

(6) IP格式: IP地址在网页源码中的位置. IP格式总是要求包含至少一个 '*' 代表IP地址串 (相当于通配符),程序通过这个格式串抽取IP地址字符串,而
不是整个网页源码.
其中: '*' 代表IP串,'*'代表的字符串最长不能超过512个字符. '/r'代表回车 '/n'代表换行 '/t' 代表TAB.

经过测试在2010/11/10时有效的IP源和格式有如下几个:
源: http://whatismyipaddress.com/ 格式: <span class="ip blue">*<!-- contact us before using (程序的默认设置)
源: http://www.ipchicken.com/ 格式: Address: /r/n            *            </font></td>
源: http://www.ip138.com/ip2city.asp 格式: 您的IP地址是:[*]

事实上有效的IP源远远不知以上3个,只要填写正确的格式串,几乎所有可以显示IP地址的网页都可以成为本程序的IP源.

(7) 测试IP源: 可以在不修改配置的情况下,测试填入的IP源和格式,测试结果将显示在日志页面.

(8) 检测到IP地址改变后,发送邮件通知: 选中该选项时,如果程序检测的IP地址发送改变,将会发送电子邮件.
以下的几个参数都是电子邮件相关的. 请注意填写发件人和收件人时,请直接填写邮件地址xx@xx.com,而不要用类似带<>的地址,如 "John<xx@xx.com>"
另外,由于所有的配置信息都是明文保存在程序目录的 settings.ini 中,所以您填写的密码也是不安全的.
IP地址通知器 V1.0 Beta 还不支持使用安全套接字的SMTP邮箱,比如 gmail.com, 给您造成的不便敬请谅解.

经过测试在2010/11/10时邮箱的SMTP服务器有 smtp.sina.com.cn 和 smtp.163.com

(9) 检测到IP地址改变后,存储文件,并以之为参数运行一下命令: 如果选中该项,程序在报告IP地址时,会先把IP地址在当前目录下存储为一个文件名为
"IP.TXT" 的UNICODE编码的文本文件,并一该文件路径为参数调用指定的命令, 如果指定的命令为空,那么只存储文件.

2. 日志页面: 显示程序运行过程中的输出信息.最多只能保存30000个字符,如果超出,将删除前面200行.

3. 主页面

(1) 清空日志.

(2) 清除已记录的IP: 程序在报告IP地址成功后(以下情况将被视为报告IP地址成功: 邮件发送成功或者运行命令成功或者用户不要求报告IP地址即 1.(8)
和 1.(9) 两个选项都未选中.)将记录下这个IP地址,并显示为窗口标题和气泡提示. 如果报告失败,比如在只选中发送邮件选项的情况下,并且邮件发送失败.
那么程序显示的IP地址将不是最新的IP,而是上一次成功报告过的IP,也就是说,在这种情况下,程序显示的结果和邮件显示的结果是一致的. "清除已记录的IP"
按钮将会把这个值设置为 0.0.0.0.

(3) 运行/停止: 运行后,会立即抓取一次IP,并设置定时器. 关闭时,只会取消定时器,如果此时程序正在抓取IP或者发送邮件将会继续完成.

(4) 退出.

---------------------------

 

程序运行的界面如下:

 

 

 

 

--------------------

 

版本更新说明

 

2010-11-13 V1.01 Beta

 

修正: 在只选中邮件通知的情况下,一旦邮件发送失败,也会保存IP地址到本地. 这样的话,用户将没办法接收到最新的IP地址通知邮件.

修正: 不能正确识别UTF-16编码的IP源.

修正: 程序内部转换字符编码时有栈溢出的风险,现在使用堆分配.

新增: 现在可以识别UTF-8编码的IP源.

更新说明: 气泡提示只在Windows XP以上的系统中有效果.

 

2010-11-15 V1.02 正式版

 

更新说明: "总是报告IP地址" 改为 "IP没变也报告" 更容易理解.

 

2010-12-13 V1.04 正式版

更新: 启用新的日志系统,并移除,修改了一些日志文本.

新增: 现在SMTP密码以密文的形式存储在配置文件中. (密文由原始密码进过DES 和 BASE64变换后得到.) (更新后,需要重新输入SMTP密码.)

更新: 测试邮件和IP改变通知邮件的内容修改以更清晰的表述测试邮件和真实的IP通知邮件之间的区别.

更新: 现在邮件的主题中包含了主机名.

修正: 使用新的User-Agent发送HTTP请求以获取更多的IP源支持. User-Agent: IPNotifier/1.04 (compatible; MSIE 8.00; Firefox 3.6; U; Windows;)

新增测试过的IP源:
源: http://www.showipaddress.com/ 格式: <h1 id="ip">IP address: *</h1>
源: http://www.ipaddresslocation.org/ 格式: <span class="myipaddress">&nbsp;/r/nb/r/n*/r/n309e/r/n</span>
源: http://www.find-ip-address.org/ 格式: IP Address Lookup - IP Finder for My IP (WAN IP) *</div></div></TD>
源: http://www.123myip.co.uk/ 格式: <h1 class="ip">*</h1>
源: http://www.ipaddressworld.com/ 格式: <FONT face="Verdana, Arial, Helvetica, Sans-serif" size=+6>*</FONT>

如果IPNotifier不能识别您需要的源,请联系 querw@sina.com
(IPNotifier是通过分析网页源代码读取IP地址的,如果IP源运用了脚本或者重定向,就会读取失败.)

 

2010-12-17 V1.22 正式版

修正:  现在可以正确识别采用 chunked 分段编码的IP源.

修正:  源: http://www.ipaddresslocation.org/ 的格式修正为: <span class="myipaddress">&nbsp;*</span>

 

修正:  允许处理的最大源数据200K的临界情况下,数组越界BUG已经被修正.

 

-------------------------------------------------------------------

后记

-------------------------------------------------------------------

 

    在调试的时候发现有时候会出现 "IP源返回 [HTTP 0]" 的日志, 按照HTTP协议,服务器响应码应该是3个数字,从1XX到5XX,不允许出现0.这个问题困扰了我几天,因为非常难重现,从代码又看不出什么问题. 最后加了几行代码,把HTTP = 0 的时候的内存现场保存到文件, 有守了好久终于抓到一次HTTP=0的情况,一看文件才知道是电信插广告到响应流中,把响应头改得乱七八糟引起的. 虽然对程序没有影响,但是,中国电信!

 

    由于V1.04版作了比较多的修改,当时就应该把版本好升上去,所以在最后一次修改中把版本号升级到了1.2
经过这次修正后,IPNotifier将暂告一段落, 如果没有重大的BUG我将不再更新.

 

-------------------------------------------------------------------

 

2011-06-21 V1.24 ( 感谢网友 fugou 的建议 )

更新: 默认的IP源改为: http://www.ip138.com/ip2city.asp 格式: 您的IP地址是:[*]

新增: 现在可以自定义通知邮件的内容, 用 @HOSTNAME 代表主机名, 用 @OLDIP 代表上一次的IP地址, 用 @NEWIP 代表最新获得的IP地址.

 

2011-7-29 V1.26 (感谢网友 fugou, nanchang_key 的建议 )

新增: 现在可以自定义通知邮件的主题,用 @HOSTNAME 代表主机名, 用 @OLDIP 代表上一次的IP地址, 用 @NEWIP 代表最新获得的IP地址.

新增: 现在可以设定多个收件人,收件人邮件地址用 [,] 或者 [;] 分隔,例如: [xxx@xxx.com,yyy@yyy.com;zzz@zzz.com]

 


版权声明:本文为querw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。