Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/mitm-socket/go/dialer.go
1029 views
1
package main
2
3
import (
4
"net"
5
"net/url"
6
"time"
7
)
8
9
func Dial(addr string, connectArgs ConnectArgs, sessionArgs SessionArgs) (net.Conn, error) {
10
var dialTimeout = time.Duration(15) * time.Second
11
12
/// Dial the server
13
dialer := net.Dialer{
14
Control: ConfigureSocket(sessionArgs.TcpTtl, sessionArgs.TcpWindowSize),
15
Timeout: dialTimeout,
16
}
17
18
if connectArgs.ProxyUrl != "" {
19
proxyUrl, err := url.Parse(connectArgs.ProxyUrl)
20
if err != nil {
21
return nil, err
22
}
23
24
if proxyUrl.Scheme == "socks5" || proxyUrl.Scheme == "socks5h" {
25
return DialAddrViaSock5Proxy(dialer, addr, proxyUrl)
26
}
27
28
return DialAddrViaHttpProxy(dialer, addr, proxyUrl, !sessionArgs.RejectUnauthorized)
29
}
30
31
dialConn, err := dialer.Dial("tcp", addr)
32
if err != nil {
33
return nil, err
34
}
35
36
tcpConn, ok := dialConn.(*net.TCPConn)
37
if ok {
38
if connectArgs.KeepAlive {
39
tcpConn.SetKeepAlive(true)
40
}
41
tcpConn.SetNoDelay(connectArgs.IsWebsocket)
42
tcpConn.SetLinger(0)
43
}
44
45
return dialConn, nil
46
}
47
48