Browse Source

Transport

刘河 6 years ago
parent
commit
2912246572
3 changed files with 54 additions and 33 deletions
  1. 0 33
      server/proxy/tcp.go
  2. 43 0
      server/proxy/transport_linux_darwin.go
  3. 11 0
      server/proxy/transport_windows.go

+ 0 - 33
server/proxy/tcp.go

@@ -13,7 +13,6 @@ import (
 	"net/http"
 	"path/filepath"
 	"strconv"
-	"syscall"
 )
 
 type TunnelModeServer struct {
@@ -115,35 +114,3 @@ func ProcessHttp(c *conn.Conn, s *TunnelModeServer) error {
 	}
 	return s.DealClient(c, s.task.Client, addr, rb, common.CONN_TCP, nil, s.task.Flow, s.task.Target.LocalProxy)
 }
-
-func HandleTrans(c *conn.Conn, s *TunnelModeServer) error {
-	if addr, err := getAddress(c.Conn); err != nil {
-		return err
-	} else {
-		return s.DealClient(c, s.task.Client, addr, nil, common.CONN_TCP, nil, s.task.Flow, s.task.Target.LocalProxy)
-	}
-}
-
-const SO_ORIGINAL_DST = 80
-
-func getAddress(conn net.Conn) (string, error) {
-	sysrawconn, f := conn.(syscall.Conn)
-	if !f {
-		return "", nil
-	}
-	rawConn, err := sysrawconn.SyscallConn()
-	if err != nil {
-		return "", nil
-	}
-	var ip string
-	var port uint16
-	err = rawConn.Control(func(fd uintptr) {
-		addr, err := syscall.GetsockoptIPv6Mreq(int(fd), syscall.IPPROTO_IP, SO_ORIGINAL_DST)
-		if err != nil {
-			return
-		}
-		ip = net.IP(addr.Multiaddr[4:8]).String()
-		port = uint16(addr.Multiaddr[2])<<8 + uint16(addr.Multiaddr[3])
-	})
-	return ip + ":" + strconv.Itoa(int(port)), nil
-}

+ 43 - 0
server/proxy/transport_linux_darwin.go

@@ -0,0 +1,43 @@
+// +build !windows
+
+package proxy
+
+import (
+	"github.com/cnlh/nps/lib/common"
+	"github.com/cnlh/nps/lib/conn"
+	"net"
+	"strconv"
+	"syscall"
+)
+
+func HandleTrans(c *conn.Conn, s *TunnelModeServer) error {
+	if addr, err := getAddress(c.Conn); err != nil {
+		return err
+	} else {
+		return s.DealClient(c, s.task.Client, addr, nil, common.CONN_TCP, nil, s.task.Flow, s.task.Target.LocalProxy)
+	}
+}
+
+const SO_ORIGINAL_DST = 80
+
+func getAddress(conn net.Conn) (string, error) {
+	sysrawconn, f := conn.(syscall.Conn)
+	if !f {
+		return "", nil
+	}
+	rawConn, err := sysrawconn.SyscallConn()
+	if err != nil {
+		return "", nil
+	}
+	var ip string
+	var port uint16
+	err = rawConn.Control(func(fd uintptr) {
+		addr, err := syscall.GetsockoptIPv6Mreq(int(fd), syscall.IPPROTO_IP, SO_ORIGINAL_DST)
+		if err != nil {
+			return
+		}
+		ip = net.IP(addr.Multiaddr[4:8]).String()
+		port = uint16(addr.Multiaddr[2])<<8 + uint16(addr.Multiaddr[3])
+	})
+	return ip + ":" + strconv.Itoa(int(port)), nil
+}

+ 11 - 0
server/proxy/transport_windows.go

@@ -0,0 +1,11 @@
+// +build windows
+
+package proxy
+
+import (
+	"github.com/cnlh/nps/lib/conn"
+)
+
+func HandleTrans(c *conn.Conn, s *TunnelModeServer) error {
+	return nil
+}