You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.8 KiB
JavaScript
76 lines
1.8 KiB
JavaScript
const net = require('net');
|
|
const tls = require('tls');
|
|
const fs = require('fs');
|
|
|
|
const listenPort = 80;
|
|
|
|
const targetHost = 'localhost';
|
|
const targetPort = 443;
|
|
|
|
const logFile = fs.createWriteStream('proxy.log', { flags: 'a' });
|
|
|
|
// log with timestamp
|
|
function log(message) {
|
|
let date = new Date();
|
|
let time = date.toLocaleString();
|
|
|
|
const line = `[${time}] ${message}\n`
|
|
|
|
logFile.write(line);
|
|
console.log(line);
|
|
}
|
|
|
|
const server = net.createServer((client) => {
|
|
// Log the client connection
|
|
let clientAddress = client.remoteAddress + ':' + client.remotePort;
|
|
log(`Client connected from ${clientAddress}`);
|
|
|
|
// Create a socket to connect to the target host
|
|
const options = {
|
|
host: targetHost,
|
|
port: targetPort,
|
|
rejectUnauthorized: false
|
|
};
|
|
const target = tls.connect(options, () => {
|
|
// Log the target connection
|
|
log(`Target connected to ${targetHost}:${targetPort}`);
|
|
|
|
// Pipe the data between the client and the target
|
|
client.pipe(target).pipe(client);
|
|
|
|
// Log the data sent and received
|
|
client.on('data', (data) => {
|
|
log(`Client sent: ${data.toString('utf8')}`);
|
|
});
|
|
target.on('data', (data) => {
|
|
log(`Target sent: ${data.toString('utf8')}`);
|
|
});
|
|
});
|
|
|
|
// Handle the errors and close events
|
|
client.on('error', (err) => {
|
|
log(`Client error: ${err.message}`);
|
|
client.destroy();
|
|
target.destroy();
|
|
});
|
|
target.on('error', (err) => {
|
|
log(`Target error: ${err.message}`);
|
|
client.destroy();
|
|
target.destroy();
|
|
});
|
|
client.on('close', () => {
|
|
log(`Client disconnected from ${clientAddress}`);
|
|
target.destroy();
|
|
});
|
|
target.on('close', () => {
|
|
log(`Target disconnected from ${targetHost}:${targetPort}`);
|
|
client.destroy();
|
|
});
|
|
});
|
|
|
|
|
|
log(`Start listening..`);
|
|
server.listen(listenPort, () => {
|
|
log(`Server listening on port ${listenPort}`);
|
|
});
|