aardmud.org

aardmud.org:4000

Protocol Support

MUD-specific protocols detected via MSSP flags or Telnet negotiation. See the glossary for definitions.

  • MSSP: No

  • GMCP: Negotiated

  • MSDP: No

  • MCCP: No

  • MCCP2: No

  • MXP: No

  • MSP: No

  • MCP: No

  • ZMP: No

Telnet Fingerprint

ab3ab724663115a7…

This fingerprint is shared by 6 other servers.

Options requested from client: NAWS, TTYPE

Data source: ab3ab724663115a7/7bb6679f5875a629.json

The complete JSON record collected during the scan, including Telnet negotiation results and any MSSP metadata.

{
  "server-probe": {
    "fingerprint": "ab3ab724663115a7",
    "fingerprint-data": {
      "offered-options": [],
      "probed-protocol": "server",
      "refused-options": [
        "BINARY",
        "CHARSET",
        "COM_PORT",
        "ECHO",
        "EOR",
        "SGA",
        "STATUS"
      ],
      "requested-options": [
        "NAWS",
        "TTYPE"
      ],
      "scan-type": "quick"
    },
    "session_data": {
      "banner_after_return": "Please enter a character name, 'NEW' to create a new player or 'Q' to disconnect.\n\rWhat be thy name, adventurer? ",
      "banner_before_return": "#############################################################################\n\r##[                                               ]##########################\n\r##[        --- Welcome to Aardwolf MUD ---        ]############ /\"  #########\n\r##[                                               ]########  _-`\"\"\"', #######\n\r##[         Players Currently Online: 220         ]#####  _-\"       )  ######\n\r##[                                               ]### _-\"          |  ######\n\r################################################### _-\"            ;  #######\n\r######################################### __---___-\"              |  ########\n\r######################################  _\"   ,,                  ;  `,,  ####\n\r#################################### _-\"    ;''                 |  ,'  ; ####\n\r##################################  _\"      '                    `\"'   ; ####\n\r###########################  __---;                                 ,' ######\n\r######################## __\"\"  ___                                ,' ########\n\r#################### _-\"\"   -\"\" _                               ,' ##########\n\r################### `-_         _                              ; ############\n\r#####################  \"\"----\"\"\"   ;                          ; #############\n\r#######################  /          ;                        ; ##############\n\r#####################  /             ;                      ; ###############\n\r###################  /                `                    ; ################\n\r#################  /                                      ; #################\n\r-----------------------------------------------------------------------------\n\r    Enter your character name or type 'NEW' to create a new character\n\r-----------------------------------------------------------------------------\n\rWhat be thy name, adventurer? ",
      "encoding": "ascii",
      "option_states": {
        "server_offered": {
          "0x55": false,
          "0x56": false,
          "0x66": false,
          "0xc8": false,
          "GMCP": true
        },
        "server_requested": {
          "0x66": false,
          "NAWS": true,
          "TTYPE": true
        }
      },
      "scan_type": "quick",
      "timing": {
        "probe": 0.5030090808868408,
        "total": 3.1710715293884277
      }
    }
  },
  "sessions": [
    {
      "connected": "2026-02-08T16:55:29.357258+00:00",
      "host": "aardmud.org",
      "ip": "23.111.142.226",
      "port": 4000
    }
  ]
}

Connection Log

Debug-level log of the Telnet negotiation session, showing each IAC (Interpret As Command) exchange between client and server.

DEBUG client.py:770 Fingerprint client: host=aardmud.org port=4000
INFO client_base.py:174 Connected to <Peer 23.111.142.226 4000>
DEBUG stream_writer.py:692 recv IAC WILL MCCP2_COMPRESS
DEBUG stream_writer.py:708 WILL MCCP2_COMPRESS unsolicited
DEBUG stream_writer.py:1863 handle_will(MCCP2_COMPRESS)
DEBUG stream_writer.py:3030 remote_option[MCCP2_COMPRESS] = False
DEBUG stream_writer.py:933 send IAC DONT MCCP2_COMPRESS
WARNING stream_writer.py:1968 Unhandled: WILL MCCP2_COMPRESS.
DEBUG stream_writer.py:692 recv IAC WILL MCCP_COMPRESS
DEBUG stream_writer.py:708 WILL MCCP_COMPRESS unsolicited
DEBUG stream_writer.py:1863 handle_will(MCCP_COMPRESS)
DEBUG stream_writer.py:3030 remote_option[MCCP_COMPRESS] = False
DEBUG stream_writer.py:933 send IAC DONT MCCP_COMPRESS
WARNING stream_writer.py:1968 Unhandled: WILL MCCP_COMPRESS.
DEBUG stream_writer.py:692 recv IAC WILL AARDWOLF
DEBUG stream_writer.py:708 WILL AARDWOLF unsolicited
DEBUG stream_writer.py:1863 handle_will(AARDWOLF)
DEBUG stream_writer.py:3030 pending_option[DO + AARDWOLF] = True
DEBUG stream_writer.py:933 send IAC DO AARDWOLF
DEBUG stream_writer.py:3030 remote_option[AARDWOLF] = True
DEBUG stream_writer.py:3030 pending_option[DO + AARDWOLF] = False
DEBUG stream_writer.py:692 recv IAC WILL ATCP
DEBUG stream_writer.py:708 WILL ATCP unsolicited
DEBUG stream_writer.py:1863 handle_will(ATCP)
DEBUG stream_writer.py:3030 pending_option[DO + ATCP] = True
DEBUG stream_writer.py:933 send IAC DO ATCP
DEBUG stream_writer.py:3030 remote_option[ATCP] = True
DEBUG stream_writer.py:3030 pending_option[DO + ATCP] = False
DEBUG stream_writer.py:692 recv IAC WILL GMCP
DEBUG stream_writer.py:708 WILL GMCP unsolicited
DEBUG stream_writer.py:1863 handle_will(GMCP)
DEBUG stream_writer.py:3030 pending_option[DO + GMCP] = True
DEBUG stream_writer.py:933 send IAC DO GMCP
DEBUG stream_writer.py:3030 remote_option[GMCP] = True
DEBUG stream_writer.py:3030 pending_option[DO + GMCP] = False
DEBUG stream_writer.py:692 recv IAC DO AARDWOLF
DEBUG stream_writer.py:1733 handle_do(AARDWOLF)
DEBUG stream_writer.py:3030 pending_option[WILL + AARDWOLF] = True
DEBUG stream_writer.py:933 send IAC WILL AARDWOLF
DEBUG stream_writer.py:3030 local_option[AARDWOLF] = True
DEBUG stream_writer.py:3030 pending_option[WILL + AARDWOLF] = False
DEBUG stream_writer.py:692 recv IAC DO TTYPE
DEBUG stream_writer.py:1733 handle_do(TTYPE)
DEBUG stream_writer.py:3030 pending_option[WILL + TTYPE] = True
DEBUG stream_writer.py:933 send IAC WILL TTYPE
DEBUG stream_writer.py:3030 pending_option[SB + TTYPE] = True
DEBUG stream_writer.py:3030 local_option[TTYPE] = True
DEBUG stream_writer.py:3030 pending_option[WILL + TTYPE] = False
DEBUG stream_writer.py:692 recv IAC DO NAWS
DEBUG stream_writer.py:1733 handle_do(NAWS)
DEBUG stream_writer.py:3030 pending_option[WILL + NAWS] = True
DEBUG stream_writer.py:933 send IAC WILL NAWS
DEBUG stream_writer.py:2300 send IAC SB NAWS (rows=25, cols=80) IAC SE
DEBUG stream_writer.py:3030 local_option[NAWS] = True
DEBUG stream_writer.py:3030 pending_option[WILL + NAWS] = False
DEBUG stream_writer.py:684 begin sub-negotiation SB AARDWOLF
DEBUG stream_writer.py:671 sub-negotiation cmd AARDWOLF SE completion byte
DEBUG stream_writer.py:2025 [SB + AARDWOLF] unsolicited
DEBUG stream_writer.py:1655 AARDWOLF: {'channel': 'status', 'channel_byte': 100, 'data_byte': 1, 'data_bytes': b'\x01'}
DEBUG client_base.py:463 negotiation failed after 4.01s.
DEBUG client_base.py:470 failed-reply: 'SB TTYPE'
DEBUG stream_writer.py:684 begin sub-negotiation SB AARDWOLF
DEBUG stream_writer.py:671 sub-negotiation cmd AARDWOLF SE completion byte
DEBUG stream_writer.py:2025 [SB + AARDWOLF] unsolicited
DEBUG stream_writer.py:1655 AARDWOLF: {'channel': 'status', 'channel_byte': 100, 'data_byte': 1, 'data_bytes': b'\x01'}
DEBUG stream_writer.py:3030 pending_option[DO + BINARY] = True
DEBUG stream_writer.py:933 send IAC DO BINARY
DEBUG stream_writer.py:3030 pending_option[DO + SGA] = True
DEBUG stream_writer.py:933 send IAC DO SGA
DEBUG stream_writer.py:3030 pending_option[DO + ECHO] = True
DEBUG stream_writer.py:933 send IAC DO ECHO
DEBUG stream_writer.py:3030 pending_option[DO + STATUS] = True
DEBUG stream_writer.py:933 send IAC DO STATUS
DEBUG stream_writer.py:3030 pending_option[DO + CHARSET] = True
DEBUG stream_writer.py:933 send IAC DO CHARSET
DEBUG stream_writer.py:3030 pending_option[DO + EOR] = True
DEBUG stream_writer.py:933 send IAC DO EOR
DEBUG stream_writer.py:3030 pending_option[DO + COM_PORT_OPTION] = True
DEBUG stream_writer.py:933 send IAC DO COM_PORT_OPTION
DEBUG stream_writer.py:3030 pending_option[DO + MSDP] = True
DEBUG stream_writer.py:933 send IAC DO MSDP
DEBUG stream_writer.py:3030 pending_option[DO + MSSP] = True
DEBUG stream_writer.py:933 send IAC DO MSSP
DEBUG stream_writer.py:3030 pending_option[DO + MSP] = True
DEBUG stream_writer.py:933 send IAC DO MSP
DEBUG stream_writer.py:3030 pending_option[DO + MXP] = True
DEBUG stream_writer.py:933 send IAC DO MXP
DEBUG stream_writer.py:3030 pending_option[DO + ZMP] = True
DEBUG stream_writer.py:933 send IAC DO ZMP
INFO fingerprinting.py:746 connection for server fingerprint 55b88c39615346b6
ERROR base_events.py:1821 Task exception was never retrieved
future: <Task finished name='Task-4' coro=<fingerprinting_client_shell() done, defined at
    /home/jquast/telnetlib3/telnetlib3/server_fingerprinting.py:125> exception=TypeError('Object of type bytes is not JSON
    serializable')>
Traceback (most recent call last):
  File "/home/jquast/telnetlib3/telnetlib3/server_fingerprinting.py", line 168, in fingerprinting_client_shell
    await _fingerprint_session(
  File "/home/jquast/telnetlib3/telnetlib3/server_fingerprinting.py", line 265, in _fingerprint_session
    _save_server_fingerprint_data(
  File "/home/jquast/telnetlib3/telnetlib3/server_fingerprinting.py", line 509, in _save_server_fingerprint_data
    return _save_fingerprint_to_dir(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jquast/telnetlib3/telnetlib3/fingerprinting.py", line 769, in _save_fingerprint_to_dir
    _atomic_json_write(filepath, data)
  File "/home/jquast/telnetlib3/telnetlib3/fingerprinting.py", line 872, in _atomic_json_write
    json.dump(data, f, indent=2, sort_keys=True)
  File "/usr/lib/python3.12/json/__init__.py", line 179, in dump
    for chunk in iterable:
  File "/usr/lib/python3.12/json/encoder.py", line 432, in _iterencode
    yield from _iterencode_dict(o, _current_indent_level)
  File "/usr/lib/python3.12/json/encoder.py", line 406, in _iterencode_dict
    yield from chunks
  File "/usr/lib/python3.12/json/encoder.py", line 406, in _iterencode_dict
    yield from chunks
  File "/usr/lib/python3.12/json/encoder.py", line 406, in _iterencode_dict
    yield from chunks
  File "/usr/lib/python3.12/json/encoder.py", line 326, in _iterencode_list
    yield from chunks
  File "/usr/lib/python3.12/json/encoder.py", line 406, in _iterencode_dict
    yield from chunks
  File "/usr/lib/python3.12/json/encoder.py", line 439, in _iterencode
    o = _default(o)
        ^^^^^^^^^^^
  File "/usr/lib/python3.12/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable

Generated by telnetlib3-fingerprint

telnetlib3-fingerprint --loglevel=debug aardmud.org 4000