当前页面: 开发资料首页 → Java 专题 → Java e-mail 发送器
Java e-mail 发送器
摘要: Java e-mail 发送器
watermark]//A fake email sender...
import java.io.*;
import java.net.*;
public class smtpPing{
public static void main(String[] args) throws IOException{
Socket s = null;
PrintWriter out = null;
BufferedReader in = null;
String host = "localhost";
int port_n = 25;
String hello = "HELO microsoft.com";
String from = "MAIL FROM: microsoft@microsoft.com";
String send_to = "RCPT TO: xxx@xxx.com";
String data = "DATA";
String content = "Rubbish";
String end_Content = "\r\n" + "." + "\r\n";
String quit = "QUIT";
String fromServer;
// set variables
if (args.length > 0) host = args[0]; // read arguments
try{
s = new Socket(host,port_n);
out = new PrintWriter(s.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
while ((fromServer = in.readLine()) != null) {// The whole process
System.out.println(fromServer);
out.println(hello);
System.out.println(hello);
out.flush();
out.println(from);
System.out.println(from);
out.println(send_to);
System.out.println(send_to);
out.flush();
out.println(data);
System.out.println(data);
out.println(content);
System.out.println(content);
out.println(end_Content);
out.println(quit);
System.out.println(quit);
break;
}
in.close();
out.close();
s.close();
}// end try
catch (UnknownHostException e) {
System.out.println(" Unknown Host ");}
}//end main
}//end
一个非常简单的e猫发信器,只send 一次...不过一个For-Loop...唉,可悲的....
Refer to: RFC 821 SMTP Simple Mail Transfer Protocol....
不是一位黑客... 只是一个可怜的没工作的老头...
仇恨总归仇恨,怨恨的总归怨恨... 仇和怨恨...就在仇和怨恨....
仇恨永记心中,仰望青天苍穹,清风轻送,怨天偏作弄...
仇恨总归仇恨,怨恨的总归怨恨... 仇和怨恨...就在仇和怨恨....
All rights reserved to ppd... But feel free to use the code...[/watermark]
版权属作者所有,未经许可不得擅自转载
[广告] 关于加入和创建门派
--------------------------------------------------------------------------------
2003/03/09 09:01am IP: 已设置保密
ppd
信息:
威望: +5
监狱:执行逮捕
法院:社区法院
魅力:
经验:
现金: 101935 水晶币
存款: 没开户
贷款: 没贷款
来自: 保密
在线: 07 时 37 分 06 秒
总发贴数: 118 篇
注册日期: 2002/11/17
消息 查看 搜索 好友 复制 引用 回复
--------------------------------------------------------------------------------
A Really great Article by iceblood...
Copy from 论坛原创....
匿名(垃圾)邮件的根源
——网络上几乎所有服务器都不可避免的“漏洞”
作者:刘宏光(iceblood)
E-Mail:iceblood@163.com
日期:2003-1-19
我的一点思考:大家在看到这篇文章的小标题的时候,或许很多人都知道了这个“漏洞”,而有的人在看文章的过程中,知道这个“漏洞”,也有的人或许会惊诧,因为小标题好像说得太过严重,不过不管看这篇文章的人是什么样的水平,或什么样的心理,我的目的只是把网络上这个缺陷进行一个更细节的介绍,因为我相信,只有大家都看到了这样的“漏洞”,网络才会慢慢的改善,才会有进步。
发送匿名邮件在Internet上已经是一个古老的话题,很多电子邮件服务器的管理员都采取了很多措施来防止匿名邮件的发送,比如:IP漫游记录,SMTP认证等,并且取得了相当不错的效果,但是近日通过我对发送邮件的过程的追踪,尽管有了以上方法能防止一部分人发送匿名邮件,但实际上仍然可以畅通无阻的发送的匿名邮件,这种漏洞到目前为止应该是100%的邮件服务器的通病,并且是无法避免的“漏洞”,这主要是因为现在的SMTP服务的不完善造成的,实际上很多发送垃圾邮件的工具,其原理也就是我在这篇文章里所介绍的原理。目前国内的邮件服务器应该都有这样的漏洞,包括网易、新浪、搜狐等大型网站都无法逃脱,假如这几大网站的管理员看到了这篇文章,有兴趣的话,可以跟着我来测试。
首先我来简单的说一下电子邮件传送的原理,假定自己的邮件服务器的DOMAIN为cdefg.com,要发送一封 test@cdefg.com 的电子邮件,电子邮件的正常的传送都需要靠DNS的MX纪录来查找对应服务器的的IP地址,然后再开始发送邮件,同理cdefg.com邮件服务器会查找 abcd.com 的邮件纪录,然后把邮件发送到 abcd.com所对应的IP地址,假设找到了xxx.xxx.xxx.xxx这个IP,并且xxx.xxx.xxx.xxx有smtp服务,这时服务器会连接到xxx.xxx.xxx.xxx的25号端口(SMTP服务所监听的端口),并且把邮件发送进去。
说到这里或许有很多人等不急了吧?好了,让我开始介绍“漏洞”吧,Internet上的任何服务器都会无条件的接受匿名邮件、垃圾邮件,任何人的电子邮件也都可以被伪造,或许有些人惊诧的想,能伪造所有的?他们是如何做到的?可能也有人说这不是漏洞,只是邮件传输的机制。但这确实能对Internet构成很大的威胁,比如伪造电子邮件,网络上伪造一个人的电子邮件实在太简单,它不象现实中的书信,能看笔迹。而在网络,所有的笔都是键盘,唯一能进行识别的就是数字认证,但在经济还不发达的我国,想要每个人都拥有数字认证,是非常困难的事,所以只有完善SMTP服务才是最好的办法。
网络上是如何实现这个匿名邮件、伪造邮件发送的过程的呢?很简单,我来给大家介绍,比如伪造 webmaster@domain.com 给 username@domainname.com 发送一封电子邮件,首先由于要给 username@domainname.com 发送邮件,所以先找要到这个邮件地址的SMTP服务器,在命令行下使用nslookup这个小工具很快就能查出来,如下:
C:\>nslookup
Default Server: ns.hncsptt.net.cn
Address: 202.103.96.68 //开始运行nslookup,并且默认的DNS服务器为该IP地址。
>set type=mx //设置显示类型为MX纪录。
>domainname.com //查询domainame.com 的MX纪录。
domainname.com MX preference = 10, mail exchanger = mail.domainname.com
mail.domainname.com internet address = xxx.xxx.xxx.xxx
>exit
很快通过上面的命令就查出了domainname.com这个域的STMP服务器地址为xxx.xxx.xxx.xxx
好了,让我们继续,
C:\>telnet xxx.xxx.xxx.xxx 25
会出现:
220 mail.domainname.com
在这里也可能是别的,因为可能默认域不是domianname.com的域,而且其他的,但不管这些,你只要看到220这个数字就行了。
现在再接着输入命令:
HELO domain.com
返回:
250 mail.domainname.com Hello [x.x.x.x]
这里表示和邮件服务器握手成功,其中x.x.x.x就是你的IP地址。
好了,我们冒充的最关键地方开始了:
MAIL FROM: webmaster@domain.com
250 OK
这里告诉服务器,我们将用 webmaster@domain.com 这个电子邮件来发送这封电子邮件,很可惜任何的SMTP服务器都不会验证这个电子邮件的真实性,所以这里就被服务器给认可了,于是服务器返回250 OK,表示接受,继续等待下面的命令。
RCPT TO: username@domainname.com
250 OK
告诉服务器邮件发送给 username@domainname.com ,但是服务器在这里仅仅只检查domainname.com这个域是不是在自己的转发列表里,由于我们是直接查的dommainname.com这个域的SMTP服务器,所以当然也绝对会在列表了,所以服务器的返回OK,而不会做更多的验证。
DATA
354 Start mail input; end with
.
这里输入DATA,告诉服务器要开始输入邮件内容了,邮件服务器会返回354信息,以及上面说的邮件以“.”结束。
开始输入邮件内容了,但一般邮件都会有邮件头,为了更真实的伪造邮件,我们可以按下面的输入:
From: webmaster@domain.com //让Outlook,foxmail等这样的客户端工具显示发送者为 webmaster@domain.com
To:username@domainname.com //同样让客户端工具显示接收者为 username@domainname.com
Subject: send anonymous mail //邮件主题
Test //邮件内容,这里想怎么写就怎么写了。
. //最后输入一个“.”结束邮件。
250 send OK
服务器返回250,说邮件发送成功,这时你就成功的冒充 webmaster@domain.com 给 username@domainname.com 发送了一封邮件,不过如果对方看邮件头,能看到你的IP地址,可是很可惜的是90%以上的电子邮件用户根本就不会在乎发送电子邮件的人的IP是什么的,而且更多的人是没有这样的专业知识,所以他们只能凭邮件内容来辨别真伪,可是又有多少人很快的想到他现在看的这封邮件是一封伪造的呢?同样的既然能伪造邮件,自然也就能发送匿名邮件了,因为都是同一个方法。而网络上所使用的那些专门发送匿名邮件,以及广告邮件用的工具软件,所利用的原理基本都是这样。
看到这里大家也都知道了吧,只要你知道谁的电子邮件地址,然后根据邮件地址的域,查出SMTP服务器,就能很快的给他发送一封匿名的电子邮件,或伪造的电子邮件,因为所有的SMTP服务器都不会去验证发送者是真还是假,而服务器对于发送到它自己的用户的所有邮件,也不会做任何的验证,这就是SMTP服务的不完善,而导致了这样一个非常严重的“漏洞”,也正是这个漏洞,使得网络上的垃圾邮件,广告邮件越来越猖狂,可以说是匿名(垃圾)邮件的根源。
声明:利用文章所介绍的技术发送恶意的垃圾邮件、伪造邮件
↑返回目录
前一篇: Java HotSpot性能引擎的体系结构
后一篇: Java Collections---HashMap深度分析与比较