You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SOCKS代理实现WHOIS协议请求?

如何通过SOCKS代理实现WHOIS协议请求?

看起来你踩了个常见的坑——很多WHOIS库(包括你用的这个whois包)的proxy参数其实是为HTTP代理设计的,并不直接支持SocksProxyAgent这种Agent实例,这就是为啥你试了各种库都没效果的原因。

别着急,咱们换个思路:WHOIS本质是基于TCP端口43的简单文本协议,咱们可以直接通过SOCKS代理建立TCP连接,手动发送查询请求。下面给你两种可行的方案:

方案一:用socks库直接建立SOCKS代理连接

首先安装专门处理SOCKS代理TCP连接的socks包:

npm install socks

然后用下面的代码实现WHOIS查询:

const { SocksClient } = require('socks');
const { createInterface } = require('readline');

const domain = 'google.com';
const proxyConfig = {
    proxy: {
        host: '你的代理IP',
        port: 你的代理端口,
        type: 5, // 指定为SOCKS5类型
        // 如果代理需要账号密码认证,取消下面两行注释
        // userId: '你的代理用户名',
        // password: '你的代理密码'
    },
    command: 'connect',
    destination: {
        host: 'whois.iana.org', // 通用WHOIS服务器,也可换成对应域名的专属服务器(比如com域用whois.verisign-grs.com)
        port: 43
    }
};

// 建立SOCKS代理连接
SocksClient.createConnection(proxyConfig, (err, info) => {
    if (err) {
        console.error('代理连接失败:', err.message);
        return;
    }

    // 连接成功后,发送WHOIS查询命令
    info.socket.write(domain + '\r\n');

    // 读取服务器返回的数据
    const rl = createInterface({
        input: info.socket,
        crlfDelay: Infinity
    });

    let whoisData = '';
    rl.on('line', (line) => {
        whoisData += line + '\n';
    });

    rl.on('close', () => {
        console.log('WHOIS查询结果:\n', whoisData);
        info.socket.destroy();
    });

    info.socket.on('error', (socketErr) => {
        console.error('Socket错误:', socketErr.message);
    });
});

方案二:给whois库替换自定义Socket

如果你不想换库,也可以尝试重写whois库的连接逻辑,让它用SOCKS代理的Socket(注意:仅部分版本的whois库支持这个自定义选项):

const whois = require('whois');
const { SocksProxyAgent } = require('socks-proxy-agent');

const domain = 'google.com';
const proxyAgent = new SocksProxyAgent(`socks5://你的代理地址:端口`);

// 通过自定义socket函数,让whois库使用SOCKS代理连接
whois.lookup(domain, {
    socket: (options) => {
        return proxyAgent.createSocket(options, (err) => {
            if (err) console.error('Socket创建失败:', err);
        });
    }
}, (err, data) => {
    if (err) {
        console.error(err.message);
    } else {
        console.log('WHOIS Data:', data);
    }
});

最后提醒下:有些WHOIS服务器会限制频繁查询,或者需要对应域名后缀的专属服务器,你可以根据查询的域名调整目标WHOIS服务器地址。

备注:内容来源于stack exchange,提问作者tommy gabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:23:04