我想要对 NTP 服务器主机名进行基本的语法验证。(例如,我期望%^$&"
NTP 服务器主机名的语法无效。)
我之所以要进行这个基本验证,是因为我正在构建一个 Web 应用程序来配置服务器。该应用程序向用户显示一个表单,其中一个字段是NTP server hostname
。我想在发送任何服务器配置之前在浏览器中进行快速验证,部分是为了避免 XSS 攻击,部分是为了向用户提供快速反馈。
我找到了一个用于验证 DNS 主机名的正则表达式这里。
NTP 服务器主机名的语法必须遵守哪些 RFC?DNS 主机名正则表达式是否也会验证 NTP 服务器主机名?
答案1
正则表达式可能能够验证主机名是否符合 RFC 之一,但无法验证主机名是否有效、是否存在或者是否解析为运行 NTP 服务器的 IP 地址。
我认为,使用正则表达式无法达到您想要的效果,尽管您实际上并未说明您想要达到的效果。请随意将此添加到您的问题中。
更好的方法是对主机名执行 DNS 查找并验证它是否解析为 IP 地址(IPv6 或 IPv4),并且当您在端口 123 上连接到该 IP 地址时,您会得到有效的 NTP 协议响应。
回答其他问题,NTP 与主机名完全无关。NTP 服务器将监听 IP 地址,但它不知道您是通过使用 DNS 查找主机名还是将 IP 地址原始提供给 NTP 客户端来获取该 IP 地址。
这意味着,从广义上讲,主机名就是主机名。Web 服务器主机名、电子邮件服务器主机名和 NTP 服务器主机名之间没有区别。您在 StackOverflow 答案中找到的正则表达式将起到验证其表面上是否有效的基本作用,但请记住,您的用户可以轻松输入 IP 地址并期望它能正常工作。
如果是我进行此验证,我仍然会进行 DNS 查找,但您应该根据问题所在提供不同的反馈。NTP 连接将是一个很好的补充。