test-connectivity.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. const SpeedTester = require('./src/core/speedTester');
  2. const logger = require('./src/utils/logger');
  3. // 测试节点配置 - 使用Clash混合端口7897
  4. const testNodes = [
  5. // 测试直连(不使用代理)
  6. {
  7. id: 1,
  8. name: '直连测试',
  9. type: 'direct',
  10. server: '',
  11. port: 0,
  12. username: '',
  13. password: ''
  14. },
  15. // Clash混合端口HTTP代理
  16. {
  17. id: 2,
  18. name: '测试HTTP代理',
  19. type: 'http',
  20. server: '127.0.0.1',
  21. port: 7897,
  22. username: '',
  23. password: ''
  24. },
  25. // Clash混合端口SOCKS5代理
  26. {
  27. id: 3,
  28. name: '测试SOCKS5代理',
  29. type: 'socks5',
  30. server: '127.0.0.1',
  31. port: 7897,
  32. username: '',
  33. password: ''
  34. }
  35. ];
  36. // 添加一个简单的直连测试函数
  37. async function testDirectConnection() {
  38. console.log('🌐 测试直连连通性...');
  39. const axios = require('axios');
  40. const testUrls = [
  41. 'https://www.google.com',
  42. 'https://httpbin.org/get',
  43. 'https://www.github.com'
  44. ];
  45. for (const url of testUrls) {
  46. try {
  47. console.log(`尝试连接: ${url}`);
  48. const startTime = Date.now();
  49. const response = await axios.get(url, {
  50. timeout: 10000,
  51. headers: {
  52. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  53. }
  54. });
  55. const latency = Date.now() - startTime;
  56. console.log(`✅ 直连成功: ${url} (${latency}ms)`);
  57. console.log(`状态码: ${response.status}`);
  58. console.log(`IP: ${response.headers['x-forwarded-for'] || 'unknown'}`);
  59. return true;
  60. } catch (error) {
  61. console.log(`❌ 直连失败: ${url} - ${error.message}`);
  62. }
  63. }
  64. console.log('❌ 所有直连测试都失败了,请检查网络连接');
  65. return false;
  66. }
  67. async function testConnectivity() {
  68. console.log('🚀 开始连通性测试...\n');
  69. // 首先测试直连
  70. const directSuccess = await testDirectConnection();
  71. console.log('');
  72. if (!directSuccess) {
  73. console.log('⚠️ 直连测试失败,代理测试可能也会失败');
  74. console.log('请检查网络连接或防火墙设置\n');
  75. }
  76. const speedTester = new SpeedTester();
  77. try {
  78. // 测试单个节点
  79. console.log('📡 测试代理节点...');
  80. const singleResult = await speedTester.testNode(testNodes[1]); // 测试HTTP代理
  81. console.log('单个节点测试结果:', JSON.stringify(singleResult, null, 2));
  82. console.log('');
  83. // 批量测试节点
  84. console.log('📡 批量测试节点...');
  85. const batchResults = await speedTester.testNodes(testNodes.slice(1)); // 跳过直连测试
  86. console.log('\n📊 测试结果汇总:');
  87. console.log('='.repeat(50));
  88. batchResults.forEach((result, index) => {
  89. const node = testNodes[index + 1]; // +1 因为跳过了直连测试
  90. const status = result.isSuccess ? '✅ 连通' : '❌ 不通';
  91. const latency = result.latency ? `${result.latency}ms` : 'N/A';
  92. const ip = result.ipAddress || 'N/A';
  93. console.log(`${status} ${node.name} (${node.type})`);
  94. console.log(` 延迟: ${latency}`);
  95. console.log(` IP: ${ip}`);
  96. console.log(` 测试URL: ${result.testUrl || 'N/A'}`);
  97. if (result.errorMessage) {
  98. console.log(` 错误: ${result.errorMessage}`);
  99. }
  100. console.log('');
  101. });
  102. const successCount = batchResults.filter(r => r.isSuccess).length;
  103. console.log(`总计: ${successCount}/${batchResults.length} 个节点连通`);
  104. // 提供故障排除建议
  105. if (successCount === 0) {
  106. console.log('\n🔧 故障排除建议:');
  107. console.log('1. 检查代理服务是否正在运行');
  108. console.log('2. 确认代理端口是否正确');
  109. console.log('3. 检查防火墙设置');
  110. console.log('4. 尝试使用其他代理服务器');
  111. console.log('5. 检查代理配置是否正确');
  112. }
  113. } catch (error) {
  114. console.error('❌ 测试过程中发生错误:', error.message);
  115. }
  116. }
  117. // 添加一个简单的代理检测函数
  118. async function detectLocalProxies() {
  119. console.log('🔍 检测本地代理服务...');
  120. const net = require('net');
  121. const commonPorts = [7897, 7891, 8118, 3128, 8388, 10808];
  122. for (const port of commonPorts) {
  123. try {
  124. const socket = new net.Socket();
  125. const result = await new Promise((resolve) => {
  126. socket.setTimeout(2000);
  127. socket.on('connect', () => {
  128. socket.destroy();
  129. resolve(true);
  130. });
  131. socket.on('timeout', () => {
  132. socket.destroy();
  133. resolve(false);
  134. });
  135. socket.on('error', () => {
  136. socket.destroy();
  137. resolve(false);
  138. });
  139. socket.connect(port, '127.0.0.1');
  140. });
  141. if (result) {
  142. console.log(`✅ 发现本地代理服务: 127.0.0.1:${port}`);
  143. }
  144. } catch (error) {
  145. // 忽略错误
  146. }
  147. }
  148. console.log('检测完成\n');
  149. }
  150. // 如果直接运行此脚本
  151. if (require.main === module) {
  152. // 先检测本地代理
  153. detectLocalProxies().then(() => {
  154. return testConnectivity();
  155. }).catch(console.error);
  156. }
  157. module.exports = { testConnectivity, testDirectConnection, detectLocalProxies };