天天看點

PPTP 了解以及封包的分析

    首先,先來了解下什麼是 PPTP。PPTP将PPP(Point-to-Point Protocol)幀封裝進IP資料報中,通過IP網絡如Internet或其他企業專用Intranet等發送。PPTP通過PPTP控制連接配接來建立、維護、終止一條隧道,并使用通用路由封裝GRE(Generic Routing Encapsulation)對PPP幀進行封裝。封裝前,PPP幀的有效載荷即有效傳輸資料一般會經過加密、壓縮或是兩者的混合處理。PPTP協定假定在PPTP客戶機和PPTP伺服器之間有連通且可用的IP網絡。是以如果PPTP客戶機本身已經是某IP網絡的組成部分,那麼即可通過該IP網絡與PPTP伺服器取得連接配接.MPPE隻提供連接配接加密,而不提供端-端加密。端-端加密屬于應用層的加密技術,如果應用中要求實作端-端加密,則可在PPTP隧道建立之後,使用IPSec對兩端的IP資料流進行加密處理。基于Internet的PPTP伺服器即使用PPTP協定的VPN伺服器,它的一個接口在Internet上,另一個接口在Intranet上。

一、    PPTP連接配接過程與隧道維護

        PPTP控制連接配接建立在PPTP客戶機IP位址和PPTP伺服器IP位址之間,PPTP客戶機使用動态配置設定的TCP端口号,而PPTP伺服器則使用保留TCP端口号1723。PPTP控制連接配接攜帶PPTP呼叫控制和管理資訊,用于維護PPTP隧道,其中包括周期性地發送回送請求和回送應答消息,以期檢測出客戶機與伺服器之間可能出現的連接配接中斷。PPTP控制連接配接資料包包括一個IP報頭,一個TCP報頭和PPTP控制資訊,資料包格式如下。所示的PPTP控制連接配接資料包還包括資料鍊路層報頭和報尾。

PPTP 了解以及封包的分析

PPTP典型連接配接過程:

TCP連接配接由PPTP客戶機上的一個動态配置設定的TCP端口到PPTP伺服器上的TCP端口1723建立。

PPTP 了解以及封包的分析

二、大緻分析下用戶端和服務端的封包

start-control-connection-request : 由PPTP用戶端發出,請求建立控制連接配接。PPTP隧道要求在發送任何其他PPTP消息之前,先建立一條控制連接配接。

start-control-connection-reply:由PPTP伺服器發出,回應start-controlconnection-request消息。

outgoing-call-request:由PPTP客戶機發出,請求建立PPTP隧道,outgoing-call-request消息包含GRE報頭中的Call ID,該ID可唯一地辨別一條隧道。

outgoing-call-reply:PPTP伺服器對outgoing-call-request消息的回應。

echo-request:作為保持連線機制,可由PPTP客戶機或伺服器任何一方發出,若echo-request了沒有應答,則PPTP隧道逐漸終止。

echo-reply:對echo-request的應答。注:PPTP的echo-request和echo-reply的消息與ICMP回送請求和回送應答消息無關。

WAN-Error-Notify:由PPTP伺服器向所有VPN客戶機發出,訓示伺服器的PPP接口處于錯誤狀态。

set-link-info:可由PPTP客戶機或伺服器任何一方發出,設定PPP協商選項。

call-clear-request:由PPTP客戶機發出,請求終止隧道。

call-disconnect-notify:PPTP伺服器回應call-clear-request,或因其他原因訓示必須終止隧道。如果PPTP伺服器終止隧道,則發送出call-disconnect-notify消息。

stop-control-connection-request:可由PPTP客戶機或伺服器任何一方發出,通知對方控制連接配接将被終止。

stop-control-connection-reply:回應stop-control-connection-request消息。

三、詳細分析資料包的内容

1.  Start-control-connection-request

PPTP 了解以及封包的分析

Length :                   該 PPTP 資訊的八位總長,包括整個 PPTP 頭。

PPTP Message Type : 資訊類型。可能值有:1、控制資訊;2、管理資訊。

Magic Cookie :         Magic Cookie 以連續的 0x1A2B3C4D 進行發送,其基本目的是確定接收端與 TCP資料流間的正确同步運作。

Control Message Type :值為1。

Reserved 0 & 1 :       必須設定為0。

Protocol Version :    PPTP版本号。

Framing Capabilities: 指出幀類型,該資訊發送方可以提供:

                                 1、異步幀支援(Asynchronous Framing Supported);

                                 2、同步幀支援(Synchronous Framing Supported)。

Bearer Capabilities : 指出承載性能,該資訊發送方可以提供:

                                 1、模拟通路支援(Analog Access Supported);

                                 2、數字通路支援(Digital access supported)。

Maximum Channels : 該 PPTP伺服器 可以支援的個人 PPP 會話總數。

Firmware Revision :若由 PPTP伺服器 出發,則包括發出 PPTP伺服器時的固件修訂本編号;

                                     若由 PPTP用戶端出發,則包括 PPTP用戶端 PPTP 驅動版本。

Host Name :              包括發行的 PPTP伺服器 或 PPTP用戶端的 DNS 名稱。

Vendor Name :          包括特定供應商字串,指當請求是由 PPTP用戶端 提出時,使用的 PPTP伺服器 類型或PPTP用戶端軟體類型。

2. Start-Control-Connection-Reply

PPTP 了解以及封包的分析

大部分字段的含義與Start-control-connection-request一緻。不同的字段含義如下:

Control Message Type :值為2;

Result Code:表示建立channal是否成功的結果碼,值為1表示成功,值為2表示通用錯誤,暗示着有問題。值為3表示channal已經存在,值為4表示請求者未授權,值為5表示請求的PPTP協定版本不支援。

Error Code:表示錯誤碼,一般值為0,除非Result Code值為2,不同的錯誤碼表示不同的含義。

3.  Outgoing-call-request

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。不同的字段含義如下:

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 Recv. Window Size:PPTP用戶端為此次會話提供最大接收緩沖大小;

Packet Processing Delay:表示PPTP用戶端對資料包處理的延時度量,對于PPTP用戶端來說,一般設定比較小越好。

Phone number length: 拔号号碼長度;

Phone number:建立會話向外拔号的号碼,一般對于ISDN或模拟方式拔号來說,此字段域為一個ASCII串。

Sub address:額外資訊域,一般長度少于64個位元組。

4. Outgoing-Call-Reply

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。不同的字段含義如下:

Control Message Type :值為8。

Call ID:由PPTP伺服器指定的唯一的會話ID。主要用于在PPTP伺服器與PPTP用戶端建立的會話上,複用與解封裝隧道包使用的。

Peer’s 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。

5. Set-Link-Info

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。

不同的字段含義如下:

Control Message Type :值為15。

Peer’s Call ID:設定的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP用戶端指定的,用于GRE中對于隧道資料解封與複用。

Reserved0/Reserve1:保留位,必須為0;

Send ACCM:     發送的ACCM值,預設值為0XFFFFFFFF;

Receive ACCM:接收的ACCM值,預設值為0XFFFFFFFF;

6.  Echo request

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。

不同的字段含義如下:

Control Message Type :值為5。

Peer’s Call ID:設定的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP用戶端指定的,用于GRE中對于隧道資料解封與複用。

Reserved0:保留位,必須為0;

Identifier:發送者用來辨別Echo request與Echo reply對應辨別。

7.  Echo-reply

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。

不同的字段含義如下:

Control Message Type :值為6。

Peer’s Call ID:設定的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP用戶端指定的,用于GRE中對于隧道資料解封與複用。

Reserved0/1:保留位,必須為0;

Identifier:辨別值,為接收者從Echo request裡辨別字段複制填入。

Result Code:結果碼,為1表示Echo-reply是有效的,為2表示出現一般性錯誤。

Error code:同上面所描述的。

8. Call-Clear-Request

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。不同的字段含義如下:

Control Message Type :值為12。

Call ID:由PPTP用戶端指定的會話ID。

Reserved0/1:保留位,必須為0;

9、Call-Disconnect-Notify

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。

不同的字段含義如下:

Control Message Type :值為13;

Call ID:由PPTP用戶端指定的會話ID;

Reserved0/1:保留位,必須為0;

Result Code:結果碼,

                    為1表示媒介斷開,

                    為2表示出現一般性錯誤,

                    為3表示為管理者關閉連接配接,

                    為4表示收到Call-Clear-Request;

Error code: 同上面所描述的。

Cause Code:此域表示額外說明斷開原因。

10.  Stop-Control-Connection-Request

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。

不同的字段含義如下:

Control Message Type :值為3。

Resverve0/1/2:保留位,必須為0;

Reason:表示會話連接配接關閉的原因,

              為1表示響應會話清除請求;

              為2表示不支援對端PPTP版本;

              為3表示本地系統關閉。

12.  Stop-Control-Connection-Reply

PPTP 了解以及封包的分析

Length、PPTP Message、Magic cookie與Start-control-connection-request一緻。

不同的字段含義如下:

Control Message Type :值為4。

Resverve0/1/2:保留位,必須為0;

Result Code:表示關閉連接配接結果碼,為1表示正常關閉成功,為2表示發生一般性錯誤。

Error Code : 表示當Result Code為2時,對應具體的一般性錯誤,Result Code為1時,必須為0。

四、總結

1. PPTP原理

首先,PPTP客戶機使用動态配置設定的TCP端口号,與PPTP伺服器使用的保留TCP端口号1723建立控制連接配接(PPTP控制連接配接攜帶PPTP呼叫控制和管理資訊,用于維護PPTP隧道)。

其次,用戶端與伺服器通過控制連接配接來建立、維護、終止一條隧道。

然後,PPP幀的有效載荷經過加密、壓縮或是兩者的混合處理。

接着,使用通用路由封裝GRE對PPP幀進行封裝。

再者,将PPP幀封裝進IP資料封包中。通過IP網絡如Internet或其他企業準用INTRANET等發送給PPTP伺服器。

最後,伺服器接收到PPTP資料包後進行正常處理。

2. PPTP控制連接配接數的資料包格式

包括一個IP報頭,一個TCP報頭和PPTP控制資訊,還包括資料鍊路層報頭和報尾。

PPTP 了解以及封包的分析