Gadewch i gyd-destun Go ganslo sefydlu cysylltiad SOCKS
Defnyddiwch y rhyngwyneb ContextDialer a allforiwyd ar gyfer llwybr SOCKS Go a gwahaniaethwch ganslo cysylltiad od terfynau amser ar draffig cymhwysiad diweddarach.
func dialViaSOCKS(ctx context.Context, destination string) (net.Conn, error) {
dialer, err := proxy.SOCKS5(
"tcp",
"127.0.0.1:1080",
nil,
&net.Dialer{Timeout: 5 * time.Second},
)
if err != nil {
return nil, err
}
contextDialer, ok := dialer.(proxy.ContextDialer)
if !ok {
return nil, errors.New("SOCKS dialer lacks context support")
}
return contextDialer.DialContext(ctx, "tcp", destination)
}O fewn pecyn rhwydwaith Go sy'n bodoli, defnyddiwch y mewnforion context, errors, net, time a x/net/proxy. Nid yw'r ymresymiad nil yn dewis unrhyw gymwysterau SOCKS. Ar gyfer cyrchfan gyhoeddus ar lwybr dirprwy gyhoeddus a ganiateir, mae'r rhestr dirprwyon SOCKS5 yn cynnig ymgeiswyr ar gyfer pwynt terfyn y dialer.
Mae'r haeriad proxy.ContextDialer a allforiwyd yn gwneud i weithrediadau heb gefnogaeth fethu'n benodol. Gwiriwch y dibyniaeth a osodwyd yn lle enwi math dialer mewnol neu ddechrau goroutine sy'n rhwystro na all y galwr ei reoli.
Mae'r cyd-destun yn rheoli sefydlu cysylltiad. Unwaith y dychwelir net.Conn, cymhwyswch derfynau darllen/ysgrifennu priodol neu derfynau cais lefel uwch. Mae terfyn amser cysylltiad dialer sylfaenol a chyfanswm cyllideb cymhwysiad yn derfynau gwahanol.
Ar gyfer integreiddio cludiant HTTP, cadwch ei ymddygiad TLS ac HTTP arferol. Y llif SOCKS sy'n ymwybodol o gyd-destun a ddychwelwyd yw'r trosglwyddiad cludiant, nid ymateb nac yn bolisi bywyd ar gyfer pob beit diweddarach.