123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- const axios = require('axios');
- const { HttpsProxyAgent } = require('https-proxy-agent');
- const { SocksProxyAgent } = require('socks-proxy-agent');
- // 测试配置
- const testConfig = {
- // 替换为你的实际代理配置
- ss: {
- name: 'SS-Node-1',
- type: 'ss',
- server: '1.2.3.4',
- port: 8388,
- password: 'your_password',
- cipher: 'aes-256-gcm'
- },
- vmess: {
- name: 'VMess-Node-1',
- type: 'vmess',
- server: '9.10.11.12',
- port: 443,
- uuid: 'your-uuid-here'
- },
- trojan: {
- name: 'Trojan-Node-1',
- type: 'trojan',
- server: '17.18.19.20',
- port: 443,
- password: 'your_password'
- }
- };
- /**
- * 创建代理Agent
- */
- function createProxyAgent(node) {
- try {
- console.log(`创建代理Agent: ${node.name} - ${node.type}`);
-
- switch (node.type) {
- case 'ss':
- case 'ssr':
- case 'vmess':
- case 'trojan':
- // 尝试使用HTTP代理模式
- console.log(`尝试HTTP代理模式: ${node.type} - ${node.name}`);
-
- // 构建代理URL
- let proxyUrl = `http://${node.server}:${node.port}`;
-
- // 如果有认证信息,添加到URL中
- if (node.username && node.password) {
- proxyUrl = `http://${node.username}:${node.password}@${node.server}:${node.port}`;
- }
-
- const agent = new HttpsProxyAgent(proxyUrl);
- console.log(`高级代理创建成功: ${node.name} - ${proxyUrl}`);
- return agent;
-
- default:
- console.log(`不支持的代理类型: ${node.type} - ${node.name}`);
- return null;
- }
-
- } catch (error) {
- console.error(`创建代理Agent失败: ${node.name}`, { error: error.message, type: node.type });
- return null;
- }
- }
- /**
- * 测试代理连接
- */
- async function testProxy(node) {
- console.log(`\n=== 测试代理: ${node.name} ===`);
-
- try {
- const agent = createProxyAgent(node);
-
- if (!agent) {
- console.log(`❌ 无法创建代理Agent: ${node.name}`);
- return false;
- }
-
- console.log(`🔗 开始测试连接...`);
-
- const startTime = Date.now();
- const response = await axios({
- method: 'GET',
- url: 'https://httpbin.org/ip',
- httpsAgent: agent,
- httpAgent: agent,
- timeout: 10000,
- headers: {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
- }
- });
-
- const latency = Date.now() - startTime;
-
- console.log(`✅ 连接成功!`);
- console.log(`📊 延迟: ${latency}ms`);
- console.log(`🌐 IP地址: ${response.data.origin}`);
- console.log(`📄 响应状态: ${response.status}`);
-
- return true;
-
- } catch (error) {
- console.log(`❌ 连接失败: ${error.message}`);
-
- if (error.code === 'ECONNREFUSED') {
- console.log(`💡 提示: 连接被拒绝,可能是代理服务器未运行或端口错误`);
- } else if (error.code === 'ETIMEDOUT') {
- console.log(`💡 提示: 连接超时,可能是网络问题或代理配置错误`);
- } else if (error.code === 'ENOTFOUND') {
- console.log(`💡 提示: 无法解析主机名,请检查服务器地址`);
- }
-
- return false;
- }
- }
- /**
- * 主测试函数
- */
- async function main() {
- console.log('🚀 开始测试高级代理类型...\n');
-
- // 测试直接连接
- console.log('=== 测试直接连接 ===');
- try {
- const directResponse = await axios.get('https://httpbin.org/ip', { timeout: 5000 });
- console.log(`✅ 直接连接正常 - IP: ${directResponse.data.origin}`);
- } catch (error) {
- console.log(`❌ 直接连接失败: ${error.message}`);
- }
-
- // 测试各种代理类型
- const testNodes = [
- testConfig.ss,
- testConfig.vmess,
- testConfig.trojan
- ];
-
- for (const node of testNodes) {
- await testProxy(node);
- }
-
- console.log('\n🎯 测试完成!');
- console.log('\n💡 提示:');
- console.log('1. 如果所有代理都失败,请检查代理服务器是否正常运行');
- console.log('2. 确保代理配置信息正确(服务器地址、端口、密码等)');
- console.log('3. 某些代理类型可能需要特殊的客户端库支持');
- console.log('4. 可以尝试使用Clash等代理客户端来验证代理是否可用');
- }
- // 运行测试
- main().catch(console.error);
|