Files
seabox_fanyi_application/test-proxy.js
2025-09-18 15:14:14 +08:00

186 lines
5.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const net = require('net');
const http = require('http');
// 代理配置
const proxyConfig = {
host: 'sg.arxlabs.io',
port: 3010,
username: 'hqb367407-region-HK-sid-FrUmXj5L-t-120',
password: 'd37chqrl'
};
console.log('开始测试代理服务器连通性...');
console.log(`代理服务器: ${proxyConfig.host}:${proxyConfig.port}`);
console.log(`用户名: ${proxyConfig.username}`);
console.log('密码: ***');
// 测试1: TCP连接测试
function testTcpConnection() {
return new Promise((resolve, reject) => {
console.log('\n=== 测试1: TCP连接测试 ===');
const socket = net.createConnection({
host: proxyConfig.host,
port: proxyConfig.port,
timeout: 10000
});
socket.on('connect', () => {
console.log('✅ TCP连接成功');
socket.destroy();
resolve(true);
});
socket.on('error', (err) => {
console.log('❌ TCP连接失败:', err.message);
socket.destroy();
reject(err);
});
socket.on('timeout', () => {
console.log('❌ TCP连接超时');
socket.destroy();
reject(new Error('TCP connection timeout'));
});
});
}
// 测试2: HTTP代理测试
function testHttpProxy() {
return new Promise((resolve, reject) => {
console.log('\n=== 测试2: HTTP代理测试 ===');
const options = {
hostname: proxyConfig.host,
port: proxyConfig.port,
path: 'http://httpbin.org/ip',
method: 'GET',
headers: {
'Proxy-Authorization': 'Basic ' + Buffer.from(`${proxyConfig.username}:${proxyConfig.password}`).toString('base64'),
'Host': 'httpbin.org'
},
timeout: 10000
};
const req = http.request(options, (res) => {
console.log(`✅ HTTP代理响应状态: ${res.statusCode}`);
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log('✅ HTTP代理响应数据:', data);
resolve(data);
});
});
req.on('error', (err) => {
console.log('❌ HTTP代理请求失败:', err.message);
reject(err);
});
req.on('timeout', () => {
console.log('❌ HTTP代理请求超时');
req.destroy();
reject(new Error('HTTP proxy timeout'));
});
req.end();
});
}
// 测试3: SOCKS5代理测试
function testSocks5Proxy() {
return new Promise((resolve, reject) => {
console.log('\n=== 测试3: SOCKS5代理测试 ===');
// 简单的SOCKS5握手测试
const socket = net.createConnection({
host: proxyConfig.host,
port: proxyConfig.port,
timeout: 10000
});
socket.on('connect', () => {
console.log('TCP连接建立尝试SOCKS5握手...');
// SOCKS5握手版本51种认证方法用户名密码认证
const handshake = Buffer.from([0x05, 0x01, 0x02]);
socket.write(handshake);
});
socket.on('data', (data) => {
if (data.length >= 2) {
if (data[0] === 0x05 && data[1] === 0x02) {
console.log('✅ SOCKS5服务器支持用户名密码认证');
socket.destroy();
resolve(true);
} else if (data[0] === 0x05 && data[1] === 0x00) {
console.log('✅ SOCKS5服务器不需要认证');
socket.destroy();
resolve(true);
} else if (data[0] === 0x05 && data[1] === 0xFF) {
console.log('❌ SOCKS5服务器不支持任何认证方法');
socket.destroy();
reject(new Error('SOCKS5 no acceptable methods'));
} else {
console.log('❌ SOCKS5握手失败响应:', data.toString('hex'));
socket.destroy();
reject(new Error('SOCKS5 handshake failed'));
}
}
});
socket.on('error', (err) => {
console.log('❌ SOCKS5代理测试失败:', err.message);
socket.destroy();
reject(err);
});
socket.on('timeout', () => {
console.log('❌ SOCKS5代理测试超时');
socket.destroy();
reject(new Error('SOCKS5 proxy timeout'));
});
});
}
// 运行所有测试
async function runAllTests() {
try {
// 测试TCP连接
await testTcpConnection();
// 测试HTTP代理
try {
await testHttpProxy();
} catch (err) {
console.log('HTTP代理测试失败可能不是HTTP代理或认证失败');
}
// 测试SOCKS5代理
try {
await testSocks5Proxy();
} catch (err) {
console.log('SOCKS5代理测试失败该代理服务器不支持SOCKS5协议');
}
} catch (err) {
console.log('\n=== 总结 ===');
console.log('❌ 代理服务器连接失败');
console.log('可能的原因:');
console.log('1. 代理服务器已下线');
console.log('2. IP地址或端口错误');
console.log('3. 网络防火墙阻止连接');
console.log('4. 代理服务器配置问题');
process.exit(1);
}
console.log('\n=== 总结 ===');
console.log('✅ 代理服务器基本连接正常');
}
runAllTests();