前言
坦白講,沒想好怎樣的開頭。展轉三年過去了。一切已經變化了許多,一切彷佛從沒有改變。html
前段時間調研了一次代理相關的知識,簡單整理一下分享之。若有錯誤,歡迎指正。nginx
涉及web
Proxy IP應用bash
原理/層級wireshark抓包分析服務器
HTTP head: X-Forwarded-For/ Proxy-Connection/僞造 X-Forwarded-For/網絡
以及常見的識別手段等幾個方面。 curl
應用
Web 代理(proxy)服務器是網絡的中間實體。代理位於客戶端和服務器之間,扮演 「中間人」的角色,在各端點之間來回傳送 HTTP 報文。本章介紹了全部與 HTTP 代理服務器有關的內容,爲代理特性提供的特殊支持,以及使用代理服務器時會遇socket
到的一些棘手的問題。 -引用自《HTTP權威指南》tcp
代理的應用想必你們都很熟悉了,再也不過多的描述,簡單上圖達意。ide
1:FQ
2:ANONYMOUS
3:「提高網速」
哈,這個不說你們也明白,之前在學校宿舍裏的小夥伴打遊戲常常用,各類聯通跨電信等等(OK,不發ad~)
固然這個非普通的HTTP代理能夠作到的。
4:xxxx
(前段時間一個詞語叫作「不可描述」嗯,你們都懂得撒 :-)
固然代理還有不少功能,好比:局域網上網管理,好多年前的「綠@壩計劃」
代理原理
這裏要說明的是WEB代理區別於網關:
代理鏈接的是兩個或多個使用相同協議的應用程序,而網關鏈接的則是 兩個或多個使用不一樣協議的端點。網關扮演的是「協議轉換器」的角色,即便客戶端和服務器使用的是不一樣的協議,客戶端也能夠經過它完成與服務器之間的事務處理。如發郵件時鏈接HTTP協議與SMTP協議。
代理分爲兩種:普通代理與隧道代理
普通代理:
-引用自《HTTP權威指南》
這裏的代理既是服務器,又是客戶端
隧道代理
-引用自《HTTP權威指南》
網關容許某客戶端使用隧道以前,能夠對其進行代理認證
(爲了下降對隧道的濫用,網關應該只爲特定的知名端口,好比 HTTPS 的端口 443)
比較
- 普通代理能夠用來承載 HTTP 流量;
- 隧道代理能夠用來承載任何 TCP 流量,包括 HTTP 和 HTTPS。
這裏分別拿 趕集的登陸頁面,58的主站頁面作簡單的測試。
WireShark出場
捕獲HTTP(以58主站爲例)
捕獲TLS(前身是SSL)(以趕集登陸爲例)
Follow TCP Steam
能夠看出趕集用的是verisign的證書
WireShark非常強大,在各個平臺上都有。網上的範例也很多,抓包的好助手之一。
1. Frame: 物理層-數據幀
2. Ethernet II: 數據鏈路層以太網幀頭部信息
3. Internet Protocol Version IP包 頭部信息
4. Transmission Control Protocol: 傳輸層的數據段頭部信息,如上圖的TCP
5. Hypertext Transfer Protocol: 應用層的信息,如上圖中的HTTP協議
既然說到這裏,那麼就複習一下三次握手吧。
(-。- ~~)
OK,簡單圖示回顧一下, 四次揮手這裏就再也不展開了。
另外 梳理一下
wireshark過濾用法
1:ip.addr/src/dst 用來過濾目標ip及來源ip
2:port
tcp.port eq 2016 or udp.port eq 2016
tcp.dstport == 2016 tcp.srcport == 2016
tcp.port >= 1 and tcp.port <= 2016
3:經常使用協議支持 非
Tcp udp arp icmp http smtp ftp dns msnms ip ssl oicq bootp
4:過濾MAC
。
。
。
等等,還有不少,具體能夠看官方的,很強大的說。
咦,好像跑的偏了,言歸正傳,繼續回到本文的話題繼續談論一下代理IP HTTP Head相關的
層次對比
|
REMOTE_ADDR |
HTTP_X_FORWARDED_FOR |
隱藏身份 |
識別難度 |
未使用代理 |
真實IP |
無 |
無 |
|
透明代理 |
代理IP |
真實IP |
無 |
易 |
匿名代理 |
代理IP |
代理IP |
是 |
易 |
欺詐代理 |
代理IP |
隨機IP |
是 |
易 |
高匿名代理 |
代理IP |
無 |
是 |
難 |
這裏簡單作的一個表格彙總,顯然,高匿的代理IP最具挑戰,也是最經常使用的。
Http Head
- Http 常見的Head 和識別IP相關的有以下幾個,其中只有REMOTE_ADDR 這個字段是可靠的。其他的字段都是能夠僞造的。由於創建 TCP 鏈接須要三次握手,若是僞造了源 IP,沒法創建 TCP 鏈接。
- 因爲只能識別上一層的REMOTE_ADDR 字段,對於多層代理的狀況下仍是比較麻煩的。以下圖:
-
REMOTE_ADDR
-
X-Forwarded-For
-
X-Real-IP
-
Proxy-Connection
簡單討論一下-Forwarded-For
a de facto standard for identifying the originating IP address of a client connecting to a web server through an HTTP proxy or load balancer |
X-Forwarded-For: client1, proxy1, proxy2X-Forwarded-For: 129.78.138.66, 129.78.64.103 |
https://en.wikipedia.org/wiki/X-Forwarded-For
https://tools.ietf.org/html/rfc7239
The X-Forwarded-For (XFF) HTTP header field was a common method for identifying the originating IP address of a client connecting to a web server through an HTTP proxy or load balancer. As of 2014 RFC 7239 standardized a new Forwarded header with similar purpose but more features compared to XFF.[1] An example of a Forwarded header syntax:
Forwarded: for=192.0.2.60; proto=http; by=203.0.113.43
簡單理解就是一個後出來一個非標準但被業內默認經常使用的一個用來識別proxy的一個http haed。
也就是說 若是在直連的狀況下是不會存在這個 參數的
當配置了反向代理 如 nginx(關於nginx,
網上有不少參考,本身也摘錄過一些http://www.cnblogs.com/wenthink/p/nginxsetting.html)
1
2
|
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
簡單僞造 :curl http://wenthink.com/headdemo -H 'X-Forwarded-For: 192.168.8.8' -H 'X-Real-IP: 192.168.8.8'
Proxy-Connection
Proxy-Connection[23] |
Implemented as a misunderstanding of the HTTP specifications. Common because of mistakes in implementations of early HTTP versions. Has exactly the same functionality as standard Connection field. |
Proxy-Connection: keep-alive |
這個字段一樣也是常見的非標準要求字段,簡而言之,有了這個字段能夠斷定爲代理IP的可能性極大。
作一個簡單的配置代理IP 這裏不作展現
再次請出Wireshark
好吧 mask 有點兒多,其實就是驗證下 多了一個Proxy—Connection這個請求頭。
識別
那麼對於代理IP的識別又是怎樣的呢?
網上也有不少通用的說法
- 反向探測掃描IP是否是開通了80,8080等代理服務器常常開通的端口,顯然一個普通的用戶IP不太可能開通如上的端口。
- HTTP頭部的X_Forwarded_For:開通了HTTP代理的IP能夠經過此法來識別是否是代理IP;若是帶有XFF信息,該IP是代理IP無疑。
- Keep-alive報文:若是帶有Proxy-Connection的Keep-alive報文,該IP毫無疑問是代理IP。
- 查看IP上端口:若是一個IP有的端口大於10000,那麼該IP大多也存在問題,普通的家庭IP開這麼大的端口幾乎是不可能的。
常見的方式類型及方式:HTTP TCP UDP / Ping,telnet,nmap ,socket
這裏簡單畫一個基本的流程圖
OK
簡單粗淺分析先到這裏吧,後期或許繼續補充,或許再也不就這方面展開。
計劃陸續寫一些其餘的。
參考資料:
《HTTP權威指南》
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
以及各路網友總結的這方面相關資料。
若是你以爲本文對您有所幫助,請點擊一下推薦,感謝您的閱讀!!
ps:前兩天園子裏博客打賞挺🔥的,我試試看看有沒有人能夠贊助一杯酸奶 ^_^