mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2026-10-21 03:42:42 +00:00
chore cleanup
This commit is contained in:
+11
-19
@@ -31,7 +31,6 @@ var (
|
||||
|
||||
args = new(CmdArgs)
|
||||
|
||||
handlerCreator func()
|
||||
postFlagsInitFn []func()
|
||||
|
||||
lwipWriter io.Writer
|
||||
@@ -41,14 +40,13 @@ var (
|
||||
|
||||
type CmdArgs struct {
|
||||
// Main
|
||||
Version *bool
|
||||
DelayICMP *int
|
||||
TunName *string
|
||||
TunAddr *string
|
||||
TunGw *string
|
||||
TunMask *string
|
||||
TunDns *string
|
||||
LogLevel *string
|
||||
Version *bool
|
||||
TunName *string
|
||||
TunAddr *string
|
||||
TunGw *string
|
||||
TunMask *string
|
||||
TunDns *string
|
||||
LogLevel *string
|
||||
|
||||
// Proxy
|
||||
ProxyServer *string
|
||||
@@ -79,7 +77,6 @@ func init() {
|
||||
args.TunGw = flag.String("tunGw", "240.0.0.1", "TUN interface gateway")
|
||||
args.TunMask = flag.String("tunMask", "255.255.255.0", "TUN interface netmask, it should be a prefix length (a number) for IPv6 address")
|
||||
args.TunDns = flag.String("tunDns", "1.1.1.1", "DNS resolvers for TUN interface (Windows Only)")
|
||||
args.DelayICMP = flag.Int("delayICMP", 1, "Delay ICMP packets for a short period of time, in milliseconds")
|
||||
|
||||
// Proxy
|
||||
args.ProxyServer = flag.String("proxyServer", "", "Proxy server address")
|
||||
@@ -127,13 +124,9 @@ func main() {
|
||||
}
|
||||
|
||||
// Setup TCP/IP stack.
|
||||
lwipWriter = core.NewLWIPStack().(io.Writer)
|
||||
|
||||
// Wrap a writer to delay ICMP packets if delay time is not zero.
|
||||
if *args.DelayICMP > 0 {
|
||||
log.Infof("ICMP packets will be delayed for %dms", *args.DelayICMP)
|
||||
lwipWriter = filter.NewICMPFilter(lwipWriter, *args.DelayICMP).(io.Writer)
|
||||
}
|
||||
// Wrap a writer to delay ICMP packets.
|
||||
w := core.NewLWIPStack().(io.Writer)
|
||||
lwipWriter = filter.NewICMPFilter(w).(io.Writer)
|
||||
|
||||
// Register TCP and UDP handlers to handle accepted connections.
|
||||
proxyAddr, err := net.ResolveTCPAddr("tcp", *args.ProxyServer)
|
||||
@@ -153,8 +146,7 @@ func main() {
|
||||
|
||||
// Copy packets from tun device to lwip stack, it's the main loop.
|
||||
go func() {
|
||||
_, err := io.CopyBuffer(lwipWriter, tunDev, make([]byte, MTU))
|
||||
if err != nil {
|
||||
if _, err := io.CopyBuffer(lwipWriter, tunDev, make([]byte, MTU)); err != nil {
|
||||
log.Fatalf("copying data failed: %v", err)
|
||||
}
|
||||
}()
|
||||
|
||||
@@ -34,7 +34,7 @@ func NewSimpleSessionStater() stats.SessionStater {
|
||||
return &simpleSessionStater{}
|
||||
}
|
||||
|
||||
func (s *simpleSessionStater) Start() error {
|
||||
func (s *simpleSessionStater) Start() {
|
||||
log.Debugf("Start session stater")
|
||||
sessionStatsHandler := func(resp http.ResponseWriter, req *http.Request) {
|
||||
// Make a snapshot.
|
||||
@@ -97,12 +97,11 @@ func (s *simpleSessionStater) Start() error {
|
||||
mux.HandleFunc(StatsPath, sessionStatsHandler)
|
||||
s.server = &http.Server{Addr: StatsAddr, Handler: mux}
|
||||
go s.server.ListenAndServe()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *simpleSessionStater) Stop() error {
|
||||
func (s *simpleSessionStater) Stop() {
|
||||
log.Debugf("Stop session stater")
|
||||
return s.server.Close()
|
||||
s.server.Close()
|
||||
}
|
||||
|
||||
func (s *simpleSessionStater) AddSession(key interface{}, session *stats.Session) {
|
||||
|
||||
@@ -8,8 +8,8 @@ import (
|
||||
)
|
||||
|
||||
type SessionStater interface {
|
||||
Start() error
|
||||
Stop() error
|
||||
Start()
|
||||
Stop()
|
||||
AddSession(key interface{}, session *Session)
|
||||
GetSession(key interface{}) *Session
|
||||
RemoveSession(key interface{})
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import (
|
||||
"io"
|
||||
)
|
||||
|
||||
// Filter is used for filtering IP packets comming from TUN.
|
||||
// Filter is used for filtering IP packets coming from TUN.
|
||||
type Filter interface {
|
||||
io.Writer
|
||||
}
|
||||
|
||||
+6
-10
@@ -2,7 +2,6 @@ package filter
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"github.com/xjasonlyu/tun2socks/common/log"
|
||||
"github.com/xjasonlyu/tun2socks/common/packet"
|
||||
@@ -10,26 +9,23 @@ import (
|
||||
|
||||
type icmpFilter struct {
|
||||
writer io.Writer
|
||||
delay int
|
||||
}
|
||||
|
||||
func NewICMPFilter(w io.Writer, delay int) Filter {
|
||||
return &icmpFilter{writer: w, delay: delay}
|
||||
func NewICMPFilter(w io.Writer) Filter {
|
||||
return &icmpFilter{writer: w}
|
||||
}
|
||||
|
||||
func (w *icmpFilter) Write(buf []byte) (int, error) {
|
||||
if uint8(buf[9]) == packet.PROTOCOL_ICMP {
|
||||
func (f *icmpFilter) Write(buf []byte) (int, error) {
|
||||
if buf[9] == packet.PROTOCOL_ICMP {
|
||||
payload := make([]byte, len(buf))
|
||||
copy(payload, buf)
|
||||
go func(data []byte) {
|
||||
time.Sleep(time.Duration(w.delay) * time.Millisecond)
|
||||
_, err := w.writer.Write(data)
|
||||
if err != nil {
|
||||
if _, err := f.writer.Write(data); err != nil {
|
||||
log.Fatalf("failed to input data to the stack: %v", err)
|
||||
}
|
||||
}(payload)
|
||||
return len(buf), nil
|
||||
} else {
|
||||
return w.writer.Write(buf)
|
||||
return f.writer.Write(buf)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -42,6 +42,9 @@ func NewUDPHandler(proxyHost string, proxyPort uint16, timeout time.Duration, fa
|
||||
}
|
||||
|
||||
func (h *udpHandler) handleTCP(conn core.UDPConn, c net.Conn) {
|
||||
// keep tcp connection alive
|
||||
tcpKeepAlive(c)
|
||||
|
||||
for {
|
||||
// clear timeout settings
|
||||
c.SetDeadline(time.Time{})
|
||||
@@ -74,7 +77,7 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, input net.PacketConn) {
|
||||
return
|
||||
}
|
||||
|
||||
if n < 4 {
|
||||
if n < 5 {
|
||||
log.Warnf("short udp packet length: %d", n)
|
||||
return
|
||||
}
|
||||
@@ -85,7 +88,7 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, input net.PacketConn) {
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := conn.WriteFrom(buf[int(3+len(addr)):n], resolvedAddr); err != nil {
|
||||
if _, err := conn.WriteFrom(buf[3+len(addr):n], resolvedAddr); err != nil {
|
||||
log.Warnf("failed to write UDP data: %v", err)
|
||||
return
|
||||
}
|
||||
@@ -94,7 +97,6 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, input net.PacketConn) {
|
||||
|
||||
func (h *udpHandler) Connect(conn core.UDPConn, target *net.UDPAddr) error {
|
||||
if target == nil {
|
||||
// return h.connectInternal(conn, "")
|
||||
log.Warnf("UDP target is invalid: %s", conn.LocalAddr().String())
|
||||
return errors.New("UDP target is invalid")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user