前言
坦白講,沒想好怎樣的開頭。輾轉三年過去了。一切已經變化了許多,一切似乎從沒有改變。
前段時間調研了一次代理相關的知識,簡單整理一下分享之。如有錯誤,歡迎指正。
涉及
Proxy IP應用
原理/層級wireshark抓包分析
HTTP head: X-Forwarded-For/ Proxy-Connection/偽造 X-Forwarded-For/
以及常見的識別手段等幾個方面。
應用
Web 代理(proxy)服務器是網絡的中間實體。代理位於客戶端和服務器之間,扮演 “中間人”的角色,在各端點之間來回傳送 HTTP 報文。本章介紹了所有與 HTTP 代理服務器有關的內容,為代理特性提供的特殊支持,以及使用代理服務器時會遇
到的一些棘手的問題。 -引用自《HTTP權威指南》
代理的應用想必大家都很熟悉了,不再過多的描述,簡單上圖達意。
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)
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
以及各路網友總結的這方面相關資料。
如果你覺得本文對您有所幫助,請點擊一下推薦,感謝您的閱讀!!
