proxy简单的代理服务器
来源:互联网 发布:音乐在线剪切软件 编辑:程序博客网 时间:2024/05/19 20:21
proxy
proxy,既是代理服务器,在网络环境中,两台机器无法直接相连,如google,facebook等,在国内环境中无法直接访问,为了使用google和facebook,则需要FQ,跨过长城防火墙。在FQ过程中,一个重要的环节,就是proxy了。经常听到有人说通过代理上网,现在就来揭示一下proxy的过程,看完这个后,我猜,以后大家用代理服务器,都会更加的谨慎了,不会再盲目的觉得什么东西好,什么东西不好。
简单的http转发模式
客户端A想要访问目标服务器B,但是由于某些限制,A在通往B的过程中,由于是走的官道,被道路检查小队给逮住了,直接就地正法了。那么A就无法再官道中走到B。现在有一条小路Proxy,A在Proxy的小路上,一路坎坷,东躲西藏的来到了B,这样A和B就联系上了。在这个环节中,Proxy就获取了A和B互相联系的信息。那么问题就来了。如果Proxy是一个邪恶的摆渡者,那么对于A来说,将会是致命的打击。
session劫持
经常听过一些人说,我在输入密码的时候,又没有人看见,怎么我的密码就被别人知道了。有些时候,并不是密码泄露了,而是登录后session被他人获取,这样他人就可以直接使用你的账号登录到系统中,即使他不知道你的密码,是不是很可怕?
proxy示例代码
package mainimport ( "crypto/tls" "flag" "fmt" "io/ioutil" "net/http" "net/http/cookiejar" "strings")var ( Target = flag.String("target", "https://www.asofdate.com", "target server") Protocol = flag.String("protocol", "https", "http or https protocol"))func sliceToString(str []string) string { result := "" for _, val := range str { result += val + " " } result = strings.TrimSpace(result) return result}func NewReq(sr *http.Request) (*http.Request, error) { sr.ParseForm() url := *Target + sr.RequestURI req, _ := http.NewRequest(sr.Method, url, strings.NewReader(sr.Form.Encode())) req.Form = sr.Form req.Header = sr.Header req.TLS = sr.TLS req.TransferEncoding = sr.TransferEncoding req.Trailer = sr.Trailer return req, nil}func main() { flag.Parse() tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, DisableCompression: true, } client := http.Client{Transport: tr} client.Jar, _ = cookiejar.New(nil) client2 := http.Client{} client2.Jar, _ = cookiejar.New(nil) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() protocol := *Protocol switch protocol { case "https": req, err := NewReq(r) if err != nil { fmt.Println(err) return } resp, err := client.Do(req) if err != nil { fmt.Println("do error:", err) return } b, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println("read error:", err) } // it is very import // if didn't set header, // custom brower will complex. for key, val := range resp.Header { w.Header().Set(key, sliceToString(val)) } fmt.Println(client.Jar.Cookies(req.URL), resp.StatusCode, resp.Status) w.Write(b) case "http": req, err := NewReq(r) if err != nil { fmt.Println(err) } resp, err := client2.Do(req) if err != nil { fmt.Println(err) return } b, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) } for key, val := range resp.Header { w.Header().Set(key, sliceToString(val)) } w.Write(b) } }) http.ListenAndServe(":8088", nil)}
当proxy服务启动后,你登录到proxy服务器,看到的内容和proxy转发目标服务器内容一模一样。这样很容易引起误导。以前经常有短消息,告诉你登录某个网站,零取礼物,网站地址就和某某银行,或者某些电商网站地址差一个字母或数字,很误导人。当你登录后,你的cookies就被proxy劫持住,这样,不怀好意的人,就可以利用这个已经连接的用户做一些恶心的事情。设想一下,你在FQ的过程中,输入了某某网站的用户名和密码,就算你加密了,也无济于事。尤其是,当你在很多地方都用一个用户名和密码的时候,是不是更危险。所以,看到诱惑的时候,看清楚,是不是真实有效的,看到好的代理的时候,不要盲目的说好,不知不觉,说不定,你的信息就泄露了。
上述实例代码中,将Target和Protocol改成对应网站的地址,就可以通过proxy访问目标服务器,这段代码记录了用户的cookies信息。一旦登录,将会造成用户信息泄露。当然,也不必过于担心,银行,电商等等线上有几重校验信息,这种低级的代理是不会对他们的系统造成影响。但是对于一些安全防范比较差的系统,就一击必中。
总结
任何事物,都有好,有坏,不盲从,亦不偏激。在合适的场合下,选择合适的方式。
- proxy简单的代理服务器
- 代理服务器 (proxy) 的使用
- Ubuntu安装squid作为内网的代理服务器(Proxy)的简单配制
- java 每小时自动更新的代理服务器(proxy)列表
- proxy-suite ftp代理服务器的配置要点
- 基于Proxy代理服务器的长连接方法
- Python 简单的代理服务器
- 代理服务器(Proxy)完全解析
- 代理服务器 Proxy Server
- 代理服务器proxy server
- 代理服务器 proxy server
- 代理服务器proxy server
- Proxy Server代理服务器
- Proxy Server代理服务器
- 什么是代理服务器(Proxy)
- 代理服务器(proxy server)简介
- Proxy的简单例子
- 简单的HTTP代理服务器实现
- 参数方法(parameter)与非参数方法(nonparameter)
- leetcode No95. Unique Binary Search Trees II
- (读书笔记) 暗时间 (12月11日)
- 从零开始学写HTTP服务器(一)http协议简介
- JZ2440开发板介绍(S3C2440)
- proxy简单的代理服务器
- 集合框架知识点
- Sudoku
- servlet的线程安全问题
- Mysql-索引优化策略
- Halcon 里Hobject 转HImage c++风格的
- linux——浅谈fork与vfork的使用与区别
- 在mac上没有ide的情况下运行c程序
- MacBook-Android Studio快捷键