shadowsocks-go 轉發 golang

Dende · · 1936 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

源碼(可編譯直接用)

https://github.com/yuanrenguang715/shadowsocks-forward

不說廢話  上代碼

這裏用到只是轉發 ,如需要轉換成代理,需要監聽本地tcp進行代理,

這裏用到只是轉發   ,如需要轉換成代理,需要監聽本地tcp進行代理,

package main

import (
    "io"
    "log"
    "net"
    "net/http"
    "net/url"
    "strconv"
    "time"

    ss "github.com/shadowsocks/shadowsocks-go/shadowsocks"
)

var config struct {
    server   string
    port     int
    password string
    method   string
}

func httpSocks5(uri string) *http.Client {
    parsedURL, err := url.Parse(uri)
      if err != nil {
        log.Fatal(err)
    }
    host, _, err := net.SplitHostPort(parsedURL.Host)
    if err != nil {
        if parsedURL.Scheme == "https" {
            host = net.JoinHostPort(parsedURL.Host, "443")
        } else {
            host = net.JoinHostPort(parsedURL.Host, "80")
        }
    } else {
        host = parsedURL.Host
    }
    rawAddr, err := ss.RawAddr(host)
      if err != nil {
        log.Fatal(err)
    }
    serverAddr := net.JoinHostPort(config.server, strconv.Itoa(config.port))
    cipher, err := ss.NewCipher(config.method, config.password)
      if err != nil {
        log.Fatal(err)
    }
    dailFunc := func(network, addr string) (net.Conn, error) {
        return ss.DialWithRawAddr(rawAddr, serverAddr, cipher.Copy())
    }
    tr := &http.Transport{
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }
    tr.Dial = dailFunc
    return &http.Client{Transport: tr}
}
func main() {
    config.method = "aes-256-cfb" // method
    config.password = "服務端密碼"
    config.port = 8989 // your port
    config.server = "服務端ip"
    var uri string = "https://www.google.com.hk/?gws_rd=ssl"  //轉發的請求
    client := httpSocks5(uri)
    if err != nil {
        log.Fatal(err)
    }
    resp := client.Get(uri)
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(body))
}


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1936 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传