test-advanced-proxy.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. const axios = require('axios');
  2. const { HttpsProxyAgent } = require('https-proxy-agent');
  3. const { SocksProxyAgent } = require('socks-proxy-agent');
  4. // 测试配置
  5. const testConfig = {
  6. // 替换为你的实际代理配置
  7. ss: {
  8. name: 'SS-Node-1',
  9. type: 'ss',
  10. server: '1.2.3.4',
  11. port: 8388,
  12. password: 'your_password',
  13. cipher: 'aes-256-gcm'
  14. },
  15. vmess: {
  16. name: 'VMess-Node-1',
  17. type: 'vmess',
  18. server: '9.10.11.12',
  19. port: 443,
  20. uuid: 'your-uuid-here'
  21. },
  22. trojan: {
  23. name: 'Trojan-Node-1',
  24. type: 'trojan',
  25. server: '17.18.19.20',
  26. port: 443,
  27. password: 'your_password'
  28. }
  29. };
  30. /**
  31. * 创建代理Agent
  32. */
  33. function createProxyAgent(node) {
  34. try {
  35. console.log(`创建代理Agent: ${node.name} - ${node.type}`);
  36. switch (node.type) {
  37. case 'ss':
  38. case 'ssr':
  39. case 'vmess':
  40. case 'trojan':
  41. // 尝试使用HTTP代理模式
  42. console.log(`尝试HTTP代理模式: ${node.type} - ${node.name}`);
  43. // 构建代理URL
  44. let proxyUrl = `http://${node.server}:${node.port}`;
  45. // 如果有认证信息,添加到URL中
  46. if (node.username && node.password) {
  47. proxyUrl = `http://${node.username}:${node.password}@${node.server}:${node.port}`;
  48. }
  49. const agent = new HttpsProxyAgent(proxyUrl);
  50. console.log(`高级代理创建成功: ${node.name} - ${proxyUrl}`);
  51. return agent;
  52. default:
  53. console.log(`不支持的代理类型: ${node.type} - ${node.name}`);
  54. return null;
  55. }
  56. } catch (error) {
  57. console.error(`创建代理Agent失败: ${node.name}`, { error: error.message, type: node.type });
  58. return null;
  59. }
  60. }
  61. /**
  62. * 测试代理连接
  63. */
  64. async function testProxy(node) {
  65. console.log(`\n=== 测试代理: ${node.name} ===`);
  66. try {
  67. const agent = createProxyAgent(node);
  68. if (!agent) {
  69. console.log(`❌ 无法创建代理Agent: ${node.name}`);
  70. return false;
  71. }
  72. console.log(`🔗 开始测试连接...`);
  73. const startTime = Date.now();
  74. const response = await axios({
  75. method: 'GET',
  76. url: 'https://httpbin.org/ip',
  77. httpsAgent: agent,
  78. httpAgent: agent,
  79. timeout: 10000,
  80. headers: {
  81. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  82. }
  83. });
  84. const latency = Date.now() - startTime;
  85. console.log(`✅ 连接成功!`);
  86. console.log(`📊 延迟: ${latency}ms`);
  87. console.log(`🌐 IP地址: ${response.data.origin}`);
  88. console.log(`📄 响应状态: ${response.status}`);
  89. return true;
  90. } catch (error) {
  91. console.log(`❌ 连接失败: ${error.message}`);
  92. if (error.code === 'ECONNREFUSED') {
  93. console.log(`💡 提示: 连接被拒绝,可能是代理服务器未运行或端口错误`);
  94. } else if (error.code === 'ETIMEDOUT') {
  95. console.log(`💡 提示: 连接超时,可能是网络问题或代理配置错误`);
  96. } else if (error.code === 'ENOTFOUND') {
  97. console.log(`💡 提示: 无法解析主机名,请检查服务器地址`);
  98. }
  99. return false;
  100. }
  101. }
  102. /**
  103. * 主测试函数
  104. */
  105. async function main() {
  106. console.log('🚀 开始测试高级代理类型...\n');
  107. // 测试直接连接
  108. console.log('=== 测试直接连接 ===');
  109. try {
  110. const directResponse = await axios.get('https://httpbin.org/ip', { timeout: 5000 });
  111. console.log(`✅ 直接连接正常 - IP: ${directResponse.data.origin}`);
  112. } catch (error) {
  113. console.log(`❌ 直接连接失败: ${error.message}`);
  114. }
  115. // 测试各种代理类型
  116. const testNodes = [
  117. testConfig.ss,
  118. testConfig.vmess,
  119. testConfig.trojan
  120. ];
  121. for (const node of testNodes) {
  122. await testProxy(node);
  123. }
  124. console.log('\n🎯 测试完成!');
  125. console.log('\n💡 提示:');
  126. console.log('1. 如果所有代理都失败,请检查代理服务器是否正常运行');
  127. console.log('2. 确保代理配置信息正确(服务器地址、端口、密码等)');
  128. console.log('3. 某些代理类型可能需要特殊的客户端库支持');
  129. console.log('4. 可以尝试使用Clash等代理客户端来验证代理是否可用');
  130. }
  131. // 运行测试
  132. main().catch(console.error);