improve proxy
This commit is contained in:
parent
50101c12b8
commit
d284956268
@ -65,6 +65,10 @@ func ParseConfig(configPath string) (*Config, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.TelegramProxy == "NONE" {
|
||||||
|
c.TelegramProxy = ""
|
||||||
|
}
|
||||||
|
|
||||||
for i, _ := range c.Feeds {
|
for i, _ := range c.Feeds {
|
||||||
feedCfg := &c.Feeds[i]
|
feedCfg := &c.Feeds[i]
|
||||||
if feedCfg.Proxy == "NONE" {
|
if feedCfg.Proxy == "NONE" {
|
||||||
|
35
exp/funint/main.go
Normal file
35
exp/funint/main.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Foo interface {
|
||||||
|
Bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
func bar() {
|
||||||
|
fmt.Println("bar")
|
||||||
|
}
|
||||||
|
|
||||||
|
func run(f Foo) {
|
||||||
|
f.Bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
type t struct {
|
||||||
|
Bar func()
|
||||||
|
}
|
||||||
|
|
||||||
|
type t2 struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t t2) Bar() {
|
||||||
|
bar()
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
run(t2{})
|
||||||
|
var d net.Dialer
|
||||||
|
d.Cancel
|
||||||
|
}
|
@ -4,12 +4,16 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
"go.balki.me/tss/proxy"
|
"go.balki.me/tss/proxy"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
client, err := proxy.GetClient("socks5://unix/run/tor/socks")
|
trans, err := proxy.GetTransport("socks5://unix/run/tor/socks")
|
||||||
|
client := &http.Client{
|
||||||
|
Transport: trans,
|
||||||
|
}
|
||||||
res, err := client.Get("https://ip.balki.me")
|
res, err := client.Get("https://ip.balki.me")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
|
@ -10,6 +10,7 @@ var Debug, Info, Warn, Error, Panic func(msg string, keysAndValues ...interface{
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
||||||
|
//json logging
|
||||||
cfg := zap.NewProductionConfig()
|
cfg := zap.NewProductionConfig()
|
||||||
devCfg := zap.NewDevelopmentConfig()
|
devCfg := zap.NewDevelopmentConfig()
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package proxy
|
package proxy
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
@ -20,12 +22,28 @@ func GetTransport(proxy string) (http.RoundTripper, error) {
|
|||||||
len(proxyUrl.Path) > 1 /* Path cannot be empty or just / */ {
|
len(proxyUrl.Path) > 1 /* Path cannot be empty or just / */ {
|
||||||
return unixSocks5Proxy(proxyUrl.Path)
|
return unixSocks5Proxy(proxyUrl.Path)
|
||||||
}
|
}
|
||||||
return proxyHttp(proxyUrl)
|
return proxyTcp(proxyUrl)
|
||||||
|
}
|
||||||
|
|
||||||
|
type forwardDialer struct {
|
||||||
|
dialContext func(ctx context.Context, network, address string) (net.Conn, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *forwardDialer) DialContext(ctx context.Context, network, address string) (net.Conn, error) {
|
||||||
|
return d.dialContext(ctx, network, address)
|
||||||
|
}
|
||||||
|
func (d *forwardDialer) Dial(network, address string) (net.Conn, error) {
|
||||||
|
panic("Dial should not be called")
|
||||||
|
//default Dial is nil
|
||||||
|
//return defaultTransport().Dial(network, address)
|
||||||
}
|
}
|
||||||
|
|
||||||
func unixSocks5Proxy(path string) (http.RoundTripper, error) {
|
func unixSocks5Proxy(path string) (http.RoundTripper, error) {
|
||||||
// TODO: Auth?
|
trans := defaultTransport().Clone()
|
||||||
dialer, err := proxy.SOCKS5("unix", path, nil /*auth*/, nil)
|
if trans.DialContext == nil {
|
||||||
|
panic("DefaultTransport has nil DialContext")
|
||||||
|
}
|
||||||
|
dialer, err := proxy.SOCKS5("unix", path, nil /*auth*/, &forwardDialer{trans.DialContext})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to make socks proxy, path: %s, err: %w", path, err)
|
return nil, fmt.Errorf("failed to make socks proxy, path: %s, err: %w", path, err)
|
||||||
}
|
}
|
||||||
@ -33,14 +51,13 @@ func unixSocks5Proxy(path string) (http.RoundTripper, error) {
|
|||||||
if !ok {
|
if !ok {
|
||||||
panic("proxy.SOCKS5 did not return a ContextDialer")
|
panic("proxy.SOCKS5 did not return a ContextDialer")
|
||||||
}
|
}
|
||||||
trans := defaultTransport()
|
|
||||||
trans.DialContext = ctxDialer.DialContext
|
trans.DialContext = ctxDialer.DialContext
|
||||||
trans.Proxy = nil
|
trans.Proxy = nil
|
||||||
return trans, nil
|
return trans, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func proxyHttp(proxyUrl *url.URL) (http.RoundTripper, error) {
|
func proxyTcp(proxyUrl *url.URL) (http.RoundTripper, error) {
|
||||||
trans := defaultTransport()
|
trans := defaultTransport().Clone()
|
||||||
trans.Proxy = http.ProxyURL(proxyUrl)
|
trans.Proxy = http.ProxyURL(proxyUrl)
|
||||||
return trans, nil
|
return trans, nil
|
||||||
}
|
}
|
||||||
@ -50,6 +67,5 @@ func defaultTransport() *http.Transport {
|
|||||||
if !ok {
|
if !ok {
|
||||||
panic("http.DefaultTransport is not a *http.Transport")
|
panic("http.DefaultTransport is not a *http.Transport")
|
||||||
}
|
}
|
||||||
trans := transPtr.Clone()
|
return transPtr
|
||||||
return trans
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user