Skip to content

Commit 2bd9b68

Browse files
committed
Add proxy server logic
1 parent d8a37f6 commit 2bd9b68

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

myfirst.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
const net = require("net");
2+
const server = net.createServer(); //creates an instance of a server
3+
4+
server.on("connection", (clientToProxySocket) => { //once the connection is established, display message
5+
console.log("Client connected to proxy");
6+
clientToProxySocket.once("data", (data) => { //once the client sends data, start the execution of the proxy servers
7+
let isConnectionTLS = data.toString().indexOf("CONNECT") !== -1; //check whether its a connect release
8+
9+
let serverPort = 80;
10+
let serverAddress;
11+
12+
if (isConnectionTLS) {
13+
serverPort = 443; //default port for https
14+
15+
serverAddress = data
16+
.toString().split("CONNECT")[1]
17+
.split(" ")[1]
18+
.split(":")[0];
19+
} else {
20+
serverAddress = data.toString().split("Host: ")[1].split("\n")[0];
21+
}
22+
23+
let proxyToServerSocket = net.createConnection(
24+
{
25+
host: serverAddress,
26+
port: serverPort
27+
},
28+
() => {
29+
console.log("Proxy to server is setup");
30+
}
31+
)
32+
33+
if (isConnectionTLS) {
34+
clientToProxySocket.write("HTTP/1.1 200 OK\r\n\n"); //send response to client that connection is successful
35+
} else {
36+
proxyToServerSocket.write(data); //write data from client request to server
37+
}
38+
39+
clientToProxySocket.pipe(proxyToServerSocket); //send data from client to server
40+
proxyToServerSocket.pipe(clientToProxySocket);// send data from server to client
41+
42+
proxyToServerSocket.on("error", (err) => { //check whether that is and error
43+
console.log("Proxy to server error");
44+
console.log(err);
45+
})
46+
47+
clientToProxySocket.on("error", (err) => {
48+
console.log("Client to proxy error");
49+
})
50+
})
51+
})
52+
53+
server.on("error", (err) => {
54+
console.log("Internal server error");
55+
console.log(err);
56+
})
57+
58+
server.on("close", () => {
59+
console.log("Client disconnected");
60+
})
61+
62+
server.listen(
63+
{
64+
host: "0.0.0.0",
65+
port: 3456, //sets the server to listen for connections on the port 3456
66+
},
67+
() => {
68+
console.log("Server listening on 0.0.0.0:3456");
69+
}
70+
);

package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "nodejs-forward-proxy-demo",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "myfirst.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1",
8+
"start": "node myfirst.js"
9+
},
10+
"keywords": [],
11+
"author": "",
12+
"license": "ISC"
13+
}

0 commit comments

Comments
 (0)