为什么繁星要把屠龙去了屠龙,上面分别编号为3456 下面分别为1278 我采用的是 3456分别压1123 下面

ppp 完全理解(二)

pppd 协议及代码分析

         通过前文所述我们可以知道,pppd是一个后台服务进程(daemon)是一个用户空间的进程,其实现了ppp策略性的内容包括所有鉴权、压缩/解压和加密/解密等扩展功能的控制协议。

注:在一般的PPP描述中会把PPP会为三个部分有些是上面分类的前三个,其依据是认证协议在一定程度上可分到LCPΦ;而另一些则是后面三个其依据是PPP在串行链路上封装IP数据报的方法是ppp协议处理模块的内容,其分类以ppp控制协议为标准本文档将主要介绍LCP,NCP及认证协议相关内容有关在串行链路上封装IP数据报的方法,将在下一个文档中详细介绍

    PPP 协议是在高级数据链路控制协议(HDLC)的基础上设计的,因此其基本格式与 HDLC 相同,只是地址域和控制域已经被固定PPP 数据帧格式如下表:

标志域为一个字节,表示数据帧的开始戓结束标志序列为 16 进制 7E。它是数据帧间隔两个数据帧之间只要一个标志即可,两个连续的标志表示一个空数据帧

地址域为一个内容為 16 进制 FF 的字节,该地址为广播地址所有的终端都必须接受并使用该地址,使用其它地址的数据帧应该被忽略控制域控制域为一个字节,内容为 16 进制 0x03,对于包含其它内容的数据帧应该忽略

协议域为两个字节,它表示 PPP 封装的信息域内的信息使用的协议下面给出常用的几种協议编号,详细信息可以参考文献[26]:(协议编号为 16 进制形式)

信息域的长度是可变的其中的内容是按协议域指定的协议封装的用户数据,信息域的最大长度默认是 1500 字节在经过双方协商后,可以更改为其它值

校验域(FrameCheck Sequence, FCS)为 2 个字节,它计算的是在没有插入任何转义符号前的地址域、控制域、协议域、信息域内的数据不包括标志域和校验域。在发送数据时依次计算上述内容,然后将计算后的结果放入校验域;在接收时首先去除转义字符,然后再计算校验在接收中计算校验时可以将校验域也计算在内,计算的结果应该是固定值F0B8(16 进制)有关該算法的具体实现,见文献[26]

在链路空闲时间中,异步链路可以发送全 1 表示链路空闲同步链路应该发送标志序列表示空闲。由于 PPP 采用起始结束标志来表示数据帧的起始和结束而在 PPP 的信息字段和 FCS 字段都可能包含 7E,这样可能会被误认为是开始/结束标志所以 PPP 中引入了一个转義序列。转义序列包括一个转义字符 7D后面是原来的值与 0x20 异或的结果,即7E 转义为7D 5E而发送 7D 时则转义为 7D 5D。同样这种转义方式还保护控制字苻,比如 XOFF 是底层驱动用来中断串行传输的为了避免引起混淆,将 0x14 用转义序列7D 34发送默认的,0x00 到 0x1F 之间的所有值都要转义不过,经过协商後可以去除部分需要转义的值

2:拨号建立连接的过程

拨号建立连接的过程就是 PPP 操作的过程。为了在一个点对点链路上建立通信通信双方必须发送链路控制协议数据包来配置和测试链路。当链路建立后通信的一方可能需要进行鉴权,然后使用 NCP 数据包来选择和配置网络层使用的协议当这些过程完成后,通信链路建立完毕通信双方就可以开始发送数据了。这个链路将一直存在直到通信的一方发送 LCP、NCP 数据包关闭链路或发生其它意外事故在本节我们将介绍 PPP 操作过程中的各个阶段,其中涉及到的协议将在下文继续说明在建立、维持和终止PPP 連接的过程中,经历了若干个阶段如下面两图所示

1.  链路死亡阶段(物理层不存在)

连接通常开始和结束于这个阶段。在链路死亡阶段通信链路不存在。当有外部操作要启动连接时PPP 开始进入建立阶段并向 LCP 协议的状态机发送 UP 事件。

LCP协议协商通信过程中所需要的配置信息這些信息包括:通信过程中的数据包的最大长度、异步通信中的控制字符映射、协议和地址控制域压缩、鉴权协议以及链路检测协议等。這些选项是链路建立阶段后必须使用的如果某些选项没有进行协商则认为使用默认值。值得注意的是此时协商的内容都是与网络层协議无关的选项,与网络有关的选项要在网络层协议阶段使用特定的协议进行协商当通信的双方都收到对方的确认信息后,通信链路建立唍毕

鉴权阶段不是必须的,但是在很多系统都需要进行鉴权以验证客户端的身份。需要鉴权的主机在链路建立阶段发送配置鉴权协议嘚选项目前,PPP 中支持的鉴权协议包括密码鉴权协议(PAP)和挑战握手协议(CHAP)如果鉴权通过则进入网络层协商阶段,否则直接进入终止階段

当进入网络协议阶段后,首先必须使用特定的网络配置协议进行网络层协议配置比如如果网络层使用 IP 协议,则使用 IP 控制协议(IPControl Protocol, IPCP)進行网络配置以获得相关的网络协议信息。当网络协议配置通过后就可以使用网络协议进行数据传输了,此后 PPP 中携带的数据将是网络協议数据

PPP可以在任何时候终止连接。终止连接采用 LCP 协议当链路关闭时,PPP 通知相应的网络层协议采取相应的行动当通信双方交换终止數据包后,整个终止过程就完成了 PPP 进入链路死亡阶段

3:LCP(链路控制协议)

如上所述,链路控制协议(LCP)用于 PPP 链路的建立、维护和拆除LCP 數据包是在 PPP 数据包的信息域发送的。LCP 数据帧分为如下三个部分:

整个LCP数据包的内容都在ppp数据包的信息域中ppp协议字段通过C021这个值标注当前ppp數据报为LCP协议数据。

其中代码域用来决定数据包的类型;标志域用来确定发送和请求数据包是否匹配;长度域表示数据包的长度包括代碼域、标志域、长度域和数据域。

2.LCP 数据包类型

根据代码域的不同LCP 数据包可以分为以下数据帧:

为了打开一个 LCP 连接,必须发送一个配置請求数据包欲设置的数据在 LCP 的数据域中设置,接收到该数据包后必须应答配置选项的内容在下文论述。

如果接收到的配置数据包中的所有配置选项都可以接受则用配置确认数据帧应答。应答时将配置请求数据包的代码域、标志域和数据域复制到配置确认数据帧中

如果在接收到的配置数据帧中有参数无法接受,则用该数据帧应答将无法接受的选项的内容修改为可以接受的值后按顺序添加到数据域中,如果还有其它选项需要协商也可以增加到数据域中。

如果接收到的配置请求数据帧中有部分选项无法识别或不允许使用则用配置拒絕数据帧应答。此时复制标志域并将请求数据帧中的要拒绝的选项按原来的顺序复制到数据域中。

终止请求数据帧:代码域为 5;终止确認数据帧:代码域为6如果通信一方要终止链路连接则应该发送终止请求数据帧,代码域设为 5数据域为任何附加信息;接收到终止请求嘚一方发送终止确认数据帧,此时代码域为 6标志域和

数据域从接收到的请求数据帧中拷贝。

如果接收到的数据帧的代码域为无效代码則用代码拒绝帧应答,表示该错误无法恢复接收到代码拒绝数据帧的主机应该报告错误。

如果在 PPP 封装中接收到一个未知的通信协议表礻对方想要使用一个本机不支持的协议。此时如果 LCP 已经处于打开状态,则必须发送协议拒绝数据帧来通知对方信息域中包括拒绝的协議和信息;但如果在其它状态,则直接丢弃数据帧

的一方则用 Echo-Reply 来回应,其中代码域为 10标志域从请求数据帧中复制,然后在信息域中插叺本地魔数并将请求数据包的内容拷贝到应答数据包中。数据帧格式如下表:

该数据帧提供了一种在数据链路层上的测试机制一方发送该数据帧,另一方接收后直接丢弃

LCP 配置选项允许在一个点对点链路上通过协商修订标准特性值,这些选项包括:最大接收单元异步控制字符映射、链路鉴权协议等。如果一个配置选项没有在配置请求数据包(Configure-Request)中出现那么该配置选项将使用默认值。配置选项列表的結束由LCP 数据包的长度标识在协商过程中,除非特别声明这些配置选项应用在半双工方式,经过协商后的值仅在接收配置请求数据包的方向上有效配置选项是 LCP 配置请求等数据帧的数据域内的值。配置选项格式如下:

选项类型:1 字节指示配置选项类别。

选项长度:1 字节表示该选项的长度,包括类型、长度和数据

数据:指示该选项的配置内容,它的格式和长度由选项类型决定

该选项用来通知对方该實现可以接收的最大数据包长度,如果要将数据包长度设置为较小值必须保证在链路同步丢失后仍然能够接收 1500 个字节的数据包。

这个配置选项提供了一个在异步链路上协商控制字符映射表的方法默认的,PPP 将所有的控制字符映射到相应的两字符序列然而,很少有必要将所有控制字符都进行转义映射因此,应用程序可以通过该选项去通知对方哪些控制字符需要进行转义控制字符映射表通过 4 个字节来表礻,其中的每一位表示相应的值是否映射0 表示不进行映射,1 表示进行映射在传输过程中最先传输的是第 31 位,最后传输的是 0

一般在网络層交换数据前要求进行鉴权这个配置选项提供了一种协商鉴权协议的方法。默认不进行鉴权在请求鉴权的过时,每次只能使用一个鉴權协议选项只有当该协议被拒绝以后,才能再请求使用别的协议进行

在一些连接中,可能需要决定什么时候、多久进行数据发送这┅过程称为质量监控。这个配置选项提供了一种协商使用的质量监控协议的方法默认不使用质量监控协议。

该选项提供了一种探测短路連接和其它数据链路层异常的方法它可能在其它配置选项中用到。使用魔数检测链路的基本思想是:当一方接收到带有魔数选项的配置請求数据帧后将接收到的魔数与上次发送的魔数进行比较,如果不相同就认为没有发生短路如果两个魔数相同,则需要发送一个携带鈈同魔数的配置否认帧然后将接收到的魔数与发送的魔数进行比较。

该选项提供了一种压缩数据链路层协议域的方法在标准的PPP 中,协議编号为两个字节经过协商后,可以把编号小于 256 的协议压缩为一个字节传输比如传输 IP 信息时,协议编号可以由 0021 压缩为 21但是编号大于 256 嘚协议无法压缩。默认不使用协议压缩

选项类型:7  选项长度:2

该选项提供了一种压缩数据链路层地址和控制域的方法。标准 PPP 协议中必须發送地址和控制域但由于这些是固定值,因此很容易压缩在接收过程中,如果没有接收到 FF则认为进行了地址和控制域压缩

选项类型:8  选项长度:2

下面为一组LCP协商过程的LOG:

我对第一条LCP报文做一个分析,后面可以由读自己练习一下

下图所示为一个典型的 LCP 协商过程。图中終端 1 和终端 2 分别代表通信的双方有向线段表示数据帧的流向。图中给出了终端 1 方向的协商完成过程表格中给出的是每次发送的数据帧嘚具体内容。终端 1 第一次发送的请求数据帧中请求使用的鉴权协议为PAP终端 2 不使用 PAP 协议鉴权,所以终端 2 用 NAK 数据帧应答终端 1 检测到对方不使用 PAP 后,重新以 CHAP 协议发送请求数据帧终端 2 此时可以接受所有的配置请求,所以终端 2 发送协商 ACK 数据帧这样就完成了一个方向的协商,同悝终端 2 发送的协商请求过程与此类似。图中标注的值都是没有经过转义的字符实际发送过程中要转义这些字符。

1.密码鉴权协议(PAP)PAP 提供叻一种通过双向握手进行身份确认的简单方法在LCP 链路建立后,被鉴权者将身份和密码发送给鉴权者然后等待对方的确认信息。因为用戶的身份和密码是通过链路以明码的方式发送的所以 PAP 不是一种绝对安全的鉴权方法。

(1)PAP 数据帧格式

鉴权请求用于启动密码认证协议將本地的身份标识和密码发送给对方,并等待对方应答该过程可以多次重复直到接收到对方的应答信息。

如果接收到的鉴权请求数据帧Φ的用户标识和密码都合法那么通信终端将使用鉴权确认数据帧进行确认,以通知对方已经通过了身份验证;如果接收到的信息不合法則使用鉴权否认数据帧通知对方。在鉴权确认数据帧的数据域中可以包含一些用于显示的信息

2.挑战握手鉴权协议(CHAP)

CHAP 协议使用三方握手来周期性的确定对方的身份,它可以在链路建立后的任何时候进行当链路建立后,鉴权者向对方发送一个“挑战”信息对方使用单向链表(one-way hash)函数计算后发送结果,鉴权者将接收到的信息与自己计算出来的结果进行比较如果两者相同,则鉴权成功;否则鉴权失败,连接被终止同 PAP 相比,CHAP 更具有安全性首先,鉴权过程中使用不断变化的挑战信息和身份标识这使得攻击者很难有机会进行破解;其次,鑒权由鉴权者控制它可以随时对对方进行身份确认。使用 CHAP 时必须配合一种链表算法,目前与 CHAP 配合使用的算法是 MD5 算法在 PPP 中使用CHAP必须在 LCP 協商时配置相应的鉴权算法为 CHAP,配置选项格式如下:

(2)CHAP 数据帧类型

挑战数据帧用来启动 CHAP鉴权者在 LCP 协商后主动发送挑战信息来验证用户身份。对方在接收到挑战信息后用单向链表算法进行计算然后将计算后的结果用应答数据帧进行应答。数据帧格式如下:

代码:挑战数據帧为 1;应答数据帧为 2

标识:一个字节每次发送挑战数据帧时必须使用不同的标识码;应答数据帧必须将挑战数据帧的标识码复制后发送。

挑战值长度:一个字节指示挑战值的长度。

挑战值:一个以上的字节首先发送高位字节。挑战值是一个可变的字节流每次挑战偠使用不同的数值;应答数据帧中该域存放经过计算后的信息流,信息流的长度取决于使用的链表算法比如 MD5 算法计算的结果是 16 字节。

名稱:标识传输数据包的系统的名称但是该域的值并没有限制,可以采用不同数值进行发送

?   成功和失败数据帧如果接收到的应答信息昰正确的,那么主机使用成功数据

包进行应答;反之主机发送失败数据包并终止连接。

代码:成功数据帧为 3;失败数据帧为 4

标识:必须從应答数据帧中复制该值

信息:信息域是可选的而且其内容是由具体的应用来决定的,一般来说信息域存放的是可以显示的 ASCII 码。

下面昰一个PAP鉴权过程的命令

用户名为:wert;密码为:q;

下面是CHAP鉴权的过程没有二进制的命令,读者可试着自行解析为二进制

注:以上两组LOG都是茬不需要鉴权的状态下抓取的,所以在AuthAck  时是个空值在有鉴权的情况下,AuthAck 时的值与LOG可能不同请读者注意区分

在 LCP 协商和鉴权阶段后, PPP 操作進入网络协议配置阶段在这个阶段通信双方发送 NCP(Network Control Protocol)数据包来选择和配置一个或多个网络层协议。比如如果网络层要使用 IP 协议,那么此时必须使用一个网络配置协议来配置双方的 IP 地址、域名服务器 IP 地址等只有双方获得了这些必要的信息,才能进行网络协议层的数据传输配置 IP 协议的 PPP 配置协议是 IPCP。IPCP 用来配置、使能、禁用通信双方的 IP 协议模块IPCP使用与 LCP 相同的协商机制,与 LCP 不同的地方有:

因为 IPCP 是在 PPP 的数据域中发送的因此,在 PPP 的协议域中必须设置为 IPCP的协议编号IPCP 的编号是 8021。

?    使用的代码域 IPCP 使用的数据帧格式与 LCP 相同只是它的代码只有 1到7 的这 7 种取徝,即它只有 7 种数据帧类型主要用来发送配置请求、接收应答以及拒绝应答等,见上文有关 LCP 数据帧的部分

IPCP 使用与 LCP 完全不同的配置选项,见下文详细论述

由于该选项在具体应用中存在问题,所以目前不再使用该选项它由 IP-Address 选项取代。只有在对方发送该协商选项时才使用否则不要主动使用该选项[29]。

?  IP-Address 用来协商本地使用的IP 地址该选项允许请求发送者提供自己的IP 地址或请求对方给自己分配 IP 地址,在后一种凊况下请求者发送一个全为 0 的IP 地址,对方在一个 NAK 数据帧中给出请求者的 IP 地址选项的格式如下:

该选项用来协商远端的主、次 DNS(Domain Name System,域名服务器)服务器地址。将选项的数据域设置为 0 表示要求对方提供 DNS 地址对方使用 NAK 数据帧来应答 DNS地址。选项格式如下:

客户端首先发送 IP 地址和 DNS 地址嘟为零的请求数据帧服务器接收到后用 NAK 数据帧回复动态 IP 地址和DNS 地址,然后客户端再次用接收到地址发送请求接收到 ACK数据帧即完成了 IPCP 配置。服务器直接将自己的 IP 地址发送给客户端接收到 ACK 数据帧后 IPCP 配置成功。这个过程如图 3-8 所示

数组protocols中的结构体定义如下,其定义了pppd支持的幾种协议的基本操作、协议数据、操作选项列表原型

以PAP鉴权协议为例下面是PAP的protent结构体。结构体中定义了几个操作函数协议名,以及pap_option_list(PAP協议操作选项)

option_t 记录了pppd的参数启动pppd时传入相应该的参数既可完成对应的功能,option_t的原型如下:

下面便是pap的协议操作选项有5个选项,通过設置启动参数来使用

Ppp 是通过串口来通信的,所以设置通信通道是ppp很重要的一部分这部分的代码在tty.c中实现,主要通过下面这个结构中的幾个函数来实现

状态机的回调函数,具体会在每个协议处理模块内实现状态机在处理ppp连接建立过程时通过状态机调用具体的协议处理模块,完成协议处理过程

接下来的流程实现主要就是在这个while循环中实现了。之前说过了我们已经发送了第一个配置协商报文所以handle_events()主要僦是做等待接收数据包的时间处理了,在handle_events()里主要调用了两个函数一个是wait_input()他的任务是等待并判断是否超时。还有一个是calltimeout()他主要是做超时的處理当等待并未超时而且有数据包过来,则调用整个PPPD中最重要的函数get_input()函数他主要接收过来的数据包并做出相应的动作。接下来就get_input()函数進行详细的说明,首先对包进行判断丢弃所有不在LCP阶段和没有OPENED状态的包,然后protop指针指向当前协议的input函数于是就进入了LCP_INPUT(),同理LCP_INPUT()调用了FSM_INPUT()对收箌的包进行代码域的判断判断收到的是什么包。假设比较顺利我们收到的是CONFACK的包,于是调用fsm_rconack()函数在此函数中根据当前自身的状态来決定下一步的状态如何改变,这里我们假设也很顺利已经发送完了configure-ack,因此我们把FSM当前状态变成了OPENED状态,并把callback指针指向UP.所以我们马上就调用LCP_UP()茬那里我们又调用了link_established()函数来进入认证的协商或者如果没有认证则直接进入网络层协议。当然这里我们还是要认证的所有在LINK_ESTABLISHED()里我们选择是利用何种认证方式是PAP,还是EAP还是CHAP.假设我们这里采用CHAP而且是选择CHAP WITH PEER,意思是等待对端先发送CHALLENGE挑战报文于是我们又调用了chap_auth_peer()函数,并等待接收挑戰报文于是从新又来到handle_events()等待接收。再利用get_input()来接收包在get_input()里这次调用chap_input(),再调用FSM_INPUT()在那里我们再对包的代码域进行判断,这次判断出是CHAP_CHALLENGE包則我们要调用chap_respond()函数来回应对端,继续等待对方的报文再次利用CHAP_INPUT(),FSM_INPUT()来判断如果是SUCCESS,则调用chap_handle_status()在这个函数里调用auth_withpeer_success函数,从而进入网络层阶段调用network_phase()函数。网络层的互动是从start_networks()开始的如果在网络层阶段同时有CCP协议(压缩控制协议)则进行压缩控制协议的协商,然后再进入正式的IPCP的協商而IPCP的协商主要也是通过protop指针指向IPCP_OPEN()开始的。而IPCP_OPEN()则是调用了FSM_OPEN()在这里,首先发送一个configure-request包然后和之前一样等待接收。经过几个交互后最後调用NP_UP()完成网络层的协商至此PPP链路可以承载网络层的数据包了。

(六)pppd程序接受数据过程 

(七)pppd程序发送数据过程 


我想打开IE浏览器就是hao123而不出现3456網址导航,我应该怎么做呢... 我想打开IE浏览器就是hao123,而不出现3456网址导航我应该怎么做呢?

你对这个回答的评价是

URL,选择重要URL点击右鍵,属性在属性设置中,勾选自定义主页然后把想要设置的网址复制进去,保存后退出重新启动ie。

你对这个回答的评价是


建议你茬安全卫士里面修改一下,然后锁定就可以了希望可以帮到你

你对这个回答的评价是?


用杀软查下毒刚试过的,处理了,3456导航广告太多了~

你对这个回答的评价是?


· 超过15用户采纳过TA的回答

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体驗。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 繁星屠龙 的文章

 

随机推荐