tproxy: remove non-linux codes

This commit is contained in:
nadoo 2018-06-26 16:45:46 +08:00
parent 1aa2dc0b07
commit 3adf3b30b5
3 changed files with 36 additions and 37 deletions

View File

@ -2,4 +2,5 @@ package main
import ( import (
_ "github.com/nadoo/glider/proxy/redir" _ "github.com/nadoo/glider/proxy/redir"
// _ "github.com/nadoo/glider/proxy/tproxy"
) )

View File

@ -1,34 +1,53 @@
// +build linux
// ref: https://www.kernel.org/doc/Documentation/networking/tproxy.txt // ref: https://www.kernel.org/doc/Documentation/networking/tproxy.txt
// @LiamHaworth: https://github.com/LiamHaworth/go-tproxy/blob/master/tproxy_udp.go // @LiamHaworth: https://github.com/LiamHaworth/go-tproxy/blob/master/tproxy_udp.go
package main package tproxy
import ( import (
"bytes" "bytes"
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"net" "net"
"net/url"
"strconv" "strconv"
"syscall" "syscall"
"unsafe" "unsafe"
"github.com/nadoo/glider/common/log"
"github.com/nadoo/glider/proxy"
) )
// TProxy struct // TProxy struct
type TProxy struct { type TProxy struct {
dialer Dialer dialer proxy.Dialer
addr string addr string
} }
func init() {
proxy.RegisterServer("tproxy", NewTProxyServer)
}
// NewTProxy returns a tproxy. // NewTProxy returns a tproxy.
func NewTProxy(addr string, dialer Dialer) (*TProxy, error) { func NewTProxy(s string, dialer proxy.Dialer) (*TProxy, error) {
s := &TProxy{ u, err := url.Parse(s)
if err != nil {
log.F("parse err: %s", err)
return nil, err
}
addr := u.Host
p := &TProxy{
dialer: dialer, dialer: dialer,
addr: addr, addr: addr,
} }
return s, nil return p, nil
}
// NewTProxyServer returns a udp tunnel server.
func NewTProxyServer(s string, dialer proxy.Dialer) (proxy.Server, error) {
return NewTProxy(s, dialer)
} }
// ListenAndServe . // ListenAndServe .
@ -39,26 +58,26 @@ func (s *TProxy) ListenAndServe() {
// ListenAndServeTCP . // ListenAndServeTCP .
func (s *TProxy) ListenAndServeTCP() { func (s *TProxy) ListenAndServeTCP() {
logf("proxy-tproxy tcp mode not supported now, please use 'redir' instead") log.F("proxy-tproxy tcp mode not supported now, please use 'redir' instead")
} }
// ListenAndServeUDP . // ListenAndServeUDP .
func (s *TProxy) ListenAndServeUDP() { func (s *TProxy) ListenAndServeUDP() {
laddr, err := net.ResolveUDPAddr("udp", s.addr) laddr, err := net.ResolveUDPAddr("udp", s.addr)
if err != nil { if err != nil {
logf("proxy-tproxy failed to resolve addr %s: %v", s.addr, err) log.F("proxy-tproxy failed to resolve addr %s: %v", s.addr, err)
return return
} }
lc, err := net.ListenUDP("udp", laddr) lc, err := net.ListenUDP("udp", laddr)
if err != nil { if err != nil {
logf("proxy-tproxy failed to listen on %s: %v", s.addr, err) log.F("proxy-tproxy failed to listen on %s: %v", s.addr, err)
return return
} }
fd, err := lc.File() fd, err := lc.File()
if err != nil { if err != nil {
logf("proxy-tproxy failed to get file descriptor: %v", err) log.F("proxy-tproxy failed to get file descriptor: %v", err)
return return
} }
defer fd.Close() defer fd.Close()
@ -66,13 +85,13 @@ func (s *TProxy) ListenAndServeUDP() {
fileDescriptor := int(fd.Fd()) fileDescriptor := int(fd.Fd())
if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_TRANSPARENT, 1); err != nil { if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_TRANSPARENT, 1); err != nil {
syscall.Close(fileDescriptor) syscall.Close(fileDescriptor)
logf("proxy-tproxy failed to set socket option IP_TRANSPARENT: %v", err) log.F("proxy-tproxy failed to set socket option IP_TRANSPARENT: %v", err)
return return
} }
if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_RECVORIGDSTADDR, 1); err != nil { if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_RECVORIGDSTADDR, 1); err != nil {
syscall.Close(fileDescriptor) syscall.Close(fileDescriptor)
logf("proxy-tproxy failed to set socket option IP_RECVORIGDSTADDR: %v", err) log.F("proxy-tproxy failed to set socket option IP_RECVORIGDSTADDR: %v", err)
return return
} }
@ -81,15 +100,15 @@ func (s *TProxy) ListenAndServeUDP() {
_, srcAddr, dstAddr, err := ReadFromUDP(lc, buf) _, srcAddr, dstAddr, err := ReadFromUDP(lc, buf)
if err != nil { if err != nil {
if netErr, ok := err.(net.Error); ok && netErr.Temporary() { if netErr, ok := err.(net.Error); ok && netErr.Temporary() {
logf("proxy-tproxy temporary reading data error: %s", netErr) log.F("proxy-tproxy temporary reading data error: %s", netErr)
continue continue
} }
logf("proxy-tproxy Unrecoverable error while reading data: %s", err) log.F("proxy-tproxy Unrecoverable error while reading data: %s", err)
continue continue
} }
logf("proxy-tproxy Accepting UDP connection from %s with destination of %s", srcAddr.String(), dstAddr.String()) log.F("proxy-tproxy Accepting UDP connection from %s with destination of %s", srcAddr.String(), dstAddr.String())
} }

View File

@ -1,21 +0,0 @@
// +build !linux
package main
import (
"errors"
"log"
)
// TProxy struct
type TProxy struct{}
// NewTProxy returns a tproxy.
func NewTProxy(addr string, sDialer Dialer) (*TProxy, error) {
return nil, errors.New("tproxy not supported on this os")
}
// ListenAndServe .
func (s *TProxy) ListenAndServe() {
log.Fatal("tproxy not supported on this os")
}