NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
ports结构体 参考

网络端口封装类 更多...

#include <ports.hpp>

类 ports 继承关系图:
[图例]

Public 类型

enum  raw : uint16_t {
  UNDEF = 0 , FTP_DATA = 20 , FTP = 21 , SSH = 22 ,
  TELNET = 23 , SMTP = 25 , DNS = 53 , DHCP_SERVER = 67 ,
  DHCP_CLIENT = 68 , TFTP = 69 , HTTP = 80 , WS = 80 ,
  POP3 = 110 , NTP = 123 , IMAP = 143 , SNMP = 161 ,
  SNMP_TRAP = 162 , LDAP = 389 , HTTPS = 443 , WSS = 443 ,
  SMB = 445 , SMTPS = 465 , SMTP_SUBMIT = 587 , LDAPS = 636 ,
  IMAPS = 993 , POP3S = 995 , MYSQL = 3306 , POSTGRESQL = 5432 ,
  REDIS = 6379 , MONGODB = 27017
}
 端口号枚举值 更多...

Public 成员函数

constexpr ports () noexcept=default
 默认构造函数
constexpr ports (const raw port) noexcept
 从枚举值构造
constexpr ports (const uint16_t port) noexcept
 从uint16_t构造
constexpr operator bool () const noexcept
 布尔转换运算符
constexpr operator uint16_t () const noexcept
 uint16_t转换运算符
constexpr bool is_well_known () const noexcept
 检查端口是否在知名端口范围内
constexpr bool is_registered () const noexcept
 检查端口是否在注册端口范围内
constexpr bool is_dynamic () const noexcept
 检查端口是否在动态/私有端口范围内
string to_string () const
 转换为协议名称字符串
string to_string (bool is_ws) const
 转换为协议名称字符串(支持WebSocket)
Public 成员函数 继承自 iobject< ports >
NEFORCE_CONSTEXPR20 bool try_parse (const string_view str) noexcept
 尝试从字符串解析对象
Public 成员函数 继承自 istringify< ports >
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 string to_string () const
 转换为字符串

静态 Public 成员函数

static ports parse (string_view scheme) noexcept
 从协议名称解析端口
静态 Public 成员函数 继承自 iobject< ports >
static NEFORCE_NODISCARD constexpr ports parse (const string_view str)
 从字符串解析对象

Public 属性

raw port {UNDEF}
 端口值

详细描述

网络端口封装类

提供类型安全的端口表示,封装了常见协议的端口号,支持从协议名称解析和反向转换。

遵循的国际标准

本实现严格遵循以下网络服务与端口分配相关标准规范:

端口号分配权威机构:

核心互联网协议标准:

各协议端口规范:

协议 端口号 标准引用 说明
HTTP 80 RFC 7230 §2.7.1(HTTP/1.1 消息语法与路由) 万维网协议
HTTPS 443 RFC 2818 §2.4(HTTP Over TLS) HTTP over TLS/SSL
FTP 21 RFC 959 §3.2(文件传输协议) 文件传输协议(控制端口)
FTP-DATA 20 RFC 959 §3.2(文件传输协议) 文件传输协议(数据端口)
SSH 22 RFC 4251 §4.1(安全 Shell 协议架构) 安全 Shell 协议
Telnet 23 RFC 854(Telnet 协议规范) 远程登录协议
SMTP 25 RFC 5321 §4.5.3.2(简单邮件传输协议) 电子邮件传输
DNS 53 RFC 1035 §4.2(域名实现与规范) 域名系统
TFTP 69 RFC 1350 §5(简单文件传输协议) 简单文件传输协议
POP3 110 RFC 1939 §4(邮局协议版本3) 电子邮件接收协议
IMAP 143 RFC 3501 §2.1(互联网消息访问协议) 电子邮件访问协议
NTP 123 RFC 5905 §4(网络时间协议版本4) 网络时间同步协议
SNMP 161 RFC 3417 §3(简单网络管理协议) 网络管理协议
SNMP-TRAP 162 RFC 3417 §3(简单网络管理协议) SNMP陷阱通知
LDAP 389 RFC 4511 §3(轻量级目录访问协议) 目录服务协议
LDAPS 636 RFC 4513 §5(LDAP over TLS) LDAP over TLS/SSL
SMB 445 Microsoft SMB 协议规范 服务器消息块协议
DHCP-SERVER 67 RFC 2131 §3(动态主机配置协议) DHCP服务器端口
DHCP-CLIENT 68 RFC 2131 §3(动态主机配置协议) DHCP客户端端口
MYSQL 3306 MySQL 官方文档 MySQL数据库
POSTGRESQL 5432 PostgreSQL 官方文档 PostgreSQL数据库
REDIS 6379 Redis 官方文档 Redis键值存储
MONGODB 27017 MongoDB 官方文档 MongoDB数据库

WebSocket 协议端口规范:

协议 端口号 标准引用 说明
WS 80 RFC 6455 §11.1(WebSocket 协议) WebSocket over HTTP
WSS 443 RFC 6455 §11.1(WebSocket 协议) WebSocket over TLS/SSL

邮件协议扩展端口规范:

协议 端口号 标准引用 说明
SMTP-SUBMIT 587 RFC 6409 §3(邮件提交协议) 邮件提交
SMTPS 465 历史惯例(IANA已重新分配) SMTP over TLS(传统)
POP3S 995 RFC 2595 §5(POP3 over TLS) POP3 over TLS/SSL
IMAPS 993 RFC 2595 §4(IMAP over TLS) IMAP over TLS/SSL

相关安全标准:

IANA 端口号注册表

根据 IANA 服务名称和端口号注册表,端口号分为三类:

范围 类别 说明 分配要求
0-1023 知名端口 系统端口,由 IANA 分配和管控 需要 IETF 共识或 IESG 批准
1024-49151 注册端口 用户端口,由 IANA 注册 需要 IETF 审核或专家审核
49152-65535 动态/私有端口 临时使用,自动分配 无需分配

本文件中定义的所有端口包含知名端口(0-1023)和部分常用注册端口(1024-49151)。

实现细节

特性 规范参数
端口数值类型 uint16_t(0-65535)
知名端口范围 0-1023
注册端口范围 1024-49151
默认端口值 UNDEF(0)
大小 2 字节(uint16_t)
协议名称解析 大小写不敏感
未知协议处理 返回 UNDEF
注解
本实现中定义的端口号均取自 IANA 注册表及相关 RFC 标准文档。
警告
端口号 80 和 443 同时服务于 HTTP/HTTPS 和 WebSocket(WS/WSS)协议。 使用 to_string(bool is_ws) 方法可明确区分协议类型。 端口号 465(smtps)虽然在实践中广泛使用,但 IANA 已将其重新分配给其他服务, 建议新应用使用端口 587(smtp-submit)配合 STARTTLS。
参见
https://www.iana.org/assignments/service-names-port-numbers/
https://www.rfc-editor.org/rfc/rfc6335
https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

在文件 ports.hpp130 行定义.

成员枚举类型说明

◆ raw

端口号枚举值

枚举值
UNDEF 

未定义/无效端口

FTP_DATA 

FTP数据端口

FTP 

FTP控制端口

SSH 

SSH协议端口

TELNET 

Telnet协议端口

SMTP 

SMTP协议端口

DNS 

DNS协议端口

DHCP_SERVER 

DHCP服务器端口

DHCP_CLIENT 

DHCP客户端端口

TFTP 

TFTP协议端口

HTTP 

HTTP协议端口

WS 

WebSocket协议端口(与HTTP共用)

POP3 

POP3协议端口

NTP 

NTP协议端口

IMAP 

IMAP协议端口

SNMP 

SNMP协议端口

SNMP_TRAP 

SNMP陷阱通知端口

LDAP 

LDAP协议端口

HTTPS 

HTTPS协议端口

WSS 

WebSocket Secure端口(与HTTPS共用)

SMB 

SMB/CIFS协议端口

SMTPS 

SMTPS协议端口

SMTP_SUBMIT 

SMTP邮件提交端口

LDAPS 

LDAPS协议端口

IMAPS 

IMAPS协议端口

POP3S 

POP3S协议端口

MYSQL 

MySQL数据库端口

POSTGRESQL 

PostgreSQL数据库端口

REDIS 

Redis数据库端口

MONGODB 

MongoDB数据库端口

在文件 ports.hpp135 行定义.

构造及析构函数说明

◆ ports() [1/3]

ports::ports ( )
constexprdefaultnoexcept

默认构造函数

创建未定义端口的对象。

被这些函数引用 parse() , 以及 ports().

◆ ports() [2/3]

ports::ports ( const raw port)
inlineconstexprnoexcept

从枚举值构造

参数
port端口枚举值

在文件 ports.hpp183 行定义.

引用了 port , 以及 ports().

◆ ports() [3/3]

ports::ports ( const uint16_t port)
inlineexplicitconstexprnoexcept

从uint16_t构造

参数
port端口数值

在文件 ports.hpp190 行定义.

引用了 port.

成员函数说明

◆ is_dynamic()

bool ports::is_dynamic ( ) const
inlineconstexprnoexcept

检查端口是否在动态/私有端口范围内

返回
若端口号在49152-65535范围内返回true

在文件 ports.hpp228 行定义.

引用了 port.

◆ is_registered()

bool ports::is_registered ( ) const
inlineconstexprnoexcept

检查端口是否在注册端口范围内

返回
若端口号在1024-49151范围内返回true

在文件 ports.hpp219 行定义.

引用了 port.

◆ is_well_known()

bool ports::is_well_known ( ) const
inlineconstexprnoexcept

检查端口是否在知名端口范围内

返回
若端口号在0-1023范围内返回true

在文件 ports.hpp213 行定义.

引用了 port.

◆ operator bool()

ports::operator bool ( ) const
inlineexplicitconstexprnoexcept

布尔转换运算符

返回
端口有效返回true

检查端口是否为undef。

在文件 ports.hpp199 行定义.

引用了 port , 以及 UNDEF.

◆ operator uint16_t()

ports::operator uint16_t ( ) const
inlineexplicitconstexprnoexcept

uint16_t转换运算符

返回
端口的数值表示

在文件 ports.hpp205 行定义.

引用了 port.

◆ parse()

ports ports::parse ( string_view scheme)
staticnoexcept

从协议名称解析端口

参数
scheme协议名称(如"http"、"https"、"ws"等)
返回
对应的端口对象,无法识别返回undef

支持常见协议名称到端口号的映射。

引用了 ports().

◆ to_string() [1/2]

string ports::to_string ( ) const

转换为协议名称字符串

返回
协议名称,非标准端口返回空字符串

将端口号转换为对应的协议名称。 对于80端口返回"http",443端口返回"https"。

◆ to_string() [2/2]

string ports::to_string ( bool is_ws) const

转换为协议名称字符串(支持WebSocket)

参数
is_ws是否为WebSocket协议
返回
协议名称

当is_ws为true时,80端口返回"ws",443端口返回"wss"; 否则返回"http"/"https"。


该结构体的文档由以下文件生成: