#!/usr/bin/env python
# cardinal_pythonlib/tcpipconst.py
"""
===============================================================================
Original code copyright (C) 2009-2022 Rudolf Cardinal (rudolf@pobox.com).
This file is part of cardinal_pythonlib.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
===============================================================================
**Constants for use with TCP/IP.**
"""
# =============================================================================
# Common TCP/IP ports
# =============================================================================
[docs]class Ports(object):
"""
Common TCP/UDP ports.
- https://en.wikipedia.org/wiki/Port_(computer_networking)
- https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
"""
# -------------------------------------------------------------------------
# System (well-known) ports are in the range 0-1023.
# -------------------------------------------------------------------------
FTP_DATA = 20 # not for initiating connections
FTP_CONTROL = 21 # for initiating connections
FTP = FTP_CONTROL
SSH = 22
SFTP = SSH # SFTP is FTP over SSH
TELNET = 23
HTTP = 80
NTP = 123
HTTPS = 443
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# E-mail is a special mess:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# As of RFC8314 (2018), the recommendations are:
#
# - Connect via "implicit TLS" ports (always encrypted), rather than
# connecting to the "cleartext" port and negotiating TLS using the
# "STARTTLS" command.
#
# - I think that means: use 465 for SMTP, 993 for IMAP, 995 for POP3.
#
# However, 587 was always the official e-mail submission port. And RFC8134
# is a standards-track document, not an accepted standard
# (https://www.rfc-editor.org/info/rfc8314). Currently RFC8314 says that
# servers SHOULD support both 587 and 465.
#
# Older sources will say that 587 is preferred for SMTP. See
# https://serverfault.com/questions/1064955/why-is-port-587-preferred-over-port-465-in-smtp # noqa: E501
SMTP = 25 # its formal IANA name;
# ... https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=25 # noqa: E501
SMTP_UNENCRYPTED = 25 # https://datatracker.ietf.org/doc/html/rfc5321
SMTP_MTA = SMTP
# ... MTA = message transfer agent = for server-to-server transmission
# ... receives from an MUA (mail user agent = e-mail client)
POP3 = 110 # formal name
POP3_UNENCRYPTED = POP3
IMAP = 143 # formal name
IMAP_UNENCRYPTED = IMAP
SUBMISSIONS = 465 # formal name; message submission over TLS
# ... "submission-s[ecure]", not plural of submission.
SMTPS = SUBMISSIONS
# ... https://datatracker.ietf.org/doc/html/rfc8314
# ... https://stackoverflow.com/questions/15796530/what-is-the-difference-between-ports-465-and-587 # noqa: E501
# ... requires negotiation of TLS/SSL at connection setup
# Was initially intended for another purpose (URL Rendezvous Directory for
# SSM), but was co-opted for e-mail and formalized by RFC8314.
SMTP_PREFERRED = SUBMISSIONS
# ... this is the best for client-to-server transmission (per RFC8314)
SUBMISSION = 587 # formal name; message submission
SMTP_MSA = SUBMISSION
# ... MSA = message submission agent = client-to-server
# ... can
# ... https://datatracker.ietf.org/doc/html/rfc8314
# ... https://stackoverflow.com/questions/15796530/what-is-the-difference-between-ports-465-and-587 # noqa: E501
# ... requires SMTP AUTH (authentication);
# https://en.wikipedia.org/wiki/SMTP_Authentication
# ... uses STARTTLS if one chooses to negotiate TLS
IMAPS = 993 # formal name; IMAP over TLS
IMAP_ENCRYPTED = IMAPS
POP3S = 995 # formal name; POP3 over TLS
POP3_ENCRYPTED = POP3S
# -------------------------------------------------------------------------
# Registered ports are in the range 1024 to 49151.
# -------------------------------------------------------------------------
MS_SQL_S = 1433 # formal name; a database
MICROSOFT_SQL_SERVER = MS_SQL_S # a database
HL7 = 2575 # formal name; HL7 messaging
HL7_MLLP = HL7 # HL7 MLLP = Minimum Lower Layer Protocol
MYSQL = 3306 # a database
WHISKER = 3233 # a behavioural research control system
POSTGRESQL = 5432 # a database
AMQP = 5672 # Advanced Message Queuing Protocol
# -------------------------------------------------------------------------
# Dynamic ports are in the range 49152 to 65535.
# -------------------------------------------------------------------------
# -------------------------------------------------------------------------
# Some non-standard ports:
# -------------------------------------------------------------------------
FLOWER_NONSTANDARD = 5555
# ... default internal port for Flower, https://flower.readthedocs.io/
ALTERNATIVE_HTTP_NONSTANDARD = 8000
RABBITMQ_ADMIN_NONSTANDARD = 15672
# ... default internal port for RabbitMQ admin interface;
# https://www.rabbitmq.com/
[docs]class UriSchemes:
"""
Common URI schemes.
See https://en.wikipedia.org/wiki/List_of_URI_schemes.
"""
FTP = "ftp"
HTTP = "http"
HTTPS = "https"
IMAP = "imap"
MAILTO = "mailto"
SFTP = "sftp"
SMS = "sms"
SSH = "ssh"
TEL = "tel" # telephone
TELNET = "telnet"