mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 09:25:41 +08:00
tproxy: remove non-linux codes
This commit is contained in:
parent
1aa2dc0b07
commit
3adf3b30b5
@ -2,4 +2,5 @@ package main
|
||||
|
||||
import (
|
||||
_ "github.com/nadoo/glider/proxy/redir"
|
||||
// _ "github.com/nadoo/glider/proxy/tproxy"
|
||||
)
|
||||
|
@ -1,34 +1,53 @@
|
||||
// +build linux
|
||||
|
||||
// ref: https://www.kernel.org/doc/Documentation/networking/tproxy.txt
|
||||
// @LiamHaworth: https://github.com/LiamHaworth/go-tproxy/blob/master/tproxy_udp.go
|
||||
|
||||
package main
|
||||
package tproxy
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/nadoo/glider/common/log"
|
||||
"github.com/nadoo/glider/proxy"
|
||||
)
|
||||
|
||||
// TProxy struct
|
||||
type TProxy struct {
|
||||
dialer Dialer
|
||||
dialer proxy.Dialer
|
||||
addr string
|
||||
}
|
||||
|
||||
func init() {
|
||||
proxy.RegisterServer("tproxy", NewTProxyServer)
|
||||
}
|
||||
|
||||
// NewTProxy returns a tproxy.
|
||||
func NewTProxy(addr string, dialer Dialer) (*TProxy, error) {
|
||||
s := &TProxy{
|
||||
func NewTProxy(s string, dialer proxy.Dialer) (*TProxy, error) {
|
||||
u, err := url.Parse(s)
|
||||
if err != nil {
|
||||
log.F("parse err: %s", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
addr := u.Host
|
||||
|
||||
p := &TProxy{
|
||||
dialer: dialer,
|
||||
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 .
|
||||
@ -39,26 +58,26 @@ func (s *TProxy) ListenAndServe() {
|
||||
|
||||
// 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 .
|
||||
func (s *TProxy) ListenAndServeUDP() {
|
||||
laddr, err := net.ResolveUDPAddr("udp", s.addr)
|
||||
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
|
||||
}
|
||||
|
||||
lc, err := net.ListenUDP("udp", laddr)
|
||||
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
|
||||
}
|
||||
|
||||
fd, err := lc.File()
|
||||
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
|
||||
}
|
||||
defer fd.Close()
|
||||
@ -66,13 +85,13 @@ func (s *TProxy) ListenAndServeUDP() {
|
||||
fileDescriptor := int(fd.Fd())
|
||||
if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_TRANSPARENT, 1); err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_RECVORIGDSTADDR, 1); err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
@ -81,15 +100,15 @@ func (s *TProxy) ListenAndServeUDP() {
|
||||
_, srcAddr, dstAddr, err := ReadFromUDP(lc, buf)
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
logf("proxy-tproxy Unrecoverable error while reading data: %s", err)
|
||||
log.F("proxy-tproxy Unrecoverable error while reading data: %s", err)
|
||||
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())
|
||||
|
||||
}
|
||||
|
@ -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")
|
||||
}
|
Loading…
Reference in New Issue
Block a user