API接入
package main
import (
"context"
"fmt"
"golang.org/x/net/proxy"
"io/ioutil"
"log"
"net"
"net/http"
"net/url"
"strings"
"sync"
"time"
)
var targetUrl = "http://ip234.in/ip.json"
//http代理
func httpProxy(proxyUrl, user, pass string) {
defer func() {
if err := recover(); err != nil {
log.Printf("http proxy panic:%s",err)
}
}()
urli := url.URL{}
if !strings.Contains(proxyUrl, "http") {
proxyUrl = fmt.Sprintf("http://%s", proxyUrl)
}
urlProxy, _ := urli.Parse(proxyUrl)
if user != "" && pass != "" {
urlProxy.User = url.UserPassword(user, pass)
}
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(urlProxy),
},
}
rqt, err := http.NewRequest("GET", targetUrl, nil)
if err != nil {
panic(err)
return
}
response, err := client.Do(rqt)
if err != nil {
panic(err)
return
}
defer response.Body.Close()
body, _ := ioutil.ReadAll(response.Body)
log.Printf("%s http success %s,%s",proxyUrl,response.Status, string(body))
return
}
//socks5代理
func Socks5Proxy(proxyUrl, user, pass string) {
defer func() {
if err := recover(); err != nil {
log.Printf("socks5 proxy panic:%s",err)
}
}()
var userAuth proxy.Auth
if user != "" && pass != "" {
userAuth.User = user
userAuth.Password = pass
}
dialer, err := proxy.SOCKS5("tcp", proxyUrl, &userAuth, proxy.Direct)
if err != nil {
panic(err)
}
httpClient := &http.Client{
Transport: &http.Transport{
DialContext: func(ctx context.Context, network, addr string) (conn net.Conn, err error) {
return dialer.Dial(network, addr)
},
},
Timeout: time.Second * 10,
}
//请求网络
if resp, err := httpClient.Get(targetUrl); err != nil {
panic(err)
} else {
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
log.Printf("%s socks5 success %s",proxyUrl,string(body))
}
}
func testHttp() {
# 提取API
url := "http://list.rola.info:8088/user_get_ip_list?token=TOKEN&qty=10&country=&state=&city=&time=5&format=txt&protocol=http&filter=1"
resp,err := http.Get(url)
if err != nil {
log.Printf("提取ip失败:%s", err)
return
}
defer resp.Body.Close()
ipsBuffer,_ := ioutil.ReadAll(resp.Body)
wg := sync.WaitGroup{}
for _,ip := range strings.Split(string(ipsBuffer),"\r\n") {
go func() {
wg.Add(1)
httpProxy(ip,"","")
wg.Done()
}()
}
wg.Wait()
}
func testSocks5() {
# 提取API
url := "http://list.rola.info:8088/user_get_ip_list?token=TOKEN&qty=10&country=&state=&city=&time=5&format=txt&protocol=socks5&filter=1"
resp,err := http.Get(url)
if err != nil {
log.Printf("提取ip失败:%s", err)
return
}
defer resp.Body.Close()
ipsBuffer,_ := ioutil.ReadAll(resp.Body)
wg := sync.WaitGroup{}
for _,ip := range strings.Split(string(ipsBuffer),"\r\n") {
go func(ip string) {
wg.Add(1)
Socks5Proxy(ip,"","")
wg.Done()
}(ip)
}
wg.Wait()
}
func main() {
// testHttp()
testSocks5()
}
账密接入
package main
import (
"context"
"fmt"
"golang.org/x/net/proxy"
"io/ioutil"
"log"
"math/rand"
"net"
"net/http"
"net/url"
"strings"
"sync"
"time"
)
var targetUrl = "http://ip234.in/ip.json"
//http代理
func httpProxy(proxyUrl, user, pass string) {
defer func() {
if err := recover(); err != nil {
log.Printf("http proxy panic:%s",err)
}
}()
urli := url.URL{}
if !strings.Contains(proxyUrl, "http") {
proxyUrl = fmt.Sprintf("http://%s", proxyUrl)
}
urlProxy, _ := urli.Parse(proxyUrl)
if user != "" && pass != "" {
urlProxy.User = url.UserPassword(user, pass)
}
client := &http.Client{
Transport: &http.Transport{
Proxy: http.ProxyURL(urlProxy),
},
}
rqt, err := http.NewRequest("GET", targetUrl, nil)
if err != nil {
panic(err)
return
}
response, err := client.Do(rqt)
if err != nil {
panic(err)
return
}
defer response.Body.Close()
body, _ := ioutil.ReadAll(response.Body)
log.Printf("%s http success %s,%s",proxyUrl,response.Status, string(body))
return
}
//socks5代理
func Socks5Proxy(proxyUrl, user, pass string) {
defer func() {
if err := recover(); err != nil {
log.Printf("socks5 proxy panic:%s",err)
}
}()
var userAuth proxy.Auth
if user != "" && pass != "" {
userAuth.User = user
userAuth.Password = pass
}
dialer, err := proxy.SOCKS5("tcp", proxyUrl, &userAuth, proxy.Direct)
if err != nil {
panic(err)
}
httpClient := &http.Client{
Transport: &http.Transport{
DialContext: func(ctx context.Context, network, addr string) (conn net.Conn, err error) {
return dialer.Dial(network, addr)
},
},
Timeout: time.Second * 10,
}
//请求网络
if resp, err := httpClient.Get(targetUrl); err != nil {
panic(err)
} else {
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
log.Printf("%s socks5 success %s",proxyUrl,string(body))
}
}
func testHttp() {
# 代理账号
username := ""
# 代理密码
password := ""
# 国家代码
country := ""
# ROLA分配的网关
gate := "gate.rola.info:1000"
wg := sync.WaitGroup{}
times := 0
for {
if times >= 10 {
break
}
# 构造用户名, USERNANE-country-COUNTRYCODE-sid-SESSION
proxyUser := fmt.Sprintf("%s-country-%s-sid-%d",username,country,rand.Int() % 100000)
go func() {
wg.Add(1)
httpProxy(gate,proxyUser, password)
wg.Done()
}()
times++
}
wg.Wait()
}
func testSocks5() {
# 代理账号
username := ""
# 代理密码
password := ""
# 国家代码
country := ""
# ROLA分配的网关
gate := "gate.rola.info:2000"
wg := sync.WaitGroup{}
times := 0
for {
if times >= 10 {
break
}
# 构造用户名, USERNANE-country-COUNTRYCODE-sid-SESSION
proxyUser := fmt.Sprintf("%s-country-%s-sid-%d",username,country,rand.Int() % 100000)
go func() {
wg.Add(1)
Socks5Proxy(gate,proxyUser, password)
wg.Done()
}()
times++
}
wg.Wait()
}
func main() {
// testHttp()
testSocks5()
}