文章目录
A、部署tinyproxy
软件安装
apt install tinyproxy
配置软件
cat > /etc/tinyproxy/tinyproxy.conf << EOF
User tinyproxy
Group tinyproxy
Port 4080
#Listen 192.168.0.1 监听端口
#Bind 192.168.0.1 流量出口
BindSame yes
Timeout 6000
DefaultErrorFile "/usr/share/tinyproxy/default.html"
StatFile "/usr/share/tinyproxy/stats.html"
LogFile "/var/log/tinyproxy/tinyproxy.log"
LogLevel Info
PidFile "/run/tinyproxy/tinyproxy.pid"
MaxClients 200
MinSpareServers 5
MaxSpareServers 20
StartServers 10
MaxRequestsPerChild 0
Allow 0.0.0.0/0
ViaProxyName "tinyproxy"
ConnectPort 443
ConnectPort 563
EOF
重启tinyproxy服务
systemctl stop firewalld
systemctl restart tinyproxy
systemctl enable tinyproxy
日志查看
tailf /var/log/tinyproxy/tinyproxy.log
B、下载运行go写的http代理程序(监听TCP 4080端口)
B1、源码文件(这是拿来主义,学习使用,非自己所写)(编译 命令:go build http-proxy.go )
[root@Python3-study-LT zhangjin]# cat http-proxy.go
package main
import (
"bytes"
"fmt"
"io"
"log"
"net"
"net/url"
"strings"
)
func main() {
// tcp连接,监听4080端口
l, err := net.Listen("tcp", ":4080")
if err != nil {
log.Panic(err)
}
// 死循环,每当遇到连接时,调用handle
for {
client, err := l.Accept()
if err != nil {
log.Panic(err)
}
go handle(client)
}
}
func handle(client net.Conn) {
if client == nil {
return
}
defer client.Close()
log.Printf("remote addr: %v\n", client.RemoteAddr())
// 用来存放客户端数据的缓冲区
var b [1024]byte
//从客户端获取数据
n, err := client.Read(b[:])
if err != nil {
log.Println(err)
return
}
var method, URL, address string
// 从客户端数据读入method,url
fmt.Sscanf(string(b[:bytes.IndexByte(b[:], '\n')]), "%s%s", &method, &URL)
hostPortURL, err := url.Parse(URL)
if err != nil {
log.Println(err)
return
}
// 如果方法是CONNECT,则为https协议
if method == "CONNECT" {
address = hostPortURL.Scheme + ":" + hostPortURL.Opaque
} else { //否则为http协议
address = hostPortURL.Host
// 如果host不带端口,则默认为80
if strings.Index(hostPortURL.Host, ":") == -1 { //host不带端口, 默认80
address = hostPortURL.Host + ":80"
}
}
//获得了请求的host和port,向服务端发起tcp连接
server, err := net.Dial("tcp", address)
if err != nil {
log.Println(err)
return
}
//如果使用https协议,需先向客户端表示连接建立完毕
if method == "CONNECT" {
fmt.Fprint(client, "HTTP/1.1 200 Connection established\r\n\r\n")
} else { //如果使用http协议,需将从客户端得到的http请求转发给服务端
server.Write(b[:n])
}
//将客户端的请求转发至服务端,将服务端的响应转发给客户端。io.Copy为阻塞函数,文件描述符不关闭就不停止
go io.Copy(server, client)
io.Copy(client, server)
}
B2、已经编译好的可执行文件
wget https://qiniu.wsfnk.com/bokefiles/http-proxy
C、Linux 设置wget代理
直接修改/etc/wgetrc 或者直接往~/.wgetrc(自行创建此文件)添加如下内容:
https_proxy = http://xxxx:4080/
http_proxy = http://xxxx:4080/
use_proxy = on
注意:如果不想使用代理了就将~/.wgetrc中的最后一行use_proxy = on改为 use_proxy = off即可.
D、Linux 设置apt代理
为apt配置http和https代理,(/etc/apt/apt.conf.d/10proxy默认没有,需要创建)
cat > /etc/apt/apt.conf.d/10proxy << EOF
Acquire::http::Proxy "http://xxxx:4080";
Acquire::https::Proxy "http://xxxx:4080/";
EOF
直接使用即可
apt update
E、Linux 设置yum代理
echo "proxy=http://xxxx:4080" >> /etc/yum.conf
F、Linux 直接全局将http https都设置为代理(不想用了只有重启才行了)
cat >> /etc/profile << EOF
export http_proxy=http://xxxx:4080
export https_proxy=http://xxxx:4080
EOF
source /etc/profile
G、curl 测试代理是否生效
curl -x xxxx:4080 baidu.com #前面是代理服务ip及监听端口
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论