SNI detector,一个用于验证 SNI 服务器域名的 Nodejs 命令行工具
SNI detector,一个用于验证 SNI 服务器域名的 Nodejs 命令行工具
当我们需要验证一个服务器上的 SNI 域名是否正常的时候,通常需要在浏览器或 openssl 来获取到证书,然后检查证书里相应的字段是否包含域名,但这种方式极为不便。
为了简化验证的过程,我使用 Nodejs 开发了一个小工具 sni-detector 用于验证指定服务 器上的 SNI 是否包含指定的测试域名。
使用方式非常简单,先使用 NPM 来安装:
npm install -g sni-detecotr
在安装成功后,就可以使用 sni-detect
命令来验证了。
使用 sni-detect --help
可以查看相应的参数说明,在此,我以测试域名 www.baidu.com
和
img.baidu.com
来验证 IP 为 14.215.177.52
的服务器为例:
sni-detect -t www.baidu.com,img.baidu.com 14.215.177.53
如果返回 14.215.177.52 OK
表明验证通过,如果返回 14.215.177.52 Failue
表明验证失败。
这里如果需要查看失败的详细信息,可以加上 --verbose
参数:
sni-detect -t www.baidu.com,img.baidu.com --verbose 14.215.177.53
PS :本工具仅支持 Node.js v6+
本工具也同时开源在 Github 上,欢迎提 issue 和 PR 。
不错 想试试 感谢
针对您提到的SNI detector——一个用于验证SNI服务器域名的Nodejs命令行工具,我可以提供一个基于Node.js的SNI检测工具开发思路及部分代码示例。
首先,SNI(Server Name Indication)是TLS协议的一个扩展,允许客户端在建立加密连接时指定要访问的服务器名称。开发一个Node.js命令行工具来验证SNI服务器域名,可以借助Node.js的tls
模块和net
模块。
以下是一个简单的代码示例,展示了如何使用tls
模块连接到服务器并获取其SNI信息:
const tls = require('tls');
const net = require('net');
const options = {
servername: 'target.com', // 目标服务器域名
// 其他TLS选项...
};
const socket = tls.connect(443, options, () => {
console.log('Connected to server!');
// 在此处可以进一步处理服务器响应
socket.end();
});
socket.on('secureConnect', () => {
console.log('Secure connection established!');
// 获取服务器证书并打印SNI信息
const serverCert = socket.getPeerCertificate();
console.log('SNI Hostname:', serverCert.subject.CN);
});
socket.on('error', (err) => {
console.error('Error:', err);
});
请注意,上述代码仅展示了如何建立TLS连接并获取服务器证书的基本框架。要开发一个完整的SNI检测工具,您还需要添加域名验证逻辑、错误处理、命令行参数解析等功能。同时,考虑到安全性和效率,您可能还需要使用异步编程和并发处理技术。