mirror of
https://github.com/nadoo/glider.git
synced 2025-02-23 17:35:40 +08:00
tproxy: remove non-linux codes
This commit is contained in:
parent
1aa2dc0b07
commit
3adf3b30b5
@ -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"
|
||||||
)
|
)
|
||||||
|
@ -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())
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -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