add scope param for traffic limiter

This commit is contained in:
ginuerzh
2024-08-31 09:30:04 +08:00
parent 9405d1fb48
commit 31c482c649
57 changed files with 1239 additions and 485 deletions
+41 -2
View File
@@ -10,13 +10,16 @@ import (
"net"
"net/http"
"strings"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -76,6 +79,13 @@ func (l *dnsListener) Init(md md.Metadata) (err error) {
if err != nil {
return
}
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
l.server = &dnsServer{
server: &dns.Server{
Net: "tcp",
@@ -111,6 +121,12 @@ func (l *dnsListener) Init(md md.Metadata) (err error) {
}
ln = tls.NewListener(ln, l.options.TLSConfig)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
l.server = &dnsServer{
server: &dns.Server{
Net: "tcp-tls",
@@ -147,6 +163,12 @@ func (l *dnsListener) Init(md md.Metadata) (err error) {
}
ln = tls.NewListener(ln, l.options.TLSConfig)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
l.server = &dohServer{
addr: l.options.Addr,
tlsConfig: l.options.TLSConfig,
@@ -181,6 +203,15 @@ func (l *dnsListener) Init(md md.Metadata) (err error) {
return
}
pc = limiter_wrapper.WrapPacketConn(
pc,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(network),
)
l.server = &dnsServer{
server: &dns.Server{
Net: "udp",
@@ -218,7 +249,15 @@ func (l *dnsListener) Accept() (conn net.Conn, err error) {
conn = metrics.WrapConn(l.options.Service, conn)
conn = stats.WrapConn(conn, l.options.Stats)
conn = admission.WrapConn(l.options.Admission, conn)
conn = limiter.WrapConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+17 -2
View File
@@ -6,6 +6,7 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
@@ -13,8 +14,9 @@ import (
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
xdtls "github.com/go-gost/x/internal/util/dtls"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -82,7 +84,11 @@ func (l *dtlsListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.ln = ln
@@ -96,6 +102,15 @@ func (l *dtlsListener) Accept() (conn net.Conn, err error) {
return
}
conn = xdtls.Conn(c, l.md.bufferSize)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
+28 -3
View File
@@ -2,14 +2,17 @@ package ftcp
import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/udp"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -55,7 +58,14 @@ func (l *ftcpListener) Init(md md.Metadata) (err error) {
conn = metrics.WrapPacketConn(l.options.Service, conn)
conn = stats.WrapPacketConn(conn, l.options.Stats)
conn = admission.WrapPacketConn(l.options.Admission, conn)
conn = limiter.WrapPacketConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapPacketConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
)
l.ln = udp.NewListener(
conn,
@@ -71,7 +81,22 @@ func (l *ftcpListener) Init(md md.Metadata) (err error) {
}
func (l *ftcpListener) Accept() (conn net.Conn, err error) {
return l.ln.Accept()
conn, err = l.ln.Accept()
if err != nil {
return
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
func (l *ftcpListener) Addr() net.Addr {
+17 -2
View File
@@ -5,6 +5,7 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
@@ -12,8 +13,9 @@ import (
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
pb "github.com/go-gost/x/internal/util/grpc/proto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -69,7 +71,11 @@ func (l *grpcListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
var opts []grpc.ServerOption
@@ -116,6 +122,15 @@ func (l *grpcListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+17 -2
View File
@@ -9,14 +9,16 @@ import (
"net/http/httputil"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -90,7 +92,11 @@ func (l *h2Listener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
if l.h2c {
@@ -122,6 +128,15 @@ func (l *h2Listener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+17 -2
View File
@@ -7,14 +7,16 @@ import (
"net/http"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
mdx "github.com/go-gost/x/metadata"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
@@ -79,7 +81,11 @@ func (l *http2Listener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
ln = tls.NewListener(
@@ -103,6 +109,15 @@ func (l *http2Listener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+13 -2
View File
@@ -2,14 +2,17 @@ package h3
import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
limiter_util "github.com/go-gost/x/internal/util/limiter"
pht_util "github.com/go-gost/x/internal/util/pht"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -88,7 +91,15 @@ func (l *http3Listener) Accept() (conn net.Conn, err error) {
conn = metrics.WrapConn(l.options.Service, conn)
conn = stats.WrapConn(conn, l.options.Stats)
conn = admission.WrapConn(l.options.Admission, conn)
conn = limiter.WrapConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return conn, nil
}
+27 -6
View File
@@ -4,14 +4,17 @@ import (
"net"
"net/http"
"net/http/httputil"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
limiter_util "github.com/go-gost/x/internal/util/limiter"
wt_util "github.com/go-gost/x/internal/util/wt"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -65,11 +68,24 @@ func (l *wtListener) Init(md md.Metadata) (err error) {
}
l.addr = laddr
pc, err := net.ListenUDP(network, laddr)
var pc net.PacketConn
pc, err = net.ListenUDP(network, laddr)
if err != nil {
return
}
pc = metrics.WrapPacketConn(l.options.Service, pc)
pc = stats.WrapPacketConn(pc, l.options.Stats)
pc = admission.WrapPacketConn(l.options.Admission, pc)
pc = limiter_wrapper.WrapPacketConn(
pc,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(network),
)
mux := http.NewServeMux()
mux.Handle(l.md.path, http.HandlerFunc(l.upgrade))
@@ -112,10 +128,15 @@ func (l *wtListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = metrics.WrapConn(l.options.Service, conn)
conn = stats.WrapConn(conn, l.options.Stats)
conn = admission.WrapConn(l.options.Admission, conn)
conn = limiter.WrapConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+21 -2
View File
@@ -3,13 +3,16 @@ package quic
import (
"context"
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
icmp_pkg "github.com/go-gost/x/internal/util/icmp"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -78,7 +81,14 @@ func (l *icmpListener) Init(md md.Metadata) (err error) {
conn = metrics.WrapPacketConn(l.options.Service, conn)
conn = stats.WrapPacketConn(conn, l.options.Stats)
conn = admission.WrapPacketConn(l.options.Admission, conn)
conn = limiter.WrapPacketConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapPacketConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
)
config := &quic.Config{
KeepAlivePeriod: l.md.keepAlivePeriod,
@@ -111,6 +121,15 @@ func (l *icmpListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+20 -2
View File
@@ -4,13 +4,15 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
kcp_util "github.com/go-gost/x/internal/util/kcp"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -78,7 +80,14 @@ func (l *kcpListener) Init(md md.Metadata) (err error) {
conn = metrics.WrapUDPConn(l.options.Service, conn)
conn = stats.WrapUDPConn(conn, l.options.Stats)
conn = admission.WrapUDPConn(l.options.Admission, conn)
conn = limiter.WrapUDPConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapUDPConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
)
ln, err := kcp.ServeConn(
kcp_util.BlockCrypt(config.Key, config.Crypt, kcp_util.DefaultSalt),
@@ -113,6 +122,15 @@ func (l *kcpListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+17 -2
View File
@@ -5,15 +5,17 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
"github.com/go-gost/x/internal/util/mux"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -69,7 +71,11 @@ func (l *mtcpListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.ln = ln
@@ -93,6 +99,15 @@ func (l *mtcpListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+17 -2
View File
@@ -6,15 +6,17 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
"github.com/go-gost/x/internal/util/mux"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -68,7 +70,11 @@ func (l *mtlsListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.Listener = tls.NewListener(ln, l.options.TLSConfig)
@@ -84,6 +90,15 @@ func (l *mtlsListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+17 -2
View File
@@ -8,16 +8,18 @@ import (
"net/http/httputil"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
"github.com/go-gost/x/internal/util/mux"
ws_util "github.com/go-gost/x/internal/util/ws"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -110,7 +112,11 @@ func (l *mwsListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
if l.tlsEnabled {
@@ -134,6 +140,15 @@ func (l *mwsListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+20 -4
View File
@@ -5,14 +5,16 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -63,7 +65,11 @@ func (l *obfsListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.Listener = ln
@@ -71,13 +77,23 @@ func (l *obfsListener) Init(md md.Metadata) (err error) {
}
func (l *obfsListener) Accept() (net.Conn, error) {
c, err := l.Listener.Accept()
conn, err := l.Listener.Accept()
if err != nil {
return nil, err
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return &obfsHTTPConn{
Conn: c,
Conn: conn,
header: l.md.header,
logger: l.logger,
}, nil
+20 -4
View File
@@ -5,14 +5,16 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -63,7 +65,11 @@ func (l *obfsListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.Listener = ln
@@ -71,12 +77,22 @@ func (l *obfsListener) Init(md md.Metadata) (err error) {
}
func (l *obfsListener) Accept() (net.Conn, error) {
c, err := l.Listener.Accept()
conn, err := l.Listener.Accept()
if err != nil {
return nil, err
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return &obfsTLSConn{
Conn: c,
Conn: conn,
}, nil
}
+13 -2
View File
@@ -4,14 +4,17 @@ package pht
import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
limiter_util "github.com/go-gost/x/internal/util/limiter"
pht_util "github.com/go-gost/x/internal/util/pht"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -95,7 +98,15 @@ func (l *phtListener) Accept() (conn net.Conn, err error) {
conn = metrics.WrapConn(l.options.Service, conn)
conn = stats.WrapConn(conn, l.options.Stats)
conn = admission.WrapConn(l.options.Admission, conn)
conn = limiter.WrapConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
+25 -5
View File
@@ -4,14 +4,17 @@ import (
"context"
"net"
"strings"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
limiter_util "github.com/go-gost/x/internal/util/limiter"
quic_util "github.com/go-gost/x/internal/util/quic"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -70,6 +73,18 @@ func (l *quicListener) Init(md md.Metadata) (err error) {
conn = quic_util.CipherPacketConn(conn, l.md.cipherKey)
}
conn = metrics.WrapPacketConn(l.options.Service, conn)
conn = stats.WrapPacketConn(conn, l.options.Stats)
conn = admission.WrapPacketConn(l.options.Admission, conn)
conn = limiter_wrapper.WrapPacketConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
)
config := &quic.Config{
KeepAlivePeriod: l.md.keepAlivePeriod,
HandshakeIdleTimeout: l.md.handshakeTimeout,
@@ -102,10 +117,15 @@ func (l *quicListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = metrics.WrapConn(l.options.Service, conn)
conn = stats.WrapConn(conn, l.options.Stats)
conn = admission.WrapConn(l.options.Admission, conn)
conn = limiter.WrapConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+24 -3
View File
@@ -5,14 +5,16 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -68,14 +70,33 @@ func (l *redirectListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.ln = ln
return
}
func (l *redirectListener) Accept() (conn net.Conn, err error) {
return l.ln.Accept()
conn, err = l.ln.Accept()
if err != nil {
return
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
func (l *redirectListener) Addr() net.Addr {
+13 -2
View File
@@ -2,12 +2,15 @@ package udp
import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -57,7 +60,15 @@ func (l *redirectListener) Accept() (conn net.Conn, err error) {
conn = metrics.WrapConn(l.options.Service, conn)
conn = stats.WrapConn(conn, l.options.Stats)
conn = admission.WrapConn(l.options.Admission, conn)
conn = limiter.WrapConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
+20 -2
View File
@@ -4,15 +4,18 @@ import (
"context"
"net"
"sync"
"time"
"github.com/go-gost/core/chain"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -81,7 +84,11 @@ func (l *rtcpListener) Accept() (conn net.Conn, err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.setListener(ln)
}
@@ -99,6 +106,17 @@ func (l *rtcpListener) Accept() (conn net.Conn, err error) {
l.setListener(nil)
return nil, listener.NewAcceptError(err)
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
+21 -2
View File
@@ -4,14 +4,18 @@ import (
"context"
"net"
"sync"
"time"
"github.com/go-gost/core/chain"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -81,6 +85,14 @@ func (l *rudpListener) Accept() (conn net.Conn, err error) {
if err != nil {
return nil, listener.NewAcceptError(err)
}
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.setListener(ln)
}
@@ -102,7 +114,14 @@ func (l *rudpListener) Accept() (conn net.Conn, err error) {
uc := metrics.WrapUDPConn(l.options.Service, pc)
uc = stats.WrapUDPConn(uc, l.options.Stats)
uc = admission.WrapUDPConn(l.options.Admission, uc)
conn = limiter.WrapUDPConn(l.options.TrafficLimiter, uc)
conn = limiter_wrapper.WrapUDPConn(
uc,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
)
}
return
+15 -6
View File
@@ -5,11 +5,13 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
limiter_util "github.com/go-gost/x/internal/util/limiter"
serial "github.com/go-gost/x/internal/util/serial"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -94,12 +96,19 @@ func (l *serialListener) listenLoop() {
return err
}
c := serial.NewConn(port, l.addr, cancel)
c = metrics.WrapConn(l.options.Service, c)
c = stats.WrapConn(c, l.options.Stats)
c = limiter.WrapConn(l.options.TrafficLimiter, c)
conn := serial.NewConn(port, l.addr, cancel)
conn = metrics.WrapConn(l.options.Service, conn)
conn = stats.WrapConn(conn, l.options.Stats)
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
)
l.cqueue <- c
l.cqueue <- conn
return nil
}()
+17 -2
View File
@@ -6,15 +6,17 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
ssh_util "github.com/go-gost/x/internal/util/ssh"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -70,7 +72,11 @@ func (l *sshListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.Listener = ln
@@ -96,6 +102,15 @@ func (l *sshListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+17 -2
View File
@@ -7,16 +7,18 @@ import (
"strconv"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
ssh_util "github.com/go-gost/x/internal/util/ssh"
sshd_util "github.com/go-gost/x/internal/util/sshd"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -78,7 +80,11 @@ func (l *sshdListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.Listener = ln
@@ -104,6 +110,15 @@ func (l *sshdListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed
+11 -2
View File
@@ -5,11 +5,13 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
mdata "github.com/go-gost/core/metadata"
xnet "github.com/go-gost/x/internal/net"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
mdx "github.com/go-gost/x/metadata"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
@@ -92,7 +94,14 @@ func (l *tapListener) listenLoop() {
}
c = metrics.WrapConn(l.options.Service, c)
c = stats.WrapConn(c, l.options.Stats)
c = limiter.WrapConn(l.options.TrafficLimiter, c)
c = limiter_wrapper.WrapConn(
c,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
c.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(c.LocalAddr().Network()),
)
c = withMetadata(mdx.NewMetadata(map[string]any{
"config": l.md.config,
}), c)
+24 -3
View File
@@ -5,14 +5,16 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -66,7 +68,11 @@ func (l *tcpListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.ln = ln
@@ -74,7 +80,22 @@ func (l *tcpListener) Init(md md.Metadata) (err error) {
}
func (l *tcpListener) Accept() (conn net.Conn, err error) {
return l.ln.Accept()
conn, err = l.ln.Accept()
if err != nil {
return
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
func (l *tcpListener) Addr() net.Addr {
+24 -3
View File
@@ -6,14 +6,16 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -64,7 +66,11 @@ func (l *tlsListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.ln = tls.NewListener(ln, l.options.TLSConfig)
@@ -73,7 +79,22 @@ func (l *tlsListener) Init(md md.Metadata) (err error) {
}
func (l *tlsListener) Accept() (conn net.Conn, err error) {
return l.ln.Accept()
conn, err = l.ln.Accept()
if err != nil {
return
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
func (l *tlsListener) Addr() net.Addr {
+11 -2
View File
@@ -5,12 +5,14 @@ import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
mdata "github.com/go-gost/core/metadata"
"github.com/go-gost/core/router"
xnet "github.com/go-gost/x/internal/net"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
mdx "github.com/go-gost/x/metadata"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
@@ -93,7 +95,14 @@ func (l *tunListener) listenLoop() {
}
c = metrics.WrapConn(l.options.Service, c)
c = stats.WrapConn(c, l.options.Stats)
c = limiter.WrapConn(l.options.TrafficLimiter, c)
c = limiter_wrapper.WrapConn(
c,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
c.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(c.LocalAddr().Network()),
)
c = withMetadata(mdx.NewMetadata(map[string]any{
"config": l.md.config,
}), c)
+12 -2
View File
@@ -2,14 +2,17 @@ package udp
import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/udp"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -59,7 +62,14 @@ func (l *udpListener) Init(md md.Metadata) (err error) {
conn = metrics.WrapPacketConn(l.options.Service, conn)
conn = stats.WrapPacketConn(conn, l.options.Stats)
conn = admission.WrapPacketConn(l.options.Admission, conn)
conn = limiter.WrapPacketConn(l.options.TrafficLimiter, conn)
conn = limiter_wrapper.WrapPacketConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
"",
limiter.ScopeOption(limiter.ScopeService),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
)
l.ln = udp.NewListener(conn, &udp.ListenConfig{
Backlog: l.md.backlog,
+25 -3
View File
@@ -2,13 +2,16 @@ package unix
import (
"net"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
limiter_util "github.com/go-gost/x/internal/util/limiter"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -49,7 +52,11 @@ func (l *unixListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
l.ln = ln
@@ -57,7 +64,22 @@ func (l *unixListener) Init(md md.Metadata) (err error) {
}
func (l *unixListener) Accept() (conn net.Conn, err error) {
return l.ln.Accept()
conn, err = l.ln.Accept()
if err != nil {
return
}
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
return
}
func (l *unixListener) Addr() net.Addr {
+17 -2
View File
@@ -8,15 +8,17 @@ import (
"net/http/httputil"
"time"
"github.com/go-gost/core/limiter"
"github.com/go-gost/core/listener"
"github.com/go-gost/core/logger"
md "github.com/go-gost/core/metadata"
admission "github.com/go-gost/x/admission/wrapper"
xnet "github.com/go-gost/x/internal/net"
"github.com/go-gost/x/internal/net/proxyproto"
limiter_util "github.com/go-gost/x/internal/util/limiter"
ws_util "github.com/go-gost/x/internal/util/ws"
climiter "github.com/go-gost/x/limiter/conn/wrapper"
limiter "github.com/go-gost/x/limiter/traffic/wrapper"
limiter_wrapper "github.com/go-gost/x/limiter/traffic/wrapper"
metrics "github.com/go-gost/x/metrics/wrapper"
stats "github.com/go-gost/x/observer/stats/wrapper"
"github.com/go-gost/x/registry"
@@ -105,7 +107,11 @@ func (l *wsListener) Init(md md.Metadata) (err error) {
ln = metrics.WrapListener(l.options.Service, ln)
ln = stats.WrapListener(ln, l.options.Stats)
ln = admission.WrapListener(l.options.Admission, ln)
ln = limiter.WrapListener(l.options.TrafficLimiter, ln)
ln = limiter_wrapper.WrapListener(
l.options.Service,
ln,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
)
ln = climiter.WrapListener(l.options.ConnLimiter, ln)
if l.tlsEnabled {
@@ -129,6 +135,15 @@ func (l *wsListener) Accept() (conn net.Conn, err error) {
var ok bool
select {
case conn = <-l.cqueue:
conn = limiter_wrapper.WrapConn(
conn,
limiter_util.NewCachedTrafficLimiter(l.options.TrafficLimiter, 30*time.Second, 60*time.Second),
conn.RemoteAddr().String(),
limiter.ScopeOption(limiter.ScopeConn),
limiter.ServiceOption(l.options.Service),
limiter.NetworkOption(conn.LocalAddr().Network()),
limiter.SrcOption(conn.RemoteAddr().String()),
)
case err, ok = <-l.errChan:
if !ok {
err = listener.ErrClosed