Object 的特性是 Key 不会重复。 这里使用 values 是因为可以保留类型,keys 会变成字符串。
针对于上述的方案,还有其他变种实现。
算是方案1的变种吧,优化了includes` 的性能。
有时候我们想清空,但是又无法获取到所有的cookie。 这个时候我们可以了利用写满,然后再清空的办法。
如果做海外的话,还会有时区问题,一般我用moment解决
微软从未正式公布过他们的 MSN Messenger Server ,并且官方客户端不被允许连接到服务器除非微软自己。尽管如此,许多人还是开发了第三方的服务器。
两台计算机通讯中需要的“语言”被称为“协议”, MSN Messenger 客户端与服务器间交互信息的规则被称为“ MSN Messenger 协议”,而经由服务器从一个客户端传递到另一个客户端的信息规则在这里被称为“ MSN Client 协议”。
MSN Messenger 协议由若干客户端与服务器发送的命令组成。例如,当你的联系人中的某人离线时,服务器将发送类似信息到你的客户端: FLN myname_123@/protocol//protocol/ ,端口 80 作为 HTTP 连接的分发服务器。不像 ,从来没有看到这台服务器转移客户端到另外的通知服务器。然而在 MSN 的 HTTP 方法中有一个传递式的功能。
虽然 HTTP 更经常用来传输 HTML 文档,实际上它完全可以传输任何样式的数据。 HTTP 中,如果客户端不首先请求的话,服务器是没有办法向客户端发送任何信息的。 MSN Messenger 客户端在 HTTP 的一个请求主体中发送命令,然后服务器经过处理通过应答体来响应。经过一段时间后,如果客户端没有命令可以发送,它将“ poll ”服务器来得到新的信息。官方客户端每过两秒钟就会 poll 服务器一次。
一旦客户端发送了一个 HTTP 请求,必须在发送另外一个请求前等待响应返回。例如,如果你 poll 服务器后,没有等待便发送了一个命令,你将收到 HTTP400 错误(错误的请求)。
通常一个单一的连接将在一个 MSN Messenger 会话中保持激活状态,但协议看起来支持连接被打断并重新建立,而且会话不受任何影响。但这在实际中从未测试过。
当你初始化时,在 HTTP 连接中客户端端口设为 0 ,并且发送 PNG 将导致服务器返回 HTTP 错误,并断开连接。另外,协议运行良好。
官方客户端中的 HTTP 声明
本文中大多数测试是基于官方客户端的第五个版本进行的,仅仅对 HTTP 连接有简单支持,还有一些 Bugs 和缺陷。版本 5 种是对这些选项进行了简单实现,所以应该还没有作十分彻底的测试。希望将来的版本中将有所提高。
官方客户端在使用 HTTP 代理时如果不用 80 端口操作不够友好。它并不总是遵循“一次一个请求”的规则,所以偶尔会收到 400 错误,并被踢出。配置菜单中的“使用 HTTP 代理服务器”和“使用 SOCKS 代理服务器”真让你迷惑。 HTTP 会话中的与 SOCKS 连接中的代理服务器执行一个完全不同的功能,更像不需要这个协议。更遭的是,有些 HTTP 代理服务器截取并代理 HTTP 连接但没有客户端信息。官方的客户端根本就没有保留“交换代理”。最后,如果你指定了一个 HTTP 代理服务器,官方客户端不管用不用都将忽略设置,首先尝试直接连接 MSN Messenger ,然后如果失败的话才会尝试 HTTP 。
或者 ( 对于一个交换服务器会话来说 )XFR 中给出的 IP 地址。你所需要发送的命令将包含在信息主体中,每次的请求中(包括最初的一次请求)。当一段时间没有消息发送(官方客户端 2 秒),客户端就需要 poll 来得到服务器命令列表。
服务器应答中将包含“ X-MSN-Messenger ”头部信息,其中包含了下一次请求的 IP 地址及你下一次请求的会话 ID 。如果会话被关闭,头部信息中还会包含“ Session=close ”。会话 ID 一般为长数值(在一次会话中保持不变),后加一个点“ . ”,然后一个短数值(每次应答都会变更)。不要依赖这个信息,把它视为随意字符串就可以了。
官方客户端会尝试在一次会话中保持单一连接,尽管会话 ID 可能被包含,但事实上代理服务器在中间会话中可能关闭了连接。假如服务器不会在你的连接关闭后终止你的会话,你就必须发送 OUT 来关闭你的连接(或者等待服务器端超时)。
关键字应该是大小写敏感的,第三方的客户端应该如文档所述大小写一致。关键字最后必须加冒号(译者注:根据上下文,这里的冒号应该是关键字的一部分,而且也是关键字的结束符),然后是空格。关键字只能在最后出现冒号,值之间可以有。例如,文件传输中,一个客户端可能会发送:
另一台客户端可能返回:
IP-Address: ,你不能改变它,仅需要当登录时输入一次,虽然很多账号都是以“ @ 注册可以把任意邮箱注册为护照。 Hotmail 和 MSN 账号会自动注册到护照系统,一个账号最大长度为 129 字节。
所有命令都需要按账号查阅联系人(不是显示名也不是昵称),因为账号可以保证唯一性。
,端口 1863 的分派服务器作为直接的 SOCK 连接,并使用 , 80 端口作为分布服务器的 HTTP 连接。如果想连接到第三方的 MSN Messenger 网络,应该使用不同的分布服务器。
如果不能连接到历史通知服务器,那就尝试分派服务器。如果仍不能连接到分派服务器,那么不是你的连接有问题,就是 MSN Messenger 网络 Down 掉了(有时还是会发生的)。
如果你首先连接到一个通知服务器,那么你就处于“登录”处,包含了协议版本炎症,身份验证,如果当前服务器超负荷,还有可能转移到其他通知服务器。
登录期间,服务器行为与通常情况不同,通信是本质上同步的 — 客户端发送一个命令,服务器响应,客户端发送另一个命令,……。如果在错误的时候发送了一个命令(如正当协议版本在洽谈时,你发送了一个 VER 命令),服务器会返回 715 错误,并断开。如果发送了登录期间无意义的命令(如 SYN
),你将立即被断开,并得到一个错误。登录期外不需要遵守此规则。
VER 命令指出了 MSN Messenger 协议所支持的版本信息。 VER 命令包含一个事务 ID 、一串协议版本信息和参数(注意协议版本大小写敏感)。服务器会返回相同事务 ID 的 VER 响应。如果服务器至少支持一种协议,参数中就会给出所支持的列表,否则应答中就会仅仅包含参数 0
,并断开连接(一般不应该发生)。
第一个参数(不包括 CVR0 )是会话中应该使用的协议版本,原则上, CVR0 可能出现在参数列表的任意位置,实际上,通常它被放在列表的最后。在 MSN Messenger 协议版本 8 种,你必须至少支持“ MSNP8 ”和“ CVR0 ”。
CVR 发送客户端及操作系统的版本信息到服务器,对于官方客户端来说,服务器会响应建议用户使用的客户端版本信息(可能与您正使用的版本相同)。
CVR 包含你使用的语言信息,客户端的名称及版本,还有操作系统的名称及版本。登录后你随时可以发送 CVR 命令到 NS ,但官方客户端总是在发送最初的 CHG 后就立即发送 CVR 。你可以多次发送 CVR 命令, CVR 需要事务 ID 和 8 个参数:
. 第一个参数是十六进制数字,用来指定你的 locale ID (如 0x0409 表示美国英语)。
. 第二个参数是你的操作系统类型( win 表示 Windows )
. 第三个参数表示你的操作系统版本信息(如
/r/n
接收到 CVR 的响应后,你必须发送 USR 命令,它拥有一个事务 ID 。
. 第一个参数是认证系统(总是 TWN )。
. 第二个参数总会是字母 I (代表开始 Initiating 认证)
. 第三个参数是用来登录的账号
如果你的 USR 不规范,服务器将断开连接,可能会不给出任何应答,也可能首先发送一个错误, 911 错误会在你把 I 替换为 S 时发生,或者非法的账号名如 总是发送 XFR ,但 从来不这样做。微软的其他通知服务器极少发送 XFR ,大概在超负荷或者加入维护时会发送吧。
XFR 命令与之前的 USR 具有相同的事务 ID ,并有四个参数。
. 第一个参数是 NS ,告诉你正在转换到一个通知服务器。
. 第二个参数是通知服务器的 IP 和端口号,以冒号分隔。端口号看起来总是 1863 ,但最好按照给出的端口号进行处理。
. 第三个参数是总会是 0 。
. 第四个参数是你当前连接的服务器的 IP 和端口号(以冒号分隔)。
”用户以官方客户端版本 5 登录,口令为“ password ”。
一旦设置了初始列席状态,你的 forward 列表中的联系人状态变更时都会使服务器发送一个通知给你。
当一个联系人关闭了他们的列席状态(可能是离线或者隐身),服务器将发送一个 FLN 命令(不带事务 ID )与他们的护照过来:
移动联系人到另外一个组,只需要用 REM 命令从原组中删除,然后 ADD 到目的组。由于联系人可以在不同的组,所以不会介意你这样做有什么目的,示例如下:
MSN 也支持一个联系人在多个组中,要实现如此,只需要多次执行 ADD 命令,每次包含不同组 ID 即可。
要阻止一个联系人,需要首先从 AL 移除该人(如果他(她)在 AL 中的话),然后把他(她)加入 BL 即可。
联系人更名( REA )
如下同样适用于个人显示名。
变更任意列表中某人的昵称,必须使用 REA 。 REA 有两个参数:欲修改的账号, URL 编码的新昵称。如果成功,服务器将返回 REA ,其中包含新版本号,联系人账号和新昵称。
如果是你的账号, REA 将正式修改你的显示名,并 NLN 通知其他在线人员(除非你看起来离线,或者阻止了那个联系人)。如果尝试修改你的显示名过于频繁,将收到 800 错误。注意,这样在变更其他人员时不适用。
如同 ADD 命令,昵称长于 387 字节( 2003 年 3 月 29 日 止),将被立即断开。官方客户端也不允许联系人设置名称超过 129 字符( 3 个 URL 编码对应一个字符),并且不能正确显示 129 字节以上的显示名。如果想修改不再你的任意列表中的人员名称,将收到 216 错误。这同样适用于账号是非法邮件地址。
基于某些原因, MSN 可能不会让你使用某些词作为昵称,服务器将发送 209 错误。如果你尝试修改你的显示名,但是护照并未验证也会收到此错误。(当你提交护照后,你将收到一个 email 来核实你的护照的真实性)注意当给出非法人员的非法昵称时, 209 错误优先于 216 错误。
昵称中一些众所周知的限制单词有“ msn ”,“ Microsoft ”。不过突破这个限制太简单了,当你设置一个昵称时,把它进行 URL 编码,或者其中的某些字符,然后 MSN 就不会告诉你不合法了。如“ MSN%20SUCKS ”替换为“ %4DSN%20SUCKS ”,或者你的客户端对每个字符进行编码。注意 %4D 就是 M , %20 就是空格。
如果你阻塞了某人,他们只能收到空白信息(你的电话非空的话)。
.Kid — 账号是否是儿童护照( 0 或 1 )
MSPAuth 的值已被截短。大多数信息看起来没有用,除了 Hotmail 自动的登录用的那些外。
注意: 的账号,客户端将收到 2 个 profile 消息:一个 EmailEnabled 设置为 0 ,另外一个设置为 1 但不包含 LoginTime 字段,除了这些,消息是完全相同的。
客户端 IP 及端口号
ClientIP 及 ClientPort 指出了服务器所认为的客户端连接用的 IP 及端口号。连接的原端口在客户端机器上,目的端口( MSN Messenger 会话中通常为 1863 )是服务器的监听端口。不幸的是, MSN Messenger 服务器端有一个 Bug 可以导致“ ClientPort ”毁坏,你需要做些工作得到真正的端口号。
技术的讨论中,说这个值已经被“字节交换”了,关于到底做了些什么已经超出我们的范围了。有很多方法可以得到正确的值,但建议按(( ClientPort AND 255 ) *256 ) +((ClientPort AND 6) 计算,按照公式写一个函数很简单,但要解释这些二进制运算很难。……
客户端端口及地址可以被用来猜测,是否到服务器的连接经过了某种网络地址转换( NAT )或者代理服务器。 MSNP8 中,这些信息仅用来在文件传输中决定“ Connectivity ”字段的值,其他高级应用在 MSNP9 中有介绍。
如果你的账号支持邮件通知(当前,看来仅针对 Hotmail 或 /r/n
/r/n
.Inbox-Unread — 收件箱中未读信息数(如果其他邮箱中有未读邮件的话,可以以是 0 )
.Folders-Unread — 除收件箱及垃圾箱外其他未读邮件数。(如果收件箱有未读邮件可以为 0 )。
下面给出了每个需要处理的高亮的变量。
FOLDERS
、
COMPOSE
参数)(尤其是,第二个响应参数)。
命令应答的第三个参数。
消息的秒数。不应该用
profile
中的
LoginTime
字段来计算该值,实际上,你本地的时钟是不准确的。
URL
命令的第一个参数中获得。如果你选用了
Compose-URL
,你可以指定一些特殊变量,包括“
mailto
成功商议协议版本后,客户端给出了它的协议版本信息。
客户端再次给出协议版本信息
Alice 的客户端尝试自行认证,服务器返回了 Passport 认证所需的一长字符串。
现在 Alice 成功登录到 NS 。她的客户端可能会记住下次直接访问 baym- ,而不是 。服务器这时会发送 Alice 的 profile :
Alice 列表中的第二个人是 Carol ,昵称 Carol ,她共享了她的工作电话( ),但没有其他信息了。不幸的是,服务器用两个包来发送 Carol 的资料,中间有间隔。 Alice 的客户端必须重建这些行数据,然后才可以进行处理。
最后是 Fred ,应该是最近添加的,因为他在 Alice 的 RL 中,但既不在 AL 也不在 BL 中。
服务器用“ ”询问 Alice 的客户端
Alice 回来后,客户端设置在线状态为“ online ”
不久, Carol 设置为“ Busy ”,并改变了她的显示名
客户端不响应此命令,而是根据第二个参数打开一个到指定 IP 及端口的连接。
由于 XFR 的原因,你应该在两分钟内打开一个 TCP 连接到服务器以接收 RNG 命令。首先你应该发送 ANS 命令,它包含事务 ID 及 3 个参数:账号名、认证串及交换板会话 ID 。
如果成功的话,服务器将响应一个或多个 IRO ,最后跟随一个 ANS ,但毕竟还有很多事情会导致错误发生:
. 如果你连接,但没有发送 ANS ,交换板将在约 1 分钟后关闭连接,且不含任何错误。
. 如果接收 RNG 一分钟内你没有连接,交换板将关闭连接,在 ANS 前不包含任何错误。
. 无论怎样,只要会话 ID 错误,将立即断开,不含错误。
. 如果你发送一个不存在的或者非法的账号,并且(或者)不正确的认证串, 911 错误,服务器将关闭连接。
. 如果 ANS 语法错误,立即断开,没有错误
. 连接到错误的交换板,并尝试认证,断开并不含错误。
. 你(或攻击者)已经连接并认证,再次认证,将得到 911 错误,交换板将关闭连接。
. 如果交换板会话中的联系人在你连接并发送 ANS 前离开,交换板会话将在你进入前撤销,因此你 ANS 发送后也将被断开且不含任何错误。
已在交换板中的参与者被发送 IRO 命令,可能作为初始名册。每个参与者将收到一个 IRO 。注意你,已经进入,但并不包含在这个名单内。 IRO 包含 ANS 中同样的事务,并且有 4 个参数:
. 第一个参数表示当前 IRO 为列表中的第几个。第一个 IRO 命令中为 1 ,第二个中为 2 ,依次类推。
. 第二个参数是 IRO 命令总数。
. 第三个参数是参与者的账号
. 第四个参数是参与者的显示名,如果自从加入会话板后,参与者修改了他们的显示名,这个参数将过期。
由于交换板给你的显示名可以是过期的,你应该使用尽可能使用 NS 给你的显示名。
收到最后一个 IRO 后(增加数同总数同),你将收到 ANS ,事务 ID 与你发送的相同,并携带参数 OK 。收到此命令后,你将正式进入交换板会话,可以收发消息了。
如下,是交换板的认证,并且找到了两个参与者(总共 3 人):
如果你是会话中唯一的一个参与者(或者你没有邀请别人或者其他人都已经离开),交换板将在 5 分钟后关闭连接。关闭连接前,服务器不会发送任何命令。
如果会话中有两个人,但互相间有 5 分钟没有发送任何命令,交换板将给两人都发送 BYE 命令,显示对方离开并立即关闭连接。然而 BYE 命令在账号后包含一个附加参数,值为 1 ,表示交换板是由于发呆而被关闭的。示例:
)邀请 Alice 加入一个会话,当前会话中已经有两个人: Bob 与 Carol 。
保持打开 NS 连接, Alice 的客户端按指定服务器又打开一个新连接。现在开始 NS 不会影响 SB ,反之亦然。
交换板服务器关闭连接, Alice 的客户端通知 Alice 会议超时终止。
) 登录到 NS 并成功认证,但由于“显示为脱机”,收到 913 错误。
Alice 更改了状态为 NLN ,并重新请求。
. 如果用户正在键入信息,官方客户端将每隔 5 秒钟发送一个键入通知。
. 如果官方客户端收到一个键入通知,它将指示那个联系人正在键入信息。收到消息后或者 10 秒没有收到新的键入通知的话,这个提示将被取消。
. 如果某人变更了 TypeingUser 字段,官方客户端将出现一个 Bug ,它将显示那个值,而不是你的显示名。
让对方连接用的 IP 及端口号。仅观察到过 10337 端口。
呵呵,记得当年王蕤jj曾经在文章中提到过胡 的儿子哦,说胡公子家教很好,从来不会主动对别人说自己是高干子弟。
这篇文章我也看到过,现在印象都深刻.
王蕤是我少年时崇拜的偶像啊,少年时我也喜欢写作,所以~~~现在都偶尔会想起她.没想到今天会看到有关她的贴子.
中外少年.中外少年.中学的时候最喜欢的一本杂志
同期好象还有<人生十六七>和<少男少女>
眼前的王蕤,和许许多多城市女孩一样:年轻、漂亮、对时尚敏感。
此处评论不是针对她,而是针对现时的记者和写手,是个男的都描述为英俊潇洒,是个女的都描述为貌美如花,真是汗
这本书貌似2002年就出来了,很好看,我一口气看了3遍。
好像她嫁的是一个西方人士,如果我没有记错的话,应该是个白人。可惜我不知道她老公的名字,连老公长啥样都不清楚。她高中和大学时期(在北京的时候)很喜欢结交西方人士,从她的书里我能感觉得出来,大概是很渴望了解外面的世界吧。
我现在发现王蕤跟那个北大的马楠颇像,王蕤在《从北京到加州》的书里提到她非常反感那些十分想嫁给西方白人的中国女孩儿,她也反感白人的白人至上主义。但是她自己就是因为爱上了一个美国白人,才放弃学业飞到美国读加大伯克立大学,后来她也同她的美国白人白马王子结了婚,她老公叫彼得。虽然她在书中总是说她的白人朋友有一种很深的优越感《参看她书中的朋友与理念》,但是凭我看她的书的感觉,我发现她在读初中、高中的那会儿,她骨子里非常渴望和非常喜欢同西方白人交往,而且MS她交的白人还是以男性居多,她有很多这样的男性朋友(我不是泛指爱情上的那种)。我感觉她在美国的英文成名作《LILY》故事虽是讲中国女孩LILY和她的情人西方白人的事儿,但是我总是认为其实这个事故里面也有王蕤和她的白人男友的影子在里面,我觉得王蕤有时也是个心口不一的人,她的性格也蛮好玩的人。
————-----------这位同学,MS你知道得挺多的,不过,我想改正一下,王的老公英文名确实叫彼得,不过他不是白人,是中国人。。。
作者:广州苏三 回复日期: 15:03:16
作者:soaaa384 回复日期: 08:41:48
好像她嫁的是一个西方人士,如果我没有记错的话,应该是个白人。可惜我不知道她老公的名字,连老公长啥样都不清楚。她高中和大学时期(在北京的时候)很喜欢结交西方人士,从她的书里我能感觉得出来,大概是很渴望了解外面的世界吧。
作者:soaaa384 回复日期: 14:06:19
我现在发现王蕤跟那个北大的马楠颇像,王蕤在《从北京到加州》的书里提到她非常反感那些十分想嫁给西方白人的中国女孩儿,她也反感白人的白人至上主义。但是她自己就是因为爱上了一个美国白人,才放弃学业飞到美国读加大伯克立大学,后来她也同她的美国白人白马王子结了婚,她老公叫彼得。虽然她在书中总是说她的白人朋友有一种很深的优越感《参看她书中的朋友与理念》,但是凭我看她的书的感觉,我发现她在读初中、高中的那会儿,她骨子里非常渴望和非常喜欢同西方白人交往,而且MS她交的白人还是以男性居多,她有很多这样的男性朋友(我不是泛指爱情上的那种)。我感觉她在美国的英文成名作《LILY》故事虽是讲中国女孩LILY和她的情人西方白人的事儿,但是我总是认为其实这个事故里面也有王蕤和她的白人男友的影子在里面,我觉得王蕤有时也是个心口不一的人,她的性格也蛮好玩的人。
————-----------这位同学,MS你知道得挺多的,不过,我想改正一下,王的老公英文名确实叫彼得,不过他不是白人,是中国人。。。
不对,不是中国人,我记得我搜到的很清楚,确实是美籍白人。如果都是中国人,你不觉得王蕤的爸爸老是称呼他老公叫彼得,这不明摆着别扭嘛。可惜我就是没有搜到她老公照片。
——————嗯,你觉得在网上搜到的资料具说服力吗?美籍是美籍,不过是华人。。彼得在家叫王蕤都叫安妮的。。而王也是同样叫彼得,而不是中文名的。。王爸爸王妈妈叫王蕤就没有叫英文名,叫法,只是习惯。。如果彼得是在国内工作生活的,王的家人如果叫英文名就别扭了,但他是在美国工作生活的,叫英文名是再正常不过的,王家都是知识份子家庭,叫英文名有什么好别扭的呢。。。信不信由你。。
八她作品的都没什么,但是八到她心口不一嫁白人,就忍不住说上两句了。。
嗯,上面这一篇是当时推《闯入美国主流》时网易要请她去作客的。。
王蕤很小的时候就出名了,知道她是个大才女,现在出落的好看了,好象她还有个妹妹还是姐姐,和她差不多的一个大才女。
好帖啊,很久没有看到王蕤的文章了,LZ辛苦啦~~~
居然在娱乐八挂版看到有关王蕤的贴子,我觉得她可不属于这里:)我是上初中一年级的时候知道她的,她当时14岁,<语文报>上有她的一篇采访,看了觉得和自己思想深深共鸣,就喜欢上她了,成为我中学时代时代少有的同龄偶像,后来我定居加州,可能潜意识也是受了她<从北京到加州>那本书的影响,不过她现在回了香港,可能我哪天说不定也去香港了,最近一年对香港感觉很好,呵呵,,,
作者:自由畅想天 回复日期: 14:27:41
居然在娱乐八挂版看到有关王蕤的贴子,我觉得她可不属于这里:)我是上初中一年级的时候知道她的,她当时14岁,<语文报>上有她的一篇采访,看了觉得和自己思想深深共鸣,就喜欢上她了,成为我中学时代时代少有的同龄偶像
——————————————————
这一段我借用一下,
八卦竟然八到王氏姐妹了,真让人意外,呵、
我认识王蕤是通过<中外少年>,便深深地喜欢上了这个非常有个性的女孩;同样通过<中外少年>,我知道了王葳,知道了<销魂绝代佳公子>的纳兰性德,还有王氏三姐妹......
其实我周围看<中外少年>的并不多,或许因为当时在我的家乡很难买到的原因吧;但是我由于妈妈工作的便利条件,得以看到它,之后便深深喜欢上了它......
至今我都能记得上面的文字,我还把他们摘抄下来以激励自己......
中外少年,青春的永恒记忆......
我也是看中外少年长大的,记得当时还有程冰雪,阎妮,很多文学少年明星,此帖引起了我少年的回忆。不过我中学毕业后就没再买过这本书了,长大了嘛。