注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老和山小和尚

敬天爱人

 
 
 

日志

 
 
 
 

163邮箱的两处不符合RFC2821(SMTP)的地方  

2010-04-01 16:59:21|  分类: 协议研究 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
< DOCTYPE html PUBLIC -WCDTD HTML TransitionalEN> 今天我在写一个针对SMTP协议的Ragel实现,发现 Ragel对于此类字符形式的协议,用Ragel来实现真的是方便极了。它可以很完美的实现ABNF范式及一般的正则表达式,而且性能 优异。

我对照RFC2821,发现163的邮箱 EHLO回复包有两个不符合规范的地方。

首先,我们可以telnet smtp.163.com,结果如下:

yaoweibin@debian-lenny-yaoweibin:~$ telnet smtp.163.com 25
Trying 220.181.12.13...
Connected to smtp.163.split.netease.com.
Escape character is '^]'.
220 163.com Anti-spam GT for Coremail System (163com[20090903])
EHLO smtp.163.com
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UFnKiTpUCa0xDrUUUUj
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.

1. “250-mail”中的mail表示的是域名,不能没有‘.’。

在RFC 2821中4.1.1.1和4.1.2节,是这样描述的:
Domain = (sub-domain 1*("." sub-domain)) / address-literal
      sub-domain = Let-dig [Ldh-str]

ehlo-ok-rsp  =    ( "250"    domain [ SP ehlo-greet ] CRLF )
                   / (    "250-"   domain [ SP ehlo-greet ] CRLF
                       *( "250-"   ehlo-line                CRLF )
                          "250"    SP ehlo-line             CRLF  )

“1*("." sub-domain)”说明域名中必须有至少一个‘.’。

2.“250-AUTH=LOGIN PLAIN”中AUTH后面应该是空格,然后接参数。

在RFC 2821中4.1.1.1节,是这样描述的:
ehlo-line    = ehlo-keyword *( SP ehlo-param )

“SP ehlo-param ”说明AUTH后面的参数是用空格分开,这里却跟了“=”号。

可以看到虽然不符合规范,但回复包发了两条AUTH参数,说明它是有意为之,估计是为了配合某些不符合规范的客户端。我搜索一下,很快发现了原因:
http://www.linuxquestions.org/questions/linux-networking-3/qmail-auth-login-auth%3Dlogin-arghhhhhhhh-226524/

看起来像是为了配合Outlook的认证过程。





  评论这张
 
阅读(2089)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017