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+ ) ;
0 commit comments