命令列下實現Email收發

2021-04-07 03:00:21 字數 3618 閱讀 6410

首先教你一招——telnet。telnet是遠端登入服務,利用它可以實現遠端登入到internet上的任意一台主機上,它是一種協議也是一種命令,可以幫助我們完成很多任務作,更是hacker的入門工具,在這方面我了解的不多,就不詳述了。言歸正傳,為什麼要講它呢,我們可以想象,如果我們能夠遠端登入到乙個郵件伺服器上去,並以另乙個郵件伺服器的「口吻」與它對話,是不是就可以騙得它接收我們發的信了呢?也許你會說我天真,郵件伺服器哪那麼容易騙,看你ip就認識你了,哎,你說對了,有些郵件伺服器不支援這種方式就是因為看了你的ip,這個我們後面再談。也許你認為這樣實現起來可能性不大,那麼我們換一種思維,既然無法把自己裝扮成乙個郵件伺服器,那麼我們就做回我們自己,以乙個使用者的身份登入總行了吧,登入了幹什麼?發信唄!web方式下發不是很好,何必非要用telnet在命令列方式下發呢?因為命令列方式下發信賦予了我們更多的許可權啊!至於什麼許可權我會演示給你看!

可能上面的文筆較差,令你沒太看懂。簡單的說,我們在命令列下發一封信有兩種途徑:一種是直接發給接收方的郵件伺服器;另一種是將命令列方式虛擬成一種發件**工具,把信發到我們自己的郵箱所在的伺服器上去,讓我們自己的郵件伺服器去發這封信給接收方郵件伺服器。其中尤以第二種方式較高明,因為接收方郵件伺服器可以不認識你,但卻決不會不認識你的郵箱所在的伺服器,當然你應該使用那些比較常見的門戶**的郵箱。但你又說了,你怎麼保證一定能通過命令列方式把郵件發到你的郵箱所在的郵件伺服器上去呢?因為你有賬號、密碼啊,如此之許可權在手,夫復何求?

多說無益,演示一下才是真的,我們先來演示第一種吧也就是,直接把郵件發給乙個接收方的郵件伺服器。請看下圖:

解釋一下:我們首先在開始——執行裡輸入cmd開啟乙個shell,然後輸入

telnet s**ail.hit.edu.cn 25

則會彈出上圖並顯示第一行語句,然後我們輸入ehlo asdf,這是在打招呼,就是告訴s**ail郵件伺服器,「我來了」,更深層次的講,這其實是建立了乙個tcp連線。為什麼輸入「asdf」,是為了告訴你,隨便輸入什麼都行,毫無影響,不過建議輸入類似「163.com「這樣的字串,只是給建議,我沒見過這樣有什麼意義,有沒有意義你可以自己做實驗,不扯了,接著說。然後,你會看到連續6行的相應資訊,這資訊懂英文應該不難理解,不理解的就去google it!接著,我們輸入mail from:[email protected],為什麼輸這些,目的是告訴你,連這個都不用寫什麼正式資訊,至少在s**ail下是這樣的,那在別的伺服器上呢?別的伺服器我還沒有試過,不過請放心,知名門戶**是不會給你直接發到人家收件伺服器上去的這種機會的。不過對於s**ail來說,你必須要有@這個字元,並且在@的前面必須有字元存在,最簡單的說就是,」.@「也是可以的。然後,輸入rcpt to:666@s**ail.hit.edu.cn,這裡的位址必須是你所訪問的伺服器下的電子郵件位址,因為如果你隨便填個別的郵件位址,人家幹嘛要管你的閒事呢!如果這時,螢幕的下一行返回了「205 ok」,則表明你基本上算是成功了,後面的事就是把信寫好就行了,這裡寫信的內容我另起以行來寫,因為對於兩種方式來講,在如何寫信上是沒有區別的。

一開始,你要輸入「data」,表明你要開始寫信的內容了。然後需要寫的是一系列的首部行,也是最危險的東西,因為在這裡不像在web方式下寫信,一些資訊不是你自己所能決定的,比如發信人、發信日期,但在命令列方式下寫這封信的時候,這些內容都是可以隨便去寫的,於是我可以很負責任的告訴你,電子郵件是不可信的,從今以後,大家還是把它當成網路硬碟吧!繼續我們的話題,我把這些首部行的書寫模式給大家,照著模擬就可以了。

from:

」王樹國

」<

[email protected]

>(這樣寫真實些,不過你可以隨便寫,你寫什麼都能顯示到發件人那一欄裡)

to:<

666@s**ail.hit.edu.cn

> (這個暫時我還沒發現有什麼意義

)date:

16 apr 2006 15:

45:25 +0800(關於日期,你只要按照這種格式寫就行,寫的是什麼時候接收方顯示的就是什麼時候,不過如果格式有誤,則會顯示伺服器所理解的乙個時間,

+0800的目的是把時差加上,東八區嘛!)

subject:好玩嗎?(這是主題)

請注意:輸入這些首部行時最好不要敲錯了,敲錯了也不用改,因為照樣是會被寫過去的,這裡面具體是怎樣規定的那是伺服器的事,,不同伺服器規定的標準也會稍有不同,但不會差太多,有興趣你可以自己測測看。寫完這些首部行之後,就應該寫正文了,不過正文與首部行之間需要乙個空行,接收方郵件伺服器會把空行以下的部分自動收到正文裡去,正文該怎麼寫,我就不教大家了,圖上都很清楚了。不過再需要注意的乙個地方就是如何結束——敲乙個空行,輸入乙個「

.」,再敲乙個空行,這樣伺服器才知道你已經寫完這封信了,於是螢幕上會有一串回顯字元,表明該封信已經被接收到佇列中去了。

也許你現在已經感興趣了,準備向

163或者

sina開刀,但我會告訴你通過這樣一種方式去欺騙大型門戶**的郵件伺服器是妄想,以下幾幅圖是本人失敗的寫照。

順便提醒大家,連線這些郵件伺服器時需要用類似這樣的方式:telnet **tp.163.com 25或者telnet **tp.sina.com.cn 25

綜上可見,無論是163、sina、126、gmail都不能讓我們輕易的直接發到其郵件伺服器上去,難道這樣就沒辦法了嗎?當然不是的!

第二種方式該登場了,這就是我所謂的以shell中敲命令列作為**發信工具的方式實現發給任何郵件伺服器上的任何乙個郵箱。它的大體流程與第一種方式是類似的,所以我講起來也方便些,唯一不一樣的地方是,當進行了ehlo alkj握手連線之後,我們不是輸入mail from…而是輸入auth login,以向該郵件伺服器表示,我們是乙個使用者,準備登陸發信了,然後螢幕上回顯乙個字串,意思是讓我們輸入使用者名稱,輸完後螢幕上又會回顯乙個字串,讓我們輸入密碼,請大家注意,這裡的使用者名稱和密碼可是有講究的,就是必須經過base64編碼後的才可,不然伺服器是不識別的,關於base64我在這裡倒想多談一些,但鑑於時間問題,暫且為止吧,我只是想告訴大家,平時我們發附件時,會顯示比實際稍大是跟它有關的。至於如何得到你的使用者名稱與密碼的base64編碼呢,大家自己去google吧,網上這方面的介紹不少,也都足夠詳細,我在這裡要做的就是把幾個參考發出來,也就足以說明問題了!順便提一點,gmail是不支援這樣一種操作的。

以上說了一大堆都是關於傳送email,至於接收,既然題目裡寫了,那為了滿足部分人的好奇心,就也簡單說說吧!不過在我看來,命令列下接收email確實沒什麼大用,也什麼意思!因為你讀到的差不多都是經過了發信方伺服器base64編碼後的內容,除非人家的郵件伺服器沒編碼,不過對於那些大型門戶**下的email來說,這種可能性不大。

如果要實現命令列方式下接收email,首先需要連線到你的郵箱伺服器的110埠上去,具體操作是這樣的:首先telnet pop3.163.com 110,得到回應後,輸入user magicsongyang,得到提示後,再輸入pass 123456,這樣你就可以進行收信了,常用的一些命令在網上都可以找到,比如list用來列出所有郵件,retr 5用來檢視編號為5的那封郵件,退出輸入quit就可以了。為便於大家理解,簡單貼一張圖出來吧!

以上介紹了有關命令列方式下收發email的相關知識,目的在於把底層細節上的東西介紹給大家,絕對不鼓勵大家利用這些知識來做一些雞鳴狗盜的勾當。希望大家能對計算機網路的相關知識感興趣,對應用層的一些協議理解的更細緻,本來還想介紹一些關於ftp命令方面的知識,以及討論一下通過telnet可否進行檔案傳輸等問題,不過鑑於其中一些內容本人了解的也不透徹,就不獻醜了,雖然已經很慚愧了。最後感謝google、baidu提供給我幾天來的資料支援,感謝king的鼓勵,謝謝大家!

在命令列下收發郵件

今天,看到網上介紹說用命令列下來收發郵件,因此具體寫一下過程.收郵件 開啟 開始 選單中的 執行 對話方塊,輸入命令telnet 及遠端伺服器端口號,如 telnet pop3.163.com 110就會與 網易163免費郵 的pop3伺服器pop3.163.com建立連線。如果上述連線成功,pop...

python學習筆記 實現收發Email

關於email的基礎知識就不說,直接進入python主題。一 傳送email 1 連線到郵件伺服器 2 登陸 如果需要的話 3 發出服務請求 比如傳送 4 退出 在smtp中我們主要用到的方法是 sendmail from,to,msg mopts,ropts 是把msg從from發給to,esmt...

python學習筆記 實現收發Email

python學習筆記 實現收發email 關於email的基礎知識就不說,直接進入python主題。一 傳送email 1 連線到郵件伺服器 2 登陸 如果需要的話 3 發出服務請求 比如傳送 4 退出 在smtp中我們主要用到的方法是 sendmail from,to,msg mopts,ropt...