Dev's Logging

Welcome to my blog !


通过 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 ...

Essential Go Interview Questions

Published at August 16, 2019 ·  1 min read

Golang 基础的面试题,答案结合问题详细的解释 Golang 的技巧 Essential Go Interview Questions...

Go Defer Simplified with Practical Visuals

Published at August 15, 2019 ·  1 min read

详细的讲解了 defer 在 Golang 中的实现原理及各种特殊情况,当 defer 时,其传入的参数及被注册(运行),到程序结尾再执行 defer 中的代码。defer 按照 stack 的先进后出的原则,当有多个 defer 时,最开始的 defer 最后执行 Go Defer Simplified with Practical Visuals...

Ecosia Financial Report

Published at July 31, 2019 ·  1 min read

ecosia 在五月份达到了将近 100 m pv / month,其月收入为 1347484 欧元,约合人民币为 1 千万元,营销费用为 219329 欧元,约合人民币 168万元,运营费用总计 290382 欧元,约合人民币 223 万元。其中包括薪水(39人,包括自由职业者)107821 欧元,约合人民币 83万元,雇佣税费(健康保险、社会保障、雇佣及公司税费)70694 欧元,约合 54 万元,其他税收 60000 欧元,约合人民币 46 万元,服务器域名费用 31032 欧元,约合人民币 23 万元,办公室 5287 欧元,约合人民币 4 万元,其他费用 9664 欧元,约合人民币 74179 元,差旅费用 5884 欧元,约合人民币 4.5 万元。 主要使用国家为法、德、英、美、比利时五个国家,占据将近 70% 的流量,1 亿的流量,月营收 1 千万,平均一个 pv 价值 0.1 人民币,223 百万的服务器费用支出,平均每次搜索的费用是 0.0223 人民币。 Ecosia Financial Report...

React Native: Why and How to Build Your Native Code in Go

Published at July 20, 2019 ·  1 min read

利用 gomobile 将 Golang 代码分别部署到 iOS 和 Android,同时借助 React Native 编写界面的便捷性,在 RN 中调用 Golang 函数,可以实现底层同样的一套代码同时在 iOS 和 Android 运行,UI 层也可以实现复用同样一套代码 React Native: Why and How to Build Your Native Code in Go...

Struct vs. Class In Swift Explained – LearnAppMaking

Published at June 25, 2019 ·  1 min read

swift 同时有 struct 和 class 两种类型,在 Python 中只有 class,在 Golang 中只有 struct ,而swift 似乎是把两种语言一种类似的类型均融合了。相同之处是,struct 和 class 均可以定义属性和方法,均有 init 以进行状态的初始化。不同的是,class 可以继承,也可以定义 deinitialized 实现在 class 销毁时调用某个函数 Struct vs. Class In Swift Explained – LearnAppMaking...

How to Access a Remote Server Using a Jump Host

Published at June 19, 2019 ·  1 min read

通过配置 ssh config ,实现在本地快捷通过跳板机登陆目标服务器,与配置 ssh proxy 较为类似 How to Access a Remote Server Using a Jump Host...

Linux Signal及Golang中的信号处理

Published at June 12, 2019 ·  1 min read

Linux 和 Golang 中的信号处理问题,在 Linux 中,则是操作系统中用来进程间通讯的一种方式,一个信号就是一个异步的通知,发送给某个进程,或者同进程的某个线程,当信号发送给某个进程时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。几个常见命令为,SIGINT 导致进程结束,SIGTSTP 导致进程挂起,SIGQUIT 导致进程结束 和 Dump core。在 Golang 中,则是通过 os/signal 和 syscall 捕捉到相应的信号量 Linux Signal及Golang中的信号处理...

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 closure closures cluster concurrency config consumer container context 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 errgroup escaping extra fabric2 facebook-pixel financial-report flask flutter forward-proxy freelance frontend frp garbage-collector gc gcp generator gesture get gil git golang goroutine graphql ha handbook haproxy hash hash-slot hashring hashtable hpa http http-auth http-proxy http_proxy https index init 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 mobile model mq myisam mysql namespace nat netflix network-extension nginx nodejs nomad nosql npm oodesign openssl optimization orm pandas parallelism paramiko parkinglot patroni permission pg pipeline pixelme post postgresql postresql prefetch_related prerender private-key process proxy proxycommand put pvm python queue rabbitmq rbac react-native reactive reactjs rebase redis redis-cluster replication resource rest restfulapi retargeting retry revenue reverse-proxy rocketmq rsa rxswift saas scaffold 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 swiftui switch syscall system-design systemctl tcp tcp-proxy thread tmpreaper token traefik trustkit tunning type typeform udp userdefaults variable vc vpn vuejs weak web web-development where widget yarn zset 削峰 宽索引 异步 看源码学-golang 窄索引 解耦 跨域 跳板机


Archives

2019 (156)