func get_dialer(cfg *Config) (dialer sutils.Dialer, ndialer *msocks.Dialer, err error) { err = dns.LoadConfig("resolv.conf") if err != nil { err = dns.LoadConfig("/etc/goproxy/resolv.conf") if err != nil { return } } dialer = sutils.DefaultTcpDialer dialer, err = cryptconn.NewDialer(dialer, cfg.Cipher, cfg.Keyfile) if err != nil { return } ndialer, err = msocks.NewDialer( dialer, cfg.Server, cfg.Username, cfg.Password) if err != nil { return } dialer = ndialer if cfg.Blackfile != "" { dialer, err = ipfilter.NewFilteredDialer( dialer, sutils.DefaultTcpDialer, cfg.Blackfile) if err != nil { return } } return }
func run_httproxy(basecfg *Config) (err error) { cfg, err := LoadClientConfig(basecfg) if err != nil { return } var dialer sutils.Dialer sp := msocks.CreateSessionPool(cfg.MinSess, cfg.MaxConn) for _, srv := range cfg.Servers { cipher := srv.Cipher if cipher == "" { cipher = cfg.Cipher } dialer, err = cryptconn.NewDialer(sutils.DefaultTcpDialer, cipher, srv.Key) if err != nil { return } sp.AddSessionFactory(dialer, srv.Server, srv.Username, srv.Password) } dialer = sp if cfg.DnsNet == TypeInternal { sutils.DefaultLookuper = sp } if cfg.AdminIface != "" { mux := http.NewServeMux() NewMsocksManager(sp).Register(mux) go httpserver(cfg.AdminIface, mux) } if cfg.Blackfile != "" { fdialer := ipfilter.NewFilteredDialer(dialer) err = fdialer.LoadFilter(sutils.DefaultTcpDialer, cfg.Blackfile) if err != nil { log.Error("%s", err.Error()) return } dialer = fdialer } for _, pm := range cfg.Portmaps { go CreatePortmap(pm, dialer) } return http.ListenAndServe(cfg.Listen, NewProxy(dialer, cfg.HttpUser, cfg.HttpPassword)) }
func run_httproxy(cfg *Config) (err error) { var dialer sutils.Dialer dialer, err = cryptconn.NewDialer(sutils.DefaultTcpDialer, cfg.Cipher, cfg.Key) if err != nil { return } dialer, err = msocks.NewDialer(dialer, cfg.Server, cfg.Username, cfg.Password) if err != nil { return } ndialer := dialer.(*msocks.Dialer) if cfg.MinSess != 0 { ndialer.SessionPool.MinSess = cfg.MinSess } if cfg.MaxConn != 0 { ndialer.SessionPool.MaxConn = cfg.MaxConn } if cfg.DnsNet == TypeInternal { sutils.DefaultLookuper = ndialer } if cfg.AdminIface != "" { mux := http.NewServeMux() NewMsocksManager(ndialer.SessionPool).Register(mux) go httpserver(cfg.AdminIface, mux) } if cfg.Blackfile != "" { fdialer := ipfilter.NewFilteredDialer(dialer) err = fdialer.LoadFilter(sutils.DefaultTcpDialer, cfg.Blackfile) if err != nil { log.Error("%s", err.Error()) return } dialer = fdialer } for _, pm := range cfg.Portmaps { go CreatePortmap(pm, dialer) } return http.ListenAndServe(cfg.Listen, NewProxy(dialer)) }