zoukankan      html  css  js  c++  java
  • PPTP协议抓包分析及PPTP穿越NAT

    目录

    1、PPTP协议概述

    2、链接控制

    3、报文流程

    3.1、PPTP建立拓扑

    3.2、详细报文解释

    4、PPTP穿越NAT原理报文分析

    4.1、控制连接

    4.2、数据连接


    1、PPTP协议概述

     

    PPTP英文全称:Point to Point Tunneling Protocol,即点对点隧道协议。是建立在PPP(Point to Point)点对点协议上的VPN隧道技术。

    PPTP有两个并行的组成部分:

    • 1. PPTP链路控制: 基于TCP的PAC-PNS对操作的控制连接
    • 2. PPTP数据传输:一个在相同的PAC-PNS对之间的IP隧道操作。 该操作用来传送封装好的PPP包的GRE(Generic Routing Encapsulation,即通用路由封装协议),为PAC-PNS对之间的用户提供服务。

    2、链接控制

    在PAC和PNS之间的PPP隧道建立之前, 它们之间必须建立控制连接。

    控制层的主要功能包括:

    1. 彼此交换基本信息;

    2. 负责创建、维护、删除Session;

    3. 负责创建、维护、删除Tunnel;

    4. 更新通信参数;(Set-Link-Info)

    5. 维护控制层自身的连接状态。(Echo-Request、Echo-Reply)

    控制连接是标准的TCP会话, PPTP呼叫控制和管理信息就可以通过TCP传送。

    控制层连接是基于TCP建立的,PPTP Server监听TCP1723端口,等待Client的连接请求。

    控制层自身的状态维护:

    PPTP连接双方在一段时间内(60秒)如果没有收到任何控制层信息,就会发Echo-Request查询控制层连接状态,接收方会应答Echo-Reply。如果发送方在60秒内还没有收到应答就会断开控制层连接。

    3、报文流程

    PPTP链接的建立可以分为以下几个阶段:

    1. TCP连接的建立阶段

    2. PPTP控制层连接的建立阶段

    3. PPP会话阶段(包括LCP协商、身份认证、NCP协商等)

    4. PPTP隧道中数据包的交互(实际通信流量、通信的packages是经过GRE封装过的PPP包)

    5. PPTP链接的维护

    6. PPTP链接的终止

    3.1、PPTP建立拓扑

                                  (DNAT)

    Client----------------------------------FW----------------------------------server

    (192.168.10.115)    (192.168.10.114)  (10.10.10.1)         (10.10.10.2)

    3.2、详细报文解释

    1、控制连接

    包5-7:client和server建立TCP连接

    包8:client向server发送start control connection request报文,请求建立控制连接,初始化client和server之间的隧道,开始建立隧道

    Length:该PPTP信息的八位总长,包括整个PPTP头。

    Massage type:消息类型;1为控制消息,2为管理消息

    Magic Cookie:以连续的 0x1A2B3C4D 进行发送,其基本目的是确保接收端与TCP数据流间的正确同步运行

    Control Message Type:控制消息类型;

    • 1为控制连接请求
    • 2为控制连接应答

    Reserved保留位

    Protocol VersionPPTP版本号

    Framing Capabilities指出帧类型,该信息发送方可以提供:

    • 异步帧支持(Asynchronous Framing Supported)
    • 同步帧支持(Synchronous Framing Supported)

    Bearer Capabilities:指出承载性能,该信息发送方可以提供:

    • 模拟访问支持(Analog Access Supported)
    • 数字访问支持(Digital access supported)

    Maximum Channels:该 PPTP服务器 可以支持的个人 PPP 会话总数。

    Firmware Revision:若由 PPTP服务器 出发,则包括发出 PPTP服务器时的固件修订本编号;若由 PPTP客户端出发,则包括 PPTP客户端 PPTP 驱动版本。

    Host Name:包括发行的 PPTP服务器 或 PPTP客户端的 DNS 名称。

    Vendor Name:包括特定供应商字串,指当请求是由 PPTP客户端 提出时,使用的 PPTP服务器 类型或PPTP客户端软件类型。

    包9:server响应ACK报文

    包10:server发出的start control connection reply报文,用于响应start control connection request报文。

    start control connection reply报文部分字段和start control connection request报文字段一致。

    不同点有:

    Control Message Type控制连接应答报文

    Result Code:表示建立channal是否成功的结果码

    • 1表示成功
    • 2表示通用错误,暗示着有问题
    • 3表示channal已经存在
    • 4表示请求者未授权
    • 5表示请求的PPTP协议版本不支持

    Error Code:表示错误码,一般值为0,除非Result Code值为2,不同的错误码表示不同的含义。

    包11:由PPTP客户机发出,请求创建PPTP隧道,outgoing-call-request消息包含GRE报头中的Call ID,该ID可唯一地标识一条隧道。

    Control Message Type:值为7。

    Call ID:由PPTP客户端指定的唯一的会话ID。

    Call Serial Number:是由PPTP客户端指定的唯一标识符,用于在记录会话信息中标识特定会话,与Call ID不一样的是,Call Serial Number PPTP客户端与PPTP服务器来说,唯一绑定到一个给定的会话,且是相同的。

    Minimum BPS:对于此次会话可接受的最低传输速度,单位为位/秒;

    Maximum BPS:对于此次会话可接受的最大传输速度,单位为位/秒;

    Bearer Type:指出承载访问支持,该信息发送方可以提供:

    • 1 模拟访问支持(Analog Access Supported);
    • 2 数字访问支持(Digital access supported)。
    • 3 可支持的任何类型。

    Framing Type:指出帧类型,该信息发送方可以提供:

    • 1 异步帧支持(Asynchronous Framing Supported);
    • 2 同步帧支持(Synchronous Framing Supported)。
    • 3 异步或同步帧支持。

    Packet Receive Window Size:PPTP客户端为此次会话提供最大接收缓冲大小;

    Packet Processing Delay:表示PPTP客户端对数据包处理的延时度量,对于PPTP客户端来说,一般设置比较小越好。

    Phone number length:拔号号码长度;

    Phone number:建立会话向外拔号的号码,一般对于ISDN或模拟方式拔号来说,此字段域为一个ASCII串。

    Sub address:额外信息域,一般长度少于64个字节。

    包12:服务端回应客户端outgoing-call-request的报文

    outgoing-call-reply报文和outgoing-call-request报文大部分字段都一致。

    不同字段如下:

    Control Message Type:值为8。

    Call ID:由PPTP服务器指定的唯一的会话ID。主要用于在PPTP服务器与PPTP客户端建立的会话上,复用与解封装隧道包使用的。

    Peer Call ID:设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用。

    Result Code:表示响应Outgoing-call-request握手是否成功,

    • 1表示成功
    • 2表示通用错误,暗示着有问题
    • 3表示无载波
    • 4表示服务器忙,无法及时响应
    • 5表示无拔号音
    • 6表示呼号超时
    • 7表示未授权

    Error Code:表示错误码,一般值为0,除非Result Code值为2,不同的错误码表示不同的含义。

    Cause Code:表示进一步错误信息描述;

    Connect Speed:连接使用的实际速率;

    Rev window size:PPTP服务器为此次会话提供最大接收缓冲大小;

    Packet Processing Delay:表示PPTP服务器对数据包处理的延时度量。

    Physical Channel ID:由PPTP服务器指定的物理信道ID。

    包13:可由PPTP客户机或服务器任何一方发出,控制连接建立成功,设置PPP协商选项。

    Length、PPTP Message、Magic cookie与Start-control-connection-request一致

    不同的字段含义如下:

    Control Message Type值为15

    Peer Call ID:设置的值是从接收到的Outgoing-call-request中Call ID值,是由PPTP客户端指定的,用于GRE中对于隧道数据解封与复用

    Reserved:保留位,必须为0

    Send ACCM发送的ACCM值,默认值为0XFFFFFFFF

    Receive ACCM接收的ACCM值,默认值为0XFFFFFFFF

    2、数据连接

    包14-19:PPP LCP建立PPP链路

    包24-25:PPP客户端和服务器建立握手认证。

    包26-35:协商PPP压缩算法

    包36-53:PPP客户端和服务端协商网络配置

    包54-63:PPP封装客户端和服务端之间传输的数据

    4、PPTP穿越NAT原理报文分析

    通过修改PPTP报文中的call ID值来判断子连接属于哪个控制连接的,然后进行NAT转换。

    4.1、控制连接

    包30:客户端向服务端发送start control connection request报文,请求建立控制连接

    源端口:57371 目的端口:1723

    包31:经过防火墙,转换目的IP为pptp服务器IP,源端口转换为1226

    源端口:1226 目的地端口:1723

    包34:服务端响应start-control-connection-reply报文

    源端口:1723 目的端口1226

    包35:经过防火墙,匹配连接跟踪表,转换目的IP为192.168.10.115,目的端口转换为57371

    源端口:1723 目的端口:57371

    包36:客户端发送outgoing-call-request报文,请求建立PPTP隧道,并且携带自己的唯一标识(call id 20631)发送给服务器。

    源端口:57371 目的端口:1723 call ID:20631

    包37:经过防火墙,生成map表,并记录客户端的call id,转换目的IP为服务器IP,并且修改携带的call ID为源端口并记录修改后的call id带map表中。

    源端口:1226 目的端口:1723 call ID:1226

    包38:服务器响应outgoing-call-reply报文,携带自己的唯一标识(call id 1280)发送给客户端,并且peer call id填写客户端的ID

    源端口:1723 目的端口:1226    call ID:1280    peer call ID:1226

    包39:经过防火墙后,通过map表转换peer call id(1226)为对应的客户端peer call id(20631),并且记录服务端的call id(1280)到map表中。然后匹配链接跟踪表转换源IP为客户端IP。

    源端口:1723    目的端口:57371    call ID:1280    peer call ID:20631

    包40:客户端请求设置PPP协商,携带服务器的call id 1280

    源端口:57371    目的端口:1723    peer call ID:1280

    包41:经过防火墙,转换目的IP为服务器IP,源端口为1226,不转换服务器的call id

    源端口:1226    目的端口:1723    peer call ID:1280

    4.2、数据连接

    包42:PPP LCP 协商,携带服务器的call id

    包43:经过防火墙后,查找map表,发现有call id 1280的表项,然后转换目的IP为服务器IP,并且生成链接跟踪表。

    包44:向客户端发送PPP LCP报文,携带客户端的call id 1226

    包45:防火墙收到后,防火墙查找map表发现有1226的表项,修改call id 1226为20631。然后查看链接跟踪表,转换目的IP为客户端IP。

     

  • 相关阅读:
    团队作业3-需求分析设计
    团队作业2
    Gakki赛高-团队介绍
    201521123002 《Java程序设计》第2周学习总结
    201521123002 《Java程序设计》第1周学习总结
    201521123067《Java程序设计》第1周学习总结
    团队作业4--第一次项目冲刺(Alpha版本)7
    团队作业4--第一次项目冲刺(Alpha版本)6
    团队作业4--第一次项目冲刺(Alpha版本) 5
    团队作业4--第一次项目冲刺(Alpha版本) 4
  • 原文地址:https://www.cnblogs.com/APeng2019/p/10719284.html
Copyright © 2011-2022 走看看