telnet 收发邮件及邮件内容的简单解读

这两天学习了用telnet手工连接服务器,接受发送邮件,并尝试了一点简单的解读


先是引用网上的一些关于telnet的作用原理与可用之处的讲解:

作为一名linux系统管理员,经常要做的一件事就是经常需要确定某台服务器的某个服务启动的某个端口是否开启,是否还能正常提供服务。当然对于某些端口可以直接打开看看特定的服务是否还在正常运行,比如Http的80端口,ssl的443端口等等这样做的前提是你所管理的服务器数量较少,还能在你能逐一打开地址测试的劳动强度范围之内。这里跟大家分享下telnet命令在远程登录功能之外的另外一个功能--探测端口是否开启
首先我们说下linux命令telnet的原理及作用
一.Telnet的具体工作原理,这个估计很少人会去了解这里详细说一说
telnet远程登录的工作原理: 
当你用Telnet登录进入远程计算机系统时,你事实上启动了两个程序,一个 叫Telnet客户程序,它运行在你的本地机上;另一个叫Telnet服务器程序,它运行在你要登录的远程计算机上。本地机上的客户程序要完成如下功能: 
1 、建立与服务器的TCP 联接; 
2 、从键盘上接收你输入的字符; 
3 、把你输入的字符串变成标准格式并送给远程服务器; 
4 、从远程服务器接收输出的信息; 
5 、把该信息显示在你的屏幕上。

二.Telnet远程登录时实际需要运行两个程序,也就是我们常说的客户端及服务器端,但如果我们把telnet当做探测特定端口是否开放时,就不必理会目的服务器时都运行telnet服务端了。
telnet用于探测端口时候开启时主要是根据建立连接及返回值来判断


首先是用telnet发送邮件

1、使用 Telnet 程序连接到 163 的邮件服务器的 25 端口(该端口是默认的)

telnet smtp.163.com 25

会返回一些信息,最后会给出所有的截图


2.ehlo acm(内容随意)

ehlo主机名

SMTP 邮件发送程序与SMTP邮件接收程序建立连接的第一条必须的命令,主机名是当前邮件发送者的主机名;

但是貌似我发送什么都可以

向服务器问好,可以得到一系列响应状态码


3.使用 auth 命令进行身份验证,输入 auth login


4.随后需要输入用户名和密码,但是需要用到BASE64 编码,所以下面给一个我的编码译码小程序

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.Base64;
 
public class Main
{    
	public static void encode()throws IOException  
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));  
        System.out.println("转码前:");  
        System.out.print("用户名 = ");  
        String userName = in.readLine();  
 
        System.out.print("密码 = ");  
        String pwd = in.readLine();
        
        Base64.Encoder encoder = Base64.getEncoder();
        
        System.out.println("\n转码后:");  
        System.out.println("用户名 : " + encoder.encodeToString(userName.getBytes("UTF-8")));  
        System.out.println("密码  : " + encoder.encodeToString(pwd.getBytes("UTF-8")));  
        
	}
	public static void decode()throws IOException
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
		
		System.out.print("decode \n");
		
		String s = in.readLine();
         
        // 解码
        byte[] asBytes = Base64.getDecoder().decode(s);
        System.out.println(new String(asBytes, "utf-8")); // 输出为: some string
		
	}
	public static void main(String [] args) throws IOException  
    {  
		encode();
		decode();
    }  
}


5.分别输入邮件发送人邮箱地址、收件人邮箱地址

mail from:

rcpt to: <[email protected]>


6.data命令,输入邮件内容

from:[email protected]
to:[email protected] 
subject: (主题)successful

内容,正文
.

以.作为结束


telnet 收发邮件及邮件内容的简单解读_第1张图片


大功告成


下面接邮件:

用pop3接受邮件相对比较简单,但是需要到邮箱上开启传输pop3协议

1.telnet pop.163.com 110 连接服务器


2.user 收件人帐户名称,新浪邮箱需要完整的,明文即可

    pass 密码,这里是明码


3.再就是登陆后操作邮件的一些命令:

stat 查询邮箱中的所有邮件的统计信息,一般只有邮件总数和所有邮件占用的字节大小

uidl 根据邮件的序号查询该邮件的唯一标志符

list 查询邮箱中的所有邮件信息,以列表形式列出,自动生成邮件序号。如果指定某一序号则只显示指定邮件信息

retr 指定邮件序号查看某邮件内容

dele 指定邮件序号将某封邮件设置删除标记,当执行退出命令 quit时将实际删除所有具有删除标记的邮件

rset 清除所有设置了删除标记的邮件的删除标记

top 获取某邮件的邮件头和邮件体中的前n行内容,指定邮件序号和n,以空格符隔开

 

连接状态命令与退出命令:

noop 查询与pop3服务器的连接状态

quit 断开连接并退出


关于pop3服务器的响应,响应为 +OK 则为正确,响应为 -ERR 则为错误


telnet 收发邮件及邮件内容的简单解读_第2张图片

K.O.


最后是一些小小的解读内容

telnet 收发邮件及邮件内容的简单解读_第3张图片

1.主题直接明文就出来了:如荧光笔表示

2.下面是内容:也是用BASE64 编码,直接用我刚才的程序解码,K.O.



引用链接:haolloyin 的BLOG

haolloyin 的BLOG

落花虽有意


你可能感兴趣的:(telnet)