#proxy

通过 Golang 学习 http 协议,如何用 Golang 实现 https 代理

Published at August 31, 2019 ·  1 min read

在 http.HandlerFunc 中检查 r.Method 为 Connect 后及将请求交给 handleTunneling,其中关键的是将 http.ResponseWriter 转换为 http.Hijacker 接管连接,并通过两个 goroutine transfer 复制请求。 func handleTunneling(w http.ResponseWriter, r *http.Request) { dst, err := net.DialTimeout("tcp", r.Host, 10*time.Second) if err != nil { http.Error(w, err.Error(), http.StatusServiceUnavailable) return } w.WriteHeader(http.StatusOK) hijacker, ok := w.(http.Hijacker) if !ok { http.Error(w, "Hijacking not supported", http.StatusInternalServerError) return } conn, _, err := hijacker.Hijack() if err != nil { http.Error(w, err.Error(), http.StatusServiceUnavailable) } go transfer(dst, conn) go transfer(conn, dst) } func transfer(dst io....


通过 Golang 学习 http,几行代码实现 http proxy

Published at August 30, 2019 ·  1 min read

这个 Github 作为通过 Golang 学习 http 中的其中一篇教程,非常简单明了。 其中关于 http proxy 代理用户校验部分代码如下,r.Header.Get("Proxy-Authorization") 从 request 的 header 中获取 ‘Proxy-Authorization’ 并将其通过 base64 解码获取用户名和密码进行校验。 若失败则直接将 http status code 通过 w.WriteHeader 返回给用户端。 func basicAuth(w http.ResponseWriter, r *http.Request, users []User) bool { var auth = r.Header.Get("Proxy-Authorization") if ms := strings.Split(auth, " "); len(ms) == 2 && ms[0] == "Basic" { // check user:password up, err := base64.StdEncoding.DecodeString(ms[1]) if err == nil { if ms := strings....


在长城宽带等某些垃圾宽带的网络环境下,通过 ssh 连接某些服务器经常会出现 timeout 的解决方法

Published at August 30, 2019 ·  1 min read

可在 .ssh/config 中配置以下命令,通过 ssh q 连接服务器。 HostName 为目标服务器 ip, -X 5 为 socks5 代理, localhost:6153 为 socks5 代理地址。 Host q HostName 47.240.33.24 User root ProxyCommand nc -X 5 -x localhost:6153 %h %p 与此方法类似的是,可以配置通过跳板机,在客户端直接访问内网服务器。jumper server 为跳板机,在正常情况下,处于内网环境的 target 服务器无法直接从客户端访问,需经过跳板机访问,此时,则可通过如下配置,在 Terminal 中运行 ssh target 访问跳板机后面的目标服务器。 Host target HostName 172.16.6.2 Port 35000 User root IdentityFile /Users/tonywang/target.key ProxyCommand ssh -q -W %h:%p jumperserver Host jumperserver HostName 192.168.1.2 Port 35000 IdentityFile /Users/tonywang/js.key User root ...


How to configure docker to use proxy

Published at May 30, 2019 ·  1 min read

如何为 docker 设置使用 proxy,除了设置环境变量外,还需要在 /etc/systemd/system/docker.service.d 中创建 http-proxy.conf 的文件,并在其中添加代理,完成后需要通过 systemctl 重启 docker 服务。 How to configure docker to use proxy...


What Is Layer 4 Load Balancing? | NGINX Load Balancer

Published at April 26, 2019 ·  1 min read

layer 4 和 layer 7 负载均衡的比较。 layer 4 主要是在 tcp/ip 层根据请求 ip 等进行请求的负载均衡, 而 layer 7 则是在 http 层,偏向应用层,可以通过 http header 等信息进行负载均衡,当然性能相比于 layer 4 会低些,资源消耗也会更多。其中 nginx 和 haproxy 两种模式均有,traefik 则只有 layer 7 一种模式 What Is Layer 4 Load Balancing? | NGINX Load Balancer...



关于内网穿透frp程序的分析

Published at February 28, 2019 ·  1 min read

frp 原理的大致讲解,和花生壳之类的常见ddns 不同,这种方式是需要有一个中继服务器将对用户和本地的流量进行双向转发以实现内网穿透,与常见的 ddns 的优势也是非常明显,在复杂的网络环境中,比如多层 nat 中同样也可以使用。 关于内网穿透frp程序的分析...


shadowsocks-go源码阅读

Published at February 27, 2019 ·  1 min read

shadowsocks 源码分析,其中关键的部分 handleconnection 函数中通过 go ss.PipeThenClose(conn, remote) 和 ss.PipeThenClose(remote, conn) 进行 client 和 server 之间的数据交换,在之前的阅读源码中,并没有很好的理解其作用。 shadowsocks-go源码阅读...


Cannot download Docker images behind a proxy

Published at February 26, 2019 ·  1 min read

如何为 docker 配置 proxy,最初以为在 env 中配置即可,结果测试后不知为何不行,按照此方法确实可用。 Cannot download Docker images behind a proxy...



Tags

abcs accept acid activemq affinity algorithm allocation android array async aws b+tree b-tree backoff benchmark best-practices bfs big-o bigquery bind bitcount blog break broker bubble buffer cache cap cert cgroups channel citus class classmethod cluster concurrency config consumer container cookie cors crawler cronjob csrf ctr data-science data-structure database datadog dataflow datascience decorator defer dfs distributed django dns docker double-shipping drf ecosia elastic-search enumerate epoll extra facebook-pixel financial-report flask flutter forward-proxy freelance frp garbage-collector gc gcp generator get gil git golang goroutine graphql ha handbook haproxy hash hash-slot hashring hashtable hpa http http-auth http-proxy http_proxy https index innodb instagram intergration interview ios javascript jinja2 jobboard jwt k8s kafka kibana kqueue label lambda layer4 layer7 lean levels.io linked-list linux list listen loadbalancer logs long-tail lru marketing master matplotlib memory merge metaclass metaprogramming metrics metrics-server microservices mitm model mq myisam mysql namespace nat netflix network-extension nginx nodejs nomad nosql npm oodesign openssl optimization orm pandas parallelism parkinglot patroni permission pg pipeline pixelme post postgresql postresql prefetch_related prerender process proxy proxycommand put pvm python queue rabbitmq rbac react-native rebase redis redis-cluster replication resource rest restfulapi retargeting retry revenue reverse-proxy rocketmq saas scaleable search-engine security select seo serverless service session set shadosocks shadowsocks shard sharding shell shopify sigint signal sigterm slack slave slow-query sniper sns socket socks5 source-code spa sql sqlalchemy sqs ssh ssl ssl-pinning stack startup state stateful stateless staticmethod string struct swift switch syscall system-design systemctl tcp tcp-proxy thread tmpreaper token traefik trustkit tunning type typeform udp variable vc vpn vuejs web web-development where yarn zset 削峰 宽索引 异步 窄索引 解耦 跨域 跳板机


Archives

2019 (137)
0001 (1)