前言

坦白讲,没想好怎样的开头。辗转三年过去了。一切已经变化了许多,一切似乎从没有改变。

前段时间调研了一次代理相关的知识,简单整理一下分享之。如有错误,欢迎指正。

涉及

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

X-Forwarded-For[16]

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

以及各路网友总结的这方面相关资料。

如果你觉得本文对您有所帮助,请点击一下推荐,感谢您的阅读!!

Wireshark抓包分析/TCP/Http/Https及代理IP的识别的更多相关文章

  1. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  2. wireshark抓包分析——TCP/IP协议

    本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...

  3. Wireshark抓包分析TCP“三次握手,四次挥手”

    1.目的 客户端与服务器之间建立TCP/IP连接,我们知道是通过三次握手,四次挥手实现的,但是很多地方对这个知识的描述仅限于理论层面,这次我们通过网络抓包的方式来看一下实际的TCP/IP传输过程. 2 ...

  4. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

  5. Wireshark抓包分析TCP 3次握手、4次挥手过程

    Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...

  6. Wireshark抓包分析TCP协议

      版权声明:本文为作者原创文章,可以随意转载,但必须在明确位置表明出处!!! 之前有一篇文章介绍了http协议「初识http协议」, http协议协议是基于tcp协议的,所以作者觉得有必要针对tcp ...

  7. 基于wireshark抓包分析TCP的三次握手

    1. TCP的三次握手 在TCP/IP协议通讯过程中,采用三次握手建立连接,从而保证连接的安全可靠. 所有基于TCP的通信都需要以两台主机的握手开始.这个握手过程主要是希望能达到以下不同的目的.[1] ...

  8. wireshark抓包分析tcp连接与断开

    其实对于网络通信的学习,最好还是能够自己抓到包详细地一下,不然只单单通过文字和图的描述印象不够深刻.本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的. 首先需要去https://www.wir ...

  9. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手

    [摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...

随机推荐

  1. ExtJs服务器端代理(Ajax)

    服务器端代理: Ajax:在当前域中发送请求 JsonP:跨域的请求 Rest:与服务器进行RESTful(GET/PUT/POST/DELETE)交互 Direct:使用  Ext.direct.M ...

  2. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

  3. java对象转换成json

    package com.bjs.acrosstime.utils; import java.util.ArrayList; import java.util.Date; import java.uti ...

  4. 一些关于 checkbox的前台 jquery 操作 记录

    $(function() { //页面载入函数 var partList = jQuery.parseJSON( '${KeyWordsList}'); $.each(partList,functio ...

  5. JavaScript高级程序设计-(1)html中使用JavaScript

    html中使用JavaScript 1.延迟脚本 script标签定义了defer属性,脚本会被延迟到整个页面都解析完毕后运行 详细内容如下: 2.异步脚本 script标签定义了async属性,as ...

  6. Shell_1 简介

    1 Shell 变量 只读变量 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变. #!/bin/bash -x varName="AAA" echo ...

  7. Greenplum查询计划分析

    这里对查询计划的学习主要是对TPC-H中Query2的分析. 1.Query的查询语句 select s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_a ...

  8. 配置linux服务器的一些操作

    本次课程实验,我们选择的是ubuntu 14.04操作系统,不像使用RDP连接windows服务器那样可以直观的看到远程端的图形界面,只能通过Xshell以命令行进行操作,那么就来说说配置远程linu ...

  9. python中的函数

    Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也 ...

  10. ejoy2d源码阅读笔记1

    一直想学lua,学它如何与C结合来作逻辑,所以找了云风的一份代码来研究.这份代码是个框架库,叫ejoy2d,据云风的博客说,他们最新的手机游戏用的就是这套框架,所以实用性应该很强,虽然我不是学游戏的, ...