2025-04-11 23:20:07 +07:00
|
|
|
package handler
|
|
|
|
|
|
|
|
|
|
import (
|
2025-11-20 01:25:35 +02:00
|
|
|
"context"
|
2025-08-12 19:38:17 +03:00
|
|
|
"log"
|
2025-11-20 01:25:35 +02:00
|
|
|
"net"
|
2025-08-12 19:38:17 +03:00
|
|
|
|
2026-03-25 15:26:39 +03:00
|
|
|
"github.com/Alexey71/opera-proxy/dialer"
|
2025-11-20 01:25:35 +02:00
|
|
|
"github.com/things-go/go-socks5"
|
2025-04-11 23:20:07 +07:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func NewSocksServer(dialer dialer.ContextDialer, logger *log.Logger) (*socks5.Server, error) {
|
2025-11-20 01:25:35 +02:00
|
|
|
opts := []socks5.Option{
|
|
|
|
|
socks5.WithLogger(socks5.NewLogger(logger)),
|
|
|
|
|
socks5.WithRule(
|
|
|
|
|
&socks5.PermitCommand{
|
|
|
|
|
EnableConnect: true,
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
socks5.WithDial(dialer.DialContext),
|
|
|
|
|
socks5.WithResolver(DummySocksResolver{}),
|
|
|
|
|
}
|
|
|
|
|
return socks5.NewServer(opts...), nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type DummySocksResolver struct{}
|
|
|
|
|
|
|
|
|
|
func (_ DummySocksResolver) Resolve(ctx context.Context, name string) (context.Context, net.IP, error) {
|
|
|
|
|
return ctx, nil, nil
|
2025-04-11 23:20:07 +07:00
|
|
|
}
|