Created
July 13, 2016 23:53
-
-
Save karthick18/4f40002461a75bc9670ab93a09790d5f to your computer and use it in GitHub Desktop.
nanosec tcp proxy server with verification
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"github.com/karthick18/nanoclient/nanoproxy/nanotcpproxy" | |
"github.com/karthick18/nanoclient/nanoproxy/virtualconn" | |
"net" | |
"time" | |
"fmt" | |
"log" | |
) | |
const ( | |
LOCAL_ADDR = "10.15.3.35:23333" | |
REMOTE_ADDR = "10.15.3.91:9999" | |
) | |
func main() { | |
laddr, err := net.ResolveTCPAddr("tcp", LOCAL_ADDR) | |
if err != nil { | |
log.Fatalf("Error %v resolving tcp address %s\n", err, LOCAL_ADDR) | |
} | |
l, err := net.ListenTCP("tcp", laddr) | |
if err != nil { | |
log.Fatalf("Error %v on tcp listen\n", err) | |
} | |
for { | |
tc, err := l.AcceptTCP() | |
if err != nil { | |
log.Fatalf("Error %v on tcp accept\n", err) | |
} | |
tc.SetKeepAlive(true) | |
tc.SetKeepAlivePeriod(3 * time.Minute) | |
//1. Get Orig Addr | |
//2. Detect Protocol | |
//3. Return if HTTP or HTTPS? | |
//fmt.Println("New tcp conn - local addr : ",tc.LocalAddr()) | |
//fmt.Println("New tcp conn - remote addr :",tc.RemoteAddr()) | |
newConnFile, err := tc.File() | |
if err != nil { | |
return | |
} else { | |
tc.Close() | |
} | |
newConn, err := net.FileConn(newConnFile) | |
//newTCPConn, ok := newConn.(*net.TCPConn) | |
//fmt.Println("New file conn - local addr : %v",newConn.LocalAddr()) | |
//fmt.Println("New file conn - remote addr : %v",newConn.RemoteAddr()) | |
if err != nil { | |
if newConn != nil { | |
newConn.Close() | |
} | |
return | |
} else { | |
newConnFile.Close() | |
} | |
vconn, proto, err := virtualconn.DetectProtocol(newConn) | |
//fmt.Println("New vconn conn - local addr : %v",vconn.LocalAddr()) | |
//fmt.Println("New vconn conn - remote addr : %v",vconn.RemoteAddr()) | |
if proto == "HTTPS" { | |
return | |
} | |
//vTCPConn := vconn.(net.TCPConn) | |
//if err != nil { | |
// return nil, err | |
//} | |
tcpaddr, err := net.ResolveTCPAddr("tcp", REMOTE_ADDR) | |
if err != nil { | |
log.Fatalf("Error %v resolving remote tcp addr\n", err) | |
} | |
verified := nanotcpproxy.VerifyTCP(vconn.LocalAddr().String(), tcpaddr) | |
if verified == true { | |
fmt.Println("TCP connection has been verified") | |
go nanotcpproxy.ServeTCP(vconn, tcpaddr) | |
} | |
//TODO: handle tcp | |
//TODO: Loop until next accept?? | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment