英文:
how to connect to imap through socks ? Go
问题
我正在尝试通过 socks5 连接到一个 IMAP 服务器。为此,我从 Imap 包中导出了一些函数,但我在设置 socks5 拨号器时遇到了问题(第一步)。
我认为问题的原因是我将 nil
作为 forward
参数(类型为 Dial
)传递了进去。forward
参数应该是什么?在 godoc 中没有记录。
func dialSocks(socks string) (Dial proxy.Dialer, err error) {
Dial, err = proxy.SOCKS5("tcp", socks, nil, nil)
return
}
func dialTLS(addr string, config *tls.Config) (c *imap.Client, err error) {
addr = defaultPort(addr, "993")
d, err := dialSocks("101.120.113.185:1328")
if err != nil {
log.Error(err)
return
}
conn, err := d.Dial("tcp", addr)
if err == nil {
host, _, _ := net.SplitHostPort(addr)
tlsConn := tls.Client(conn, setServerName(config, host))
if c, err = imap.NewClient(tlsConn, host, 60*time.Second); err != nil {
conn.Close()
}
}
return
}
func defaultPort(addr, port string) string {
_, _, err := net.SplitHostPort(addr)
if err != nil {
addr = net.JoinHostPort(addr, port)
}
return addr
}
英文:
I'm trying to connect to an IMAP server through a socks5. To do so I've exported some functions from the Imap package but I got stuck at the socks5 dialer setup(1st step:) .
I think the reason is that I'm passing nil
as forward
(of type Dial
) argument . What is the forward
argument supposed to be ? It is not documented (in godoc)
func dialSocks(socks string) (Dial proxy.Dialer, err error) {
Dial, err = proxy.SOCKS5("tcp", socks, nil, nil)
return
}
func dialTLS(addr string, config *tls.Config) (c *imap.Client, err error) {
addr = defaultPort(addr, "993")
d, err := dialSocks("101.120.113.185:1328")
if err != nil {
log.Error(err)
return
}
conn, err := d.Dial("tcp", addr)
if err == nil {
host, _, _ := net.SplitHostPort(addr)
tlsConn := tls.Client(conn, setServerName(config, host))
if c, err = imap.NewClient(tlsConn, host, 60*time.Second); err != nil {
conn.Close()
}
}
return
}
func defaultPort(addr, port string) string {
_, _, err := net.SplitHostPort(addr)
if err != nil {
addr = net.JoinHostPort(addr, port)
}
return addr
}
答案1
得分: 1
forward
是用于连接到代理的Dialer
。
如果你愿意的话,你可以在这里使用proxy.Direct
(如果你查看源代码,这是包内的默认设置),但它只是将调用委托给net.Dial(network, addr)
。如果你想要更多选项,可以插入自己的Dialer。
英文:
forward
is the Dialer
used to connect to the proxy.
You can use proxy.Direct
here if you want (which is the default within the package, if you look at the source), but all that is doing is delegating to net.Dial(network, addr)
. If you want more options, insert your own Dialer.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论