本文整理汇总了Golang中golang.org/x/net/proxy.Dialer类的典型用法代码示例。如果您正苦于以下问题:Golang Dialer类的具体用法?Golang Dialer怎么用?Golang Dialer使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Dialer类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: IsConnectionOverTor
// IsConnectionOverTor will make a connection to the check.torproject page to see if we're using Tor or not
func (*defaultTorManager) IsConnectionOverTor(d proxy.Dialer) bool {
if d == nil {
d = proxy.Direct
}
c := &http.Client{Transport: &http.Transport{Dial: func(network, addr string) (net.Conn, error) {
return d.Dial(network, addr)
}}}
resp, err := c.Get("https://check.torproject.org/api/ip")
if err != nil {
log.Printf("Got error when trying to check tor: %v", err)
return false
}
content, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Printf("Got error when trying to check tor: %v", err)
return false
}
v := CheckTorResult{}
err = json.Unmarshal(content, &v)
if err != nil {
log.Printf("Got error when trying to check tor: %v", err)
return false
}
return v.IsTor
}
开发者ID:twstrike,项目名称:coyim,代码行数:31,代码来源:tor.go
示例2: dialTimeout
func dialTimeout(network, addr string, dialer proxy.Dialer, t time.Duration) (c net.Conn, err error) {
result := make(chan bool, 1)
go func() {
c, err = dialer.Dial(network, addr)
result <- true
}()
select {
case <-time.After(t):
log.Println("tcp: dial timed out")
return nil, ourNet.ErrTimeout
case <-result:
return
}
}
开发者ID:pixelrust,项目名称:coyim,代码行数:16,代码来源:tcp.go
示例3: DialWithTimeout
// Dial establishes a connection to a Riemann server at addr, on the network
// netwrk, with a timeout of timeout
//
// Known networks are "tcp", "tcp4", "tcp6", "udp", "udp4", and "udp6".
func DialWithTimeout(netwrk, addr string, timeout time.Duration) (c *Client, err error) {
c = new(Client)
var cnet network
switch netwrk {
case "tcp", "tcp4", "tcp6":
cnet = new(tcp)
case "udp", "udp4", "udp6":
cnet = new(udp)
default:
return nil, fmt.Errorf("dial %q: unsupported network %q", netwrk, netwrk)
}
var proxyUrl = os.Getenv("RIEMANN_PROXY")
// Get a proxy Dialer that will create the connection on our
// behalf via the SOCKS5 proxy. Specify the authentication
// and re-create the dialer/transport/client if tor's
// IsolateSOCKSAuth is needed.
var dialer proxy.Dialer
if dialer == nil {
dialer = proxy.Direct
}
if proxyUrl != "" {
u, err := url.Parse(proxyUrl)
if err != nil {
fmt.Errorf("Failed to obtain proxy dialer: %v\n", err)
}
if dialer, err = proxy.FromURL(u, dialer); err != nil {
fmt.Errorf("Failed to parse " + proxyUrl + " as a proxy: " + err.Error())
return nil, err
}
}
c.net = cnet
c.timeout = timeout
c.connection, err = dialer.Dial(netwrk, addr)
if err != nil {
return nil, err
}
return c, nil
}
开发者ID:ktf,项目名称:raidman,代码行数:48,代码来源:raidman.go
示例4: dialServer
func (c *client) dialServer(server string, useRandomIdentity bool) (*transport.Conn, error) {
identity := &c.identity
identityPublic := &c.identityPublic
if useRandomIdentity {
var randomIdentity [32]byte
c.randBytes(randomIdentity[:])
var randomIdentityPublic [32]byte
curve25519.ScalarBaseMult(&randomIdentityPublic, &randomIdentity)
identity = &randomIdentity
identityPublic = &randomIdentityPublic
}
serverIdentity, host, err := parseServer(server, c.dev)
if err != nil {
return nil, err
}
var tor proxy.Dialer
if c.dev {
tor = proxy.Direct
} else {
tor = c.torDialer()
}
rawConn, err := tor.Dial("tcp", host)
if err != nil {
return nil, err
}
// Sometimes Tor holds the connection open but we never receive
// anything so we add a 60 second deadline.
rawConn.SetDeadline(time.Now().Add(60 * time.Second))
conn := transport.NewClient(rawConn, identity, identityPublic, serverIdentity)
if err := conn.Handshake(); err != nil {
return nil, err
}
return conn, nil
}
开发者ID:carriercomm,项目名称:pond,代码行数:37,代码来源:network.go
示例5: serveSocks5Client
func serveSocks5Client(conn net.Conn, forward proxy.Dialer) {
defer conn.Close()
buff := make([]byte, 262)
reply := []byte{0x05, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22}
if _, err := io.ReadFull(conn, buff[:2]); err != nil {
return
}
if buff[0] != socks5Version {
reply[1] = socks5AuthNoAccept
conn.Write(reply[:2])
return
}
numMethod := buff[1]
if _, err := io.ReadFull(conn, buff[:numMethod]); err != nil {
return
}
reply[1] = socks5AuthNone
if _, err := conn.Write(reply[:2]); err != nil {
return
}
if _, err := io.ReadFull(conn, buff[:4]); err != nil {
return
}
if buff[1] != socks5Connect {
reply[1] = socks5CommandNotSupported
conn.Write(reply)
return
}
addressType := buff[3]
addressLen := 0
switch addressType {
case socks5IP4:
addressLen = net.IPv4len
case socks5IP6:
addressLen = net.IPv6len
case socks5Domain:
if _, err := io.ReadFull(conn, buff[:1]); err != nil {
return
}
addressLen = int(buff[0])
default:
reply[1] = socks5AddressTypeNotSupported
conn.Write(reply)
return
}
host := make([]byte, addressLen)
if _, err := io.ReadFull(conn, host); err != nil {
return
}
if _, err := io.ReadFull(conn, buff[:2]); err != nil {
return
}
hostStr := ""
switch addressType {
case socks5IP4, socks5IP6:
ip := net.IP(host)
hostStr = ip.String()
case socks5Domain:
hostStr = string(host)
}
port := uint16(buff[0])<<8 | uint16(buff[1])
if port < 1 || port > 0xffff {
reply[1] = socks5HostUnreachable
conn.Write(reply)
return
}
portStr := strconv.Itoa(int(port))
hostStr = net.JoinHostPort(hostStr, portStr)
dest, err := forward.Dial("tcp", hostStr)
if err != nil {
reply[1] = socks5ConnectionRefused
conn.Write(reply)
return
}
defer dest.Close()
reply[1] = socks5Success
if _, err := conn.Write(reply); err != nil {
return
}
go func() {
defer conn.Close()
defer dest.Close()
io.Copy(conn, dest)
}()
io.Copy(dest, conn)
}
开发者ID:azber,项目名称:Azber-go,代码行数:92,代码来源:socks5_client.go
示例6: handleConnection
func handleConnection(conn *ss.Conn) {
var host string
connCnt++ // this maybe not accurate, but should be enough
if connCnt-nextLogConnCnt >= 0 {
// XXX There's no xadd in the atomic package, so it's difficult to log
// the message only once with low cost. Also note nextLogConnCnt maybe
// added twice for current peak connection number level.
log.Printf("Number of client connections reaches %d\n", nextLogConnCnt)
nextLogConnCnt += logCntDelta
}
// function arguments are always evaluated, so surround debug statement
// with if statement
if debug {
debug.Printf("new client %s->%s\n", conn.RemoteAddr().String(), conn.LocalAddr())
}
closed := false
defer func() {
if debug {
debug.Printf("closed pipe %s<->%s\n", conn.RemoteAddr(), host)
}
connCnt--
if !closed {
conn.Close()
}
}()
host, extra, err := getRequest(conn)
if err != nil {
log.Println("error getting request", conn.RemoteAddr(), conn.LocalAddr(), err)
return
}
debug.Println("connecting", host)
var dialer proxy.Dialer
dialer = proxy.FromEnvironment()
remote, err := dialer.Dial("tcp", host)
if err != nil {
if ne, ok := err.(*net.OpError); ok && (ne.Err == syscall.EMFILE || ne.Err == syscall.ENFILE) {
// log too many open file error
// EMFILE is process reaches open file limits, ENFILE is system limit
log.Println("dial error:", err)
} else {
log.Println("error connecting to:", host, err)
}
return
}
defer func() {
if !closed {
remote.Close()
}
}()
// write extra bytes read from
if extra != nil {
// debug.Println("getRequest read extra data, writing to remote, len", len(extra))
if _, err = remote.Write(extra); err != nil {
debug.Println("write request extra error:", err)
return
}
}
if debug {
debug.Printf("piping %s<->%s", conn.RemoteAddr(), host)
}
go ss.PipeThenClose(conn, remote)
ss.PipeThenClose(remote, conn)
closed = true
return
}
开发者ID:cnhongwei,项目名称:shadowsocks-go,代码行数:68,代码来源:server.go
示例7: clientHandshake
func (c *ricochetConn) clientHandshake(d proxy.Dialer, dialHostname string) {
var err error
log := c.endpoint.log
defer func() {
if c.conn != nil {
c.conn.Close()
}
c.endpoint.onConnectionClosed(c)
}()
// Open the connection to the remote HS.
var conn net.Conn
conn, err = d.Dial("tcp", dialHostname)
if err != nil {
log.Printf("client: Failed to connect to '%v' : %v", dialHostname, err)
return
}
c.Lock()
if c.shouldClose {
conn.Close()
c.Unlock()
return
}
c.conn = conn
c.Unlock()
// Arm the handshake timeout.
if err := c.conn.SetDeadline(time.Now().Add(handshakeTimeout)); err != nil {
log.Printf("client: Failed to arm handshake timeout: %v", err)
return
}
// Send prefix | nVersions | version.
hsPrefix := append(handshakePrefix, 1) // Sending one version...
hsPrefix = append(hsPrefix, protocolVersion) // ... this one.
if _, err := c.conn.Write(hsPrefix); err != nil {
log.Printf("client: Failed to send prefix | nVersions | version: %v", err)
return
}
// Read the negotiated version.
var respVer [1]byte
if _, err := io.ReadFull(c.conn, respVer[:]); err != nil {
log.Printf("client: Failed to read negotiated version: %v", err)
return
}
if respVer[0] != protocolVersion {
log.Printf("client: Server speaks no compatible versions, closing")
return
}
// Disarm the handshake timeout.
if err := c.conn.SetDeadline(time.Time{}); err != nil {
log.Printf("client: Failed to disarm handshake timeout: %v", err)
return
}
// Allocate the control channel and start the auth timeout.
c.chanMap[controlChanID] = newControlChan(c, controlChanID)
fuck := func() { _ = c.conn.Close() }
c.authTimer = time.AfterFunc(authenticationTimeout, fuck)
// Send the OpenChannel(AuthHS) request before doing anything else. The
// rest of the process is driven by receiving responses from the server,
// or 'fuck()'.
if err := newClientAuthHSChan(c); err != nil {
log.Printf("client: Failed to start authentication: %v", err)
return
}
c.incomingPacketWorker()
}
开发者ID:Yawning,项目名称:ricochet,代码行数:72,代码来源:connection.go
示例8: main
func main() {
flag.Parse()
oldState, err := terminal.MakeRaw(0)
if err != nil {
panic(err.Error())
}
defer terminal.Restore(0, oldState)
term := terminal.NewTerminal(os.Stdin, "")
updateTerminalSize(term)
term.SetBracketedPasteMode(true)
defer term.SetBracketedPasteMode(false)
resizeChan := make(chan os.Signal)
go func() {
for _ = range resizeChan {
updateTerminalSize(term)
}
}()
signal.Notify(resizeChan, syscall.SIGWINCH)
if len(*configFile) == 0 {
homeDir := os.Getenv("HOME")
if len(homeDir) == 0 {
alert(term, "$HOME not set. Please either export $HOME or use the -config-file option.\n")
return
}
persistentDir := filepath.Join(homeDir, "Persistent")
if stat, err := os.Lstat(persistentDir); err == nil && stat.IsDir() {
// Looks like Tails.
homeDir = persistentDir
}
*configFile = filepath.Join(homeDir, ".xmpp-client")
}
config, err := ParseConfig(*configFile)
if err != nil {
alert(term, "Failed to parse config file: "+err.Error())
config = new(Config)
if !enroll(config, term) {
return
}
config.filename = *configFile
config.Save()
}
password := config.Password
if len(password) == 0 {
if password, err = term.ReadPassword(fmt.Sprintf("Password for %s (will not be saved to disk): ", config.Account)); err != nil {
alert(term, "Failed to read password: "+err.Error())
return
}
}
term.SetPrompt("> ")
parts := strings.SplitN(config.Account, "@", 2)
if len(parts) != 2 {
alert(term, "invalid username (want [email protected]): "+config.Account)
return
}
user := parts[0]
domain := parts[1]
var addr string
addrTrusted := false
if len(config.Server) > 0 && config.Port > 0 {
addr = fmt.Sprintf("%s:%d", config.Server, config.Port)
addrTrusted = true
} else {
if len(config.Proxies) > 0 {
alert(term, "Cannot connect via a proxy without Server and Port being set in the config file as an SRV lookup would leak information.")
return
}
host, port, err := xmpp.Resolve(domain)
if err != nil {
alert(term, "Failed to resolve XMPP server: "+err.Error())
return
}
addr = fmt.Sprintf("%s:%d", host, port)
}
var dialer proxy.Dialer
for i := len(config.Proxies) - 1; i >= 0; i-- {
u, err := url.Parse(config.Proxies[i])
if err != nil {
alert(term, "Failed to parse "+config.Proxies[i]+" as a URL: "+err.Error())
return
}
if dialer == nil {
dialer = proxy.Direct
}
if dialer, err = proxy.FromURL(u, dialer); err != nil {
alert(term, "Failed to parse "+config.Proxies[i]+" as a proxy: "+err.Error())
return
}
}
var certSHA256 []byte
if len(config.ServerCertificateSHA256) > 0 {
//.........这里部分代码省略.........
开发者ID:rmoore,项目名称:xmpp-client,代码行数:101,代码来源:ui.go
示例9: proxyNetDial
func proxyNetDial(dialer proxy.Dialer, network, address string) (net.Conn, error) {
if dialer != nil {
return dialer.Dial(network, address)
}
return net.Dial(network, address)
}
开发者ID:peernode,项目名称:Taipei-Torrent,代码行数:6,代码来源:proxy.go
注:本文中的golang.org/x/net/proxy.Dialer类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论