ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用Go语言编写Socks5代理自动获取程序

2020-12-27 04:32:06  阅读:257  来源: 互联网

标签:string err ip whitelist Add Socks5 query Go 编写


使用Go语言编写Socks5代理自动获取程序

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
    "time"
)

func main() {
    aLine := getone()
    for _, ipaddrport := range aLine {
        fmt.Println(ipaddrport)
    }
}

//填写Token密钥
var token = ""

func getone() []string {
    sUrl := "http://list.rola-ip.site:8088/user_get_ip_list"
    query := url.Values{}
    query.Add("token", token)
    query.Add("qty", "100")    //每次获取IP数量
    query.Add("country", "us") //国家
    query.Add("time", "5")
    query.Add("format", "json")     //返回格式
    query.Add("protocol", "socks5") //筛选格式
    query.Add("filter", "1")        //是否去重
    statusCode, apiResJson := HttpRequestJson("GET", sUrl, query, nil)
    if apiResJson.Code == 101 {
        fmt.Println("GET_IP_LIST", statusCode, apiResJson.Code, apiResJson.Msg)
        aMsg := strings.SplitN(string(apiResJson.Msg), " ", 2)
        ip := aMsg[0]
        //msg := aMsg[1]
        del_whitelist_by_remark("golang")
        user_add_whitelist(ip, "golang")
        time.Sleep(5 * time.Second)
        return getone()
    }
    aRows := apiResJson.Data.([]interface{})
    aRet := []string{}
    for _, _mRow := range aRows {
        mRow := _mRow.(string)
        aRet = append(aRet, mRow)
    }
    return aRet
}

func del_whitelist_by_remark(remark string) {
    aRows := user_get_whitelist()
    for _, _mRow := range aRows {
        mRow := _mRow.(map[string]interface{})
        //fmt.Println(mRow)
        sRemark := mRow["remark"].(string)
        sIp := mRow["ip"].(string)
        if sRemark == remark {
            user_del_whitelist(sIp)
        }
    }
}

func user_get_whitelist() []interface{} {
    //查看白名单
    sUrl := "http://admin.rola-ip.co/user_get_whitelist"
    query := url.Values{}
    query.Add("token", token)
    _, jsonResponse := HttpRequestJson("GET", sUrl, query, nil)
    aRows := jsonResponse.Data.([]interface{})
    return aRows
}

func user_add_whitelist(ip string, remark string) {
    //添加白名单
    sUrl := "http://admin.rola-ip.co/user_add_whitelist"
    query := url.Values{}
    query.Add("token", token)
    query.Add("ip", ip)
    query.Add("remark", remark)
    statusCode, jsonResponse := HttpRequestJson("GET", sUrl, query, nil)
    fmt.Println("user_add_whitelist", statusCode, jsonResponse.Code, jsonResponse.Data, jsonResponse.Msg)
}

func user_del_whitelist(ip string) {
    //删除白名单
    sUrl := "http://admin.rola-ip.co/user_del_whitelist"
    query := url.Values{}
    query.Add("token", token)
    query.Add("ip", ip)
    statusCode, jsonResponse := HttpRequestJson("GET", sUrl, query, nil)
    fmt.Println("user_del_whitelist", statusCode, jsonResponse.Code, jsonResponse.Data, jsonResponse.Msg)
}

/*
HTTP处理用函数
*/
type JsonRequest struct {
}

type JsonResponse struct {
    Code int32       `json:"code"`
    Data interface{} `json:"data"`
    Msg  string      `json:"msg"`
}

func HttpRequestJson(method string, sUrl string, query url.Values, userReqJson interface{}) (int, JsonResponse) {
    //以JSON形式提交并返回JSON
    bReqData, err := json.Marshal(userReqJson)
    if err != nil {
        panic(err)
    }
    statusCode, clientResBody := HttpRequestByte(method, sUrl, query, bytes.NewBuffer(bReqData))
    apiResJson := JsonResponse{}
    err = json.Unmarshal(clientResBody, &apiResJson)
    if err != nil {
        panic(err)
    }
    return statusCode, apiResJson
}

func HttpRequestByte(method string, sUrl string, query url.Values, body io.Reader) (int, []byte) {
    //以byte数组返回结果
    if query != nil {
        sUrl += "?" + query.Encode()
    }
    clientReq, err := http.NewRequest(method, sUrl, body)
    if err != nil {
        panic(err)
    }
    httpClient := &http.Client{}
    clientRes, err := httpClient.Do(clientReq) //向后端服务器提交数据
    if err != nil {
        panic(err)
    }
    clientResBody, err := ioutil.ReadAll(clientRes.Body) //取得后端服务器返回的数据
    clientRes.Body.Close()
    if err != nil {
        panic(err)
    }
    return clientRes.StatusCode, clientResBody
}

 

标签:string,err,ip,whitelist,Add,Socks5,query,Go,编写
来源: https://www.cnblogs.com/xiangxisheng/p/14195360.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有