穷人的.电子邮箱之眼.项目。。。《poor man's project of remote email eyes》(项
摘要 : 远程监控是一个很好玩的东西,想想在一个网页看到了自己经常出没的地方(家,宿舍)的感觉,那真的是很好的体验,本人一直对低成本的实现方案感兴趣。于是在有一些资源的情况下(一块linux开发板,对gcc有一定的了解)想了一个自以为是的合适项目,不有公用IP,我用不起网眼。只要有一个免费的3G邮箱,我们就能看到一个远处的场景,,,
关键词:
gnu/Linux开源系统, socket插口,126或qq等免费邮箱,SMTP/esmtp简单邮件传输协议,pop3自动办公协议,BASE64加密算法,gnu/gcc编译器,foxmail邮箱客户端,几十块的USB摄像头。
申明:
这只是我个人,学习linux的一个开源项目,多数代码来自网络,不遵守严肃的GPL病毒协议。但是可自由修改,使用,不保证安全性。
很遗憾的说,这个小项目现在未完全完成,2008.11.21..... 完成度:约1/3。估计不出意外,过几个星期就能完成项目目标。
项目完成目标:举例说明:
在武汉的一所学校里,有一个人在实验,也就是我,想看看宿舍里是什么情况,于是他点开QQ邮箱,
向pcj203@126.com的邮箱里写一封主题为:email eyes的邮件,然后很萧洒的点击发送,过会QQ邮箱中会收到一封邮件,
打开就能看到附件中的一张宿舍图像。。。。
//扩展目标:向pcj203@126.com邮箱写信,即会自动返回一个抓图邮件,便于大家交流。Real Open email eyes!!!
好了,我就不在那里YY了,现在项目并没有完成,只完成了1/3。
设计标准:尽可能低成本,尽可能减少开发时间,只要能完成必要功能,完成项目目标即可,不是功能选项多为好!!少即是美,uinx名言!!!
硬件需要,马克思说过物质第一是唯物主义,
一个几十块的USB摄像头(中芯微的301系列) 问:为什么是中芯微的301系列。因为我是借用了一个平台,上面刚好支持这种型号的USB 摄像头。 一个支持USB摄像头抓图的支持TCP/IP的socket硬件平台,要求是嵌入式平台,省电环保。问:你用的什么?linux,arm9平台。成本400块左右。
还有电源,上网的路由接口。(在这里我不说是什么具体的硬件平台,不是为了保留什么,而是希望大家能不受硬件的限制,我想只要是linux的硬件平台并支持支持USB摄像头抓图就差不多了!!改动不大!)
软件需要:
arm-linux-gcc
redhat9.0开发环境!我是在虚拟机上运行的!参考《阿南linux学习》
foxmail邮箱客户端! 用来分析邮件协议的,并使用了其中的一部分。
项目开发分析阶段:
分析现在资源与情景,即一切尽量从实际出发:从开发板的用户手册上知道我用的硬件平台,支持支持USB摄像头抓图。用一个命令行就能把摄像头抓的图生成XX.jpg的图像。所以图像的获得不是问题的关键,我更关心应用与实现。我希望它能工作着而不是一个构想在大脑中。那么剩下要做的是什么?
1:先能够发邮件,能够发附件形式的邮件。
2:能自动定时收邮件,并分析邮件内容。为了让email eyes嵌入式板能够不花钱的收到远程控制命令。
3:将收发邮件功能,和摄像头抓图的功能整合成一个完整的程序。
存在的问题:
现在能收发邮件并不能代表将来也能收发邮件,这依赖于邮件服务商,比如腾迅, www.126.com。从smtp升级到esmtp充分说明了世界是发展的。不过了不要太担心这点。
实时性不是很强。免费的,总在某些方面没有太多的特权。不过这点多数时候还可以忍受。
发邮件的实现:
决定采用smtp协议来实现,不过现在大多数邮件服务商,都升级成了esmtp。ESMTP (Extended SMTP),顾名思义,扩展 SMTP 就是对标准 SMTP 协议进行的扩展。它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。
1: SMTP命令
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM 命令中指定的地址是发件人地址
RCPT TO 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。
DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF.CRLF 结束
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP 查询服务器支持什么命令
NOOP 无操作,服务器应响应 OK
RSET 重置会话,当前传输被取消
QUIT 结束会话
2:实际一般的交互过程:
一次成功发送邮件的经过
红色是用户客户的数据,黑色是邮件服务器的。
telnet smtp.126.com 25
220 126.com Anti-spam GT for Coremail System (126com)
EHLO ABCDEFG
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
AUTH LOGIN
334 dXNlcm5hbWU6 //334 dXNlcm5hbWU6使用的是base64编码username:
cGNqMjAz //pcj203
334 UGFzc3dvcmQ6 // Password:
YWlqaWFyZW40
235 Authentication successful
MAIL FROM:<pcj203@126.com>
250 Mail OK
RCPT TO:<pcj203@126.com>
250 Mail OK
DATA
354 End data with <CR><LF>.<CR><LF>
subject:test
.
250 Mail OK queued as smtp6,j9KowLC71ob9ZCNJg0wWBQ--.37118S2 1227056484
quit
221 Bye
过程分析:
先是登录smtp邮箱: smtp.126.com 25 端口
表明身份:EHLO ABCDEFG
指定登录方式:AUTH LOGIN
输入用户名和密码:cGNqMjAz //pcj203
YWlqaWFyZW40 //password :aijiaren4
指定邮件发送人:MAIL FROM:<pcj203@126.com>
指定邮件收件人:RCPT TO:<pcj203@126.com>
开始表明邮件数据开始:DATA
邮件数据body:subject:test
邮件数据结束:. 以句号加换行回车
断开连结:quit
以上分析都是在服务器正确回应的步骤,所以没有写出服务器的回应,实际上有任何错误我们都不能成功发出邮件,要注意的是:在发邮件数据body时,不要等服务器的回应,它是不会回应的,它要等到\r\n.\r\n邮件数据结束标志才会回应的。我开始就阻塞在这了,不过还好我写过设备驱动开发,明白阻塞访问。一停在那不动就猜到了。同时发附件的连续文件时要保证一定长度数据时额外添加\r\n 来分隔,不然服务器收到过多数据会断开管道的,可能是我没太认真研究协议吧。
今天就写到这。。。。。 超级强悍。 听起来很难啊,加油 发一个FTP的客户端源码,来源于网上,原作是使用主动模式上传下载的。但是只能用于公用IP用户。即不能用于192.168.X.X的用户。
我小修改为被动模式,由ftp服务器方提供数据端口,这样内网IP 用户也可上传下载文件。代码相当精练,功能相当的专一有针对性。适合嵌入式环境。 希望大家用得上。我是用来做GPRS远程数据传输。测试过M 级文件。是linux用的。
dourdev_582865.rar(文件大小:4K) (原文件名:ftpputget.rar)
本贴被 pcj2007 编辑过,最后修改时间:2009-01-12,09:35:24. 好历害啊..... 太强了,,学习中 牛人啊 厉害!! mark 好东东 实在是强,我也买了mini2440的板子,不过没怎么用,感觉用不上来,还在看书.... 附件中是发邮件的,使用本人的pcj203@126.com的邮箱,,有兴趣的人可以先试着修改收件人地址用我的邮箱发到你的邮箱里。
然后在用附件BASE64小程序算出自己加密后的邮箱帐号和密码。[不过有些邮箱是不支持的ESMTP]
arm版ESMTP发送邮件ourdev_510235.rar(文件大小:23K) (原文件名:emailVarm.rar)
base64编码解码小软件[来源网上]ourdev_510236.rar(文件大小:9K) (原文件名:Base64.rar) 既然我现在搞不定这个usb摄像头,但是了,我今天也在网上找了下楼上说的很对哦,有一个法国人写了。。。
据说那个法国人是买了中芯微摄像头也没有驱动就自己写了驱动。。。
好了,我相信肯定有人已经搞定了usb摄像头这一部分。
所以我现在决定把已经写好了的邮箱收发部分公部出来,,,当然现在写得有点凌乱,而且代码也相当不健壮。。所以要大家多努力共同做好。。我也会花些时间来维护。。 中芯微301摄像头linux驱动网络上有的,一个法国人写的. 有创意~~~~ 省事就搞个串口摄像机
去老古找一下,前些时间看到做广告的.
USB是累了些 支持!!
期待看到邮件发送接收部分 , 我也照着实现个 看来项目没有期望的进展顺利,
我不得不花时间在usb设备上面, up!!!
不错思路 支持你 ! 梦想破灭了,,
今天专门去买支持的中芯微301摄像头,,结果插到嵌入式板上去有点反应,但是不能正常工作,估计是驱动有问题。
不过今天把pop3的邮箱主题正常读出来了,现在的问题是图像的问题,还有整合这几个功能。。
呵呵,测试好用的,非常感谢 我这两天把接口,修改了一下,更友好的,整理后发上来。。
最快今晚发上来,大家测试一下 。。。
比如:它用如下命令来发邮件./sendor -s /var/SpcaPict.jpg -i smtp.126.com -u pcj203 -p "*******" -f pcj203@126.com -t 2426510@qq.com
-s 表示发的图片
-i 表示邮箱地址域名。也可是IP:199.22.xx.xx
-u 用户名
-p 密码
-f 发件箱地址
-t 收件箱地址
本贴被 pcj2007 编辑过,最后修改时间:2008-12-07,15:19:36. 刚才收到哪位人兄的邮件,一发就是4封。。还有照片,,有个人做在那。。。。
foxmail 新窗口读信
发件人:29548754 <29548754@qq.com> 查看添加 拒收 告诉他收到啦
时 间:2004年8月14日(星期六) 晚上7:56 纯文本 | 更多操作↓
收件人: njnuaya <njnuaya@163.com>
不错,支持~很好的想法~ 支持原创! 不说废话,上源码,,大家先看源码再说,,日后慢慢改进!!!
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_529216.jpg
xx (原文件名:xxxx.jpg)
eeeourdev_529217.rar(文件大小:39K) (原文件名:EmaileyesV0.1.rar)
嘿嘿,项目拖了很久,, 希望大家来改进,并发上来共享!!! 无线路由 wrt54GS + 3322.org 免费域名 这样就不需要 通过邮件发送命令了,在有网络的地方随时都可以连接到你的嵌入式板 我顶你 支持 严重关注。 今天终于实测了一下,成功发送了5封邮件,
预期功能到达了,不过,程序不够健壮!!!会运行出错,慢慢修理吧! 一部分一部分的做呀,你也先放一副静态的图片过去呀,把通讯先挑好 今天带上能查询USB设备的VID/PID信息软件,用买摄像头,
复制了gspca的直接支持的设备VID/PID列表,
果然让我买到了,{USB_DEVICE(0x0ac8, 0x303b)}, /* Vimicro 0x303b */的摄像头,要了RMB55!!
不过等那天升级了嵌入式板内核到2.6.20以上,就能用又好又便宜的免驱动的摄像头!!!
项目又可以向前进了,,。 动态ip吧 , 局遇网内用而已 , 动态域名没听说过能动态分配 【15楼】 PaulDE
用PXA270做这样的项目 ,感觉有点浪费呀 , 应该一个带usb主口的arm9就可以那呀 【14楼】 watercat
1、Linux 2.6.20 以上版本内核都内置中芯微驱动了,楼主你用的哪版本老黄历?
//不巧是2.6.14,也支持中芯微驱动,但是运气不好没搞定
2、给你的嵌入式板子分配个动态域名,你会发现你用的更开心
//分配个动态域名要收费么?不收费就多多指教怎么搞分配个动态域名!! 要是这个能和网络电话 ,关联 ,通过免费的网络发送短信 ,那就大 有前途 .
先问下,现在有免费的网络电话吗?? 对了,如果在Goodsmtp2txt.c 中把第14行的#define mail2txt 0
修改为#define mail2txt 1 用来调试邮件内容。
就能在当前文件夹中生成一个mail2txt.txt文件,里面这是记录发信的全部内容,将本来发到邮箱的内容记录到了文件中,而不登录邮箱发信。这样大家可以分析自己发信的真实内容,和foxmail生成的邮件比较当收信出现小错误比如附件变成正文部分,我就搞过,就是少了一个\r\n.
今天就写到这,我把项目文件夹打包发上来,里面有一些开发过程中的写的中间代码,和一些资料,
下次再把pop3邮件收信,提取主题的代码发上来,
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_510355.jpg
proj (原文件名:gg.jpg)
projmainourdev_510395.rar(文件大小:909K) (原文件名:远程数据收集邮件收发协议.rar)
本贴被 pcj2007 编辑过,最后修改时间:2008-11-23,22:30:26. 好想法!
顶你
我之前有做过类似的项目,PXA270+WebCam2000,但是代码不知道还找不着的找。 1、Linux 2.6.20 以上版本内核都内置中芯微驱动了,楼主你用的哪版本老黄历?
2、给你的嵌入式板子分配个动态域名,你会发现你用的更开心 linux下可以参考和移植的关于邮件的代码还是很多的
http://linux.chinaitlab.com/administer/768139.html 没有接收邮箱里面邮件的程序吗?
那怎么知道接收情况? 说明一下用法,
0:在Goodsmtp2txt.c 的87行修改代码中收件人的邮箱!默认是我的QQ邮箱"RCPT TO:<2426510@qq.com>\r\n",
比如 : xx@163.com 则是"RCPT TO:<xx@163.com>\r\n" 注意:在< >中填写。
1:在linux环境下终端:gcc Goodsmtp2txt.c -o txt回车编译
2:./txt ./xm.JPG 或者 ./txt /home/XXXXX/.../xx.jpg 也就是带一张指定路径的图片作为邮件的附件。
[发图片到邮箱里这个功能是项目的必要功能。。如果你不指定一张图片路径将会在linux环境下终端收到"can't open outfile"]
3:发送成功后你邮箱。收信去吧!!!
arm板上,是这样,如果是arm9的
0:同上,87行修改代码中收件人的邮箱。。。。
1:更改Makefile中的交叉编译器和代码树后,在linux环境下终端:make 回车编译。
2:同上, ./txt ./xm.JPG 。。。。。
3:去收信吧!!!
//=====================
我想也许改下,将收件人邮箱作为命令行参数更好。./txt xxxx@xx.com /home/pic.jpg
本代码当然也可以发其它格式的附件,比如./txt xx.mp3 但是了,下载附件仍会是xm.jpg,不要担心下载后修改文件名就好了。
原因是我使用了foxmail生成的前半截邮件头,就是那个 大家可以打开看看,就明白了,一般不要改
因为我没有花什么时间研究邮件头协议,偷懒了,, foxmail做得很好了,可以用它来导出你要的前半截邮件头。。呵呵!!!
解压后
如下图里面有Goodsmtp2txt.c mailhead.txt xm.JPG makefile
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_510295.jpg
1 (原文件名:ImageA0.jpg) 其中程序依赖于:mailhead.txt ,
也依赖于一张图片:xm.JPG
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_510296.jpg
2 (原文件名:ImageA1.jpg)
上图中87行对应收件人,86行对应发件人,
84行是我的126邮箱的用户名pcj203的base64编码后的cGNqMjAz
85行是我的126邮箱的密码aijiaren4的base64编码后的YWlqaWFyZW40 //我把密码都泄漏了!!!不要开我玩笑改我密码!!
大家可以用上面的base64编码软件测试,这样就可以用自己的邮箱发信了,
不过要在109行 if((host=gethostbyname("smtp.126.com"))==NULL) {
中修改你的邮箱域名,我是www.126.com 对应的就是smtp.126.com QQ邮箱就是smtp.qq.com
不知道在百度上查,当然有的邮箱服务商不提供smtp服务哦!!!听说新注册的126邮箱没有pop3服务,就不能自动收信了哦!!
本贴被 pcj2007 编辑过,最后修改时间:2008-11-23,21:50:44. 很多人提出的想法都很好,,只是那样偏离了最初的简单想法。 我只是要一个能运行的,远程查看宿舍图像的能利用已有ARM9设备平台。[而不是在放那里等灰落满!!] 希望你们能实现自己的想法。也可以在上面做一个图像分析,分析是否有人在宿舍然后自动发出邮件!
上图了:
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_540717.jpg
1 (原文件名:A.jpg)
硬件:一个USB摄像头,一个ARM开发板,只要能运行linux就行。[当然要有主usb和网络。]
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_540718.jpg
2 (原文件名:B.jpg)
在启动脚本中,使之自启动!上图为登录pop邮箱并显示的邮件主题。
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_540719.JPG
3 (原文件名:C.JPG)
写一封邮件,在pop邮箱中,主题含有email eyes就行。
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_540720.JPG
4 (原文件名:D.JPG)
运行正常的话,15分钟内收到邮件!图片在附件内,
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_540721.jpg
附件内容,图像不是很清楚,USB摄像头压缩的太厉害了,一张图才20几K!
5 (原文件名:E.jpg) 牛人,学习啊 用带硬件jpg压缩的arm是不是好点了。看看epson的网络摄像机的arm。S1S65010.是带mmu的arm7.集成了jpg硬件压缩。视频输出接口支持ITU656. 谢谢阿莫的好意.
不过,我已经申明是开源,也因为使用了一些开源代码。DIY。
更多的人用这个代码,也是不错的报酬,推广一下当然是最希望看到的,其实这个代码也不难写,有些人也做过类似的了,但是了,我没怎么找到他们的源码,加上功能上也不完全一致。所以我才编写了。。。
如果阿莫老大,有意推广,我再花些时间整理,力挺老大推广。
本贴被 pcj2007 编辑过,最后修改时间:2008-12-12,18:26:21. 回复 【37楼】 armok 阿莫:
已经做完成了最初的期望了!!《现在,在做GPRS_MC55的实验室小项目,老师在催,做完了,我再开源出来。》
email eyes 是自己玩的。。
能够在实验发邮件到我的邮箱里,然后最多15分钟内,能收到宿舍的照片。
前几天进行了2天的测试。。。抓到一张宿舍的图片,发给了在宿舍上网的室友,结果室友说有点侵犯隐私。。
这几天都没有进行测试。。
【36楼】 ericdai 老戴, 硬件平台是mini2440,友臂的板子,680买的,现在只要600了吧。其实板子是哪家的不重要,因为有linux系统,可以移植。而且是应用层开发,基本上只要改下makefile文件就行了。
晚上弄些照片上来,,对了,怎么修改帖子的标题,,因为现在完成了,好像大家还不是很容易看出来项目完成。。 半天也没有看明白用arm什么芯片,硬件平台,直接做成webcam更加实用 牛人就是不一样啊。
关注中。。。。。 好了,上新版的源码,只是小修改!但是运行的更稳定。屡试不错。
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_550844.JPG
pic (原文件名:gg2.JPG)
源码文件夹ourdev_550845.rar(文件大小:61K) (原文件名:email_eyes_pcj.rar) niu MARK! 太棒了,真是好东西。多谢共享 支持 经过2天的测试,晚上回去把新小修改的一个更稳定的版本发上来,主要是加强了对出错的处理。
以前运行时,偶尔会遇到USB摄像头打开出错的问题,重启系统就好了,不知何故。
现在如果遇到摄像头打开出错的问题,运行的脚本会根据出错情况返回相应值,然后由返回值决定是否重启系统,
并且把重启系统这个事件和时间写入一个脚本中,[就是记录发生的一些事件。类似于sys.log] 厉害 顶 mark 现在准备做一个像路由器中用网页来设置参数的WEB界面!这样就不用编辑修改脚本文件,图形的要比文本的易用! mark 完成了网页设置,不过现在只能设置3个参数。以后再升级,界面不怎么样!在apache服务器上测试上通过。没有在arm板上测试。
晚上回去测试ARM板上的运行情况!
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424953.jpg
1 (原文件名:Image00000.jpg)
打开网页http://192.168.1.77/Eeye.html <在虚拟机上运行的arpache>设置好参数。
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424954.jpg
2 (原文件名:Image00002.jpg)
返回所设参数!
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_424955.jpg
3 (原文件名:Image00003.jpg)
修改后生成的新脚本!红色部分就是修改的地方。以前是要人手工修改的!
Scodeourdev_424956.rar(文件大小:15K) (原文件名:EemailwebV2.0.rar)
这个是相关的文件。
原理是登录http://192.168.1.77/Eeye.html用get提交参数,用bash写的CGI来解析参数后写入设置脚本! 楼主这个太.......牛B了,做好了在阿莫这里推广下吧,呵呵,很实用又是很便宜的远程监控工具。 ARM板上测试通过!63楼的相关文件做了修改才可以,有点小bug/
在嵌入式板上,运行的不是apache而是boa它支持cgi但是好像只能以xx.cgi来工作,bash_cgi就是不工作。晕。 把在arm开发板测试通过的新文件夹发上来,这个文件夹是放在http服务器的根目录下的。如下图,
http://cache.amobbs.com/bbs_upload782111/files_13/ourdev_427487.jpg
1 (原文件名:Image00000.jpg)
图中只有Eeye.html网面 和emaileyes.jpg的图片和Eemailweb文件夹是相关的,文件夹是最主要的。把所有的东西都放在
那里了,里面有17个文件。如想自动运行请手工在rcS中增加命令。
okourdev_427488.rar(文件大小:96K) (原文件名:ARMEemailwebOK.rar)
内容经过测试,至少在我的arm开发板是通过的。如果有异,请自行修改。 mark,强人啊。 感谢分享~~~~~~~~ 你linux2.6下摄像头驱动没反应吗?我以前也遇到过,spa5x啥的驱动,动态加载成功了,原因是usb驱动有些配置没改 mark mark 很强大!!! mark 膜拜 mark 很好 强强强!顶顶顶! 好项目啊! 我要! 不错!!
页:
[1]