mu*index
阅读方式
主题
MSSP  [协议]
Mud Server Status Protocol——一个游戏如何向爬虫讲述自己。它报告的一切都是自述而非实测,本站把这两者分得清清楚楚。
https://www.mudhalla.net/tintin/protocols/mssp/

实测采用情况
  在887个已列出的游戏中,有 320 个被观测到提供了它(36.1%)
  /zh-Hans/games?protocol=MSSP

  未算进这里的游戏,并不是没有这个协议的游戏。一个游戏被算进这里,条件是我们观测到它的服务器在一次握手中提供了这个选项;其余的既包括没有向我们提供它的服务器,也包括我们还没有读到过握手的服务器,而我们说不出是哪一种。

  按代码库,在我们已识别的游戏中
    FluffOS              29 个中有 29 个提供了它
    PennMUSH             34 个中有 28 个提供了它
    CoffeeMUD            32 个中有 18 个提供了它
    CircleMUD            47 个中有 15 个提供了它
    ROM                  55 个中有 12 个提供了它
    Evennia              11 个中有 11 个提供了它
    DikuMUD              35 个中有 6 个提供了它
    SMAUG                20 个中有 5 个提供了它
    MUCK                 24 个中有 4 个提供了它
    tbaMUD               5 个中有 4 个提供了它
    AresMUSH             18 个中有 3 个提供了它
    CobraMUSH            2 个中有 0 个提供了它
    RhostMUSH            40 个中有 0 个提供了它
    TinyMUSH             9 个中有 0 个提供了它

MSSP 是 telnet 选项 70。爬虫发送 IAC DO MSSP,支持它的服务器就回一张描述自己的名值对表格——
名称、在线人数、代码库、运行时长、主机名、端口、题材,以及它愿意公布的其他任何东西。

它是这个圈子里最接近“机器可读的目录条目”的东西,也是好几个目录站点得以存在的原因。

MSSP 报告里的每一项都是一句断言

本站与所有既有站点的分歧就在这一点上。一份 MSSP 报告是游戏在告诉你它自己的情况。 MSSP 表里的 GMCP 1 意味着有人在某个配置文件里敲了个
1,也许是在 2011 年。 它不是服务器提供 GMCP 的证据,而两者对不上的次数,多到足以让人感兴趣。

所以来自 MSSP 的事实在这里标为自述;凡是同一项事实我们也能实测的——比如一项能力,
去看这个选项是否真的被协商了——两者都会并排显示,各自带着一个时间。一个游戏的 MSSP 自述支持 GMCP
已有六年,却从未在任何一次握手中提供过它,这是个值得知道的事实,而且别处找不到。

有一个字段我们刻意完全不予采信:CREATED。它只是一行手敲的文字, 把它计入任何东西,都会让那样东西轻易地被人做手脚。

谁会应答它

MSSP 是 Diku 和 LP 那边的答案。在我们自己那份涵盖 38 个代码库的调查中, 有 28 个通过 MSSP 公布在线人数,7 个通过登录画面上的
WHO 公布,两样都做的只有 2 个—— 这两个家族几乎完全不相交。AresMUSH、TinyMUX、MUCK、RhostMUSH、CobraMUSH 和
TinyMUSH 完全不提供 MSSP。

这就是要探测四个层次而不是一个层次的实证理由:只建立在 MSSP 之上的爬虫, 看不见 MUSH
家族的大部分,而那是这个圈子里很大的一块,也是本站预期读者中的大多数。

主动索取,不要干等

有相当多完全支持 MSSP 的服务器从不主动给出它——它们会应答 IAC DO MSSP,除此之外一言不发。 于是,一个上来先发 IAC WILL NAWS
然后等着的爬虫,会把这些游戏报成什么都没公布, 而这是拿爬虫自己的沉默去下一句关于服务器的断言。我们在连接时就发送 IAC DO MSSP。

纯文本形式

还有一种更老的变体:客户端在登录画面上直接发送 MSSP-REQUEST 这一行字面文本。我们实测过:
在试过的二十个游戏里,有三个作了应答——而这三个同样也应答 telnet 选项 70, 所以它没能触及任何选项 70
触及不到的东西。有八台服务器把这个请求读成了一个角色名并如此回复, 白白花掉了一个陌生人被允许的登录尝试次数中的一次。我们不发送它。

另见
  GMCP — /zh-Hans/reference/protocols/gmcp
  DikuMUD — /zh-Hans/reference/codebases/dikumud
  PennMUSH — /zh-Hans/reference/codebases/pennmush