Java实现伪造邮件发信人
Java實(shí)現(xiàn)偽造郵件發(fā)信人
- 關(guān)鍵詞
- 效果預(yù)覽
- 背景說(shuō)明
- 作業(yè)背景
- 環(huán)境
- 參考說(shuō)明
- 實(shí)現(xiàn)代碼
- 代碼解析及輸出
- 測(cè)試及避坑
- 啟示
- 拓展閱讀
關(guān)鍵詞
Java、郵件、SMTP、偽造、發(fā)信人、郵箱、由……代發(fā)
效果預(yù)覽
背景說(shuō)明
作業(yè)背景
最近在做設(shè)計(jì),設(shè)計(jì)里涉及到郵件通知功能,但是直接使用自己個(gè)人郵箱發(fā)送的話(huà)顯得那啥一點(diǎn),并且在Python SMTP發(fā)送郵件里發(fā)現(xiàn)是可以偽造郵件的,故打算把自己的郵箱“打扮”一下,將自己的設(shè)計(jì)模擬的更真實(shí)一點(diǎn)。可不要拿來(lái)做不好的事情哦
環(huán)境
- Win10、Linux
- Java8(不需要額外的jar)
參考說(shuō)明
看了不少做JavaEmail的文章,基本上都是采用javax.mail.jar包做的,但是無(wú)法實(shí)現(xiàn)偽造發(fā)信人(這里的發(fā)信人指的是郵箱,這個(gè)包昵稱(chēng)是可以指定的。可能之前的setSender可以,但是我沒(méi)用過(guò),我下載的1.6.2版本的,MimeMessage對(duì)象沒(méi)有setSender方法),主要參考了兩篇文章(后面給出),都寫(xiě)的很好,我寫(xiě)這篇文章的目的是讓朋友們多一個(gè)維度參考。下面是我參考的文章:
1.JAVA實(shí)現(xiàn)SMTP郵件發(fā)送
2.java發(fā)送郵件的兩種實(shí)現(xiàn)方式(包括如何偽造發(fā)件人及其原理)
對(duì)了還有一篇:Java8 Base64 | 菜鳥(niǎo)教程
實(shí)現(xiàn)代碼
喜歡圖片的朋友看這個(gè),喜歡代碼的在后面
源代碼:
代碼解析及輸出
可以看到,上面的代碼主要是pw.println()和bfr.readLine(),前者主要是發(fā)命令的,而后者則是接收響應(yīng)的。模擬Telnet客戶(hù)端發(fā)郵件[1]。
輸出
郵件效果在開(kāi)頭已給出,那是我用學(xué)校郵箱的smtp服務(wù)器發(fā)的,改了收件人顯示的信息,沒(méi)有被退信。
測(cè)試及避坑
我在使用smtp.163.com服務(wù)器的情況下在to:命令之后接假收件人時(shí)遇到這個(gè)
554 DT:SPM 163 smtp10,DsCowAD3__ck_rxeJqxmBw--.19039S2 1589444132,please see
http://mail.163.com/help/help_spam_16.htm?ip=111.58.181.219&hostid=smtp10&time=1589444132
點(diǎn)進(jìn)去看,是“退信代碼說(shuō)明”
解決辦法:把圖第49行的收件人改回真實(shí)收件人郵箱(上面的已改,原來(lái)的代碼是pw.println("to:" + "管理員 <xxxxxx@qq.com>");實(shí)現(xiàn)的就是效果圖)就可以了。
測(cè)試139郵箱時(shí),一直報(bào)550 2f015ebe0b3f97a-4e9fd Mail rejected,ta沒(méi)有給授權(quán)碼,就是使用的登錄密碼,我嘗試的所有辦法都無(wú)法發(fā)郵件(無(wú)論是否偽造)
解決辦法:暫無(wú),勸君慎用139,或者有解決的踢我一腳謝謝
測(cè)試sina郵箱,sina郵箱是要將mail from和from進(jìn)行匹配的,也就是無(wú)法通過(guò)這個(gè)方法進(jìn)行偽造,有知道怎么做的也可以提醒我謝謝。
解決辦法:我無(wú)。
測(cè)試126郵箱,給qq郵箱發(fā)郵件,第一次可以偽造(顯示代發(fā),并且有一段特殊信息回顯),之后就是顯示真實(shí)的郵箱地址。
目前就測(cè)試了這幾個(gè)郵箱服務(wù)商,總的來(lái)說(shuō)就qq、163和126可以偽造發(fā)信人,這幾個(gè)郵箱開(kāi)啟SMTP服務(wù)的話(huà)短信是自己發(fā)的短信費(fèi)是自己掏的,所以寫(xiě)這篇文章是含有成本在里面的(含金量杠杠的🐕)。
啟示
收到郵件注意一下郵件內(nèi)容,奇怪的發(fā)信人奇怪的郵箱注意查看信頭,信頭中的Sender一般即為真實(shí)發(fā)信人,使用一些比較知名的郵箱服務(wù)平臺(tái)等,小平臺(tái)的郵箱甚至某些有名的平臺(tái)如某浪的郵箱可能還不會(huì)顯示由……代發(fā),比如說(shuō)我測(cè)試過(guò)的臨時(shí)郵箱查看偽造的郵件就沒(méi)有顯示真實(shí)郵件地址,這得注意信頭的Sender了。
拓展閱讀
1.SMTP協(xié)議詳解
2.廖雪峰Python-電子郵件-SMTP發(fā)送郵件
總結(jié)
以上是生活随笔為你收集整理的Java实现伪造邮件发信人的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Bash脚本基础:环境变量定义与使用
- 下一篇: java 绘制长方形_Java基础之在窗