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