PPPoE抓包分析

这个周为了解决一个PPPoE的问题,自己专门研究了一下PPPoE,通过抓包文件来详细的说一下

在wireshake中使用"pppoed || pppoes"来过滤其他无关的包,以免干扰分析.

PPPoE 可以分为 发现阶段和绘话阶段(LCP,CHAP,NCP(IPCP,BCP,IPV6CP))

 

发现阶段:

PADI:

 Destination,Source,Type 属于以太帧的首部,目的地址是以太网的广播地址(0xffffff),源地址写的是自己的网卡地址

其中Type  (0x8863) 表示目前处在发现阶段, (0x8864) 表示目前处在绘话阶段,

version  表示PPPoE的协议版本(1个字节),Type 表示类型 1个字节,

PPP-over-Ethernet Discovery:

       code  表示PPPoE绘话类型占两个字, 0x09 :PADI,0x07:PADO/PADT,0x19:PADR,0x65:PADS

       session ID  目前尚未建立绘话,填充为0

      Payload Length  表示整个PPPoE Tags的长度

PPPoE-Tags   占12个字节 由 一个或者多个TLV组成

         01 03 标识主机唯一标识(TYPE)

         00 04 表示Host-Uniq的长度(LENGTH)

         40 2f 00 00 表示数值(VALUE)

PADO:

当主机在指定时间内没有收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数

 PPPoE-Tags 占48个字节,由三组TLV构成(Host-Uniq,AC-cookie,AC-Name)构成, Host-Uniq 不在分析.

           AC-cookie  01 04 表示 TYPE, 00 10 表示LEGNGTH,  还有一个VALUE

          AC-Name   01 02  表示TYPE, 00 0c  表示LEGNGTH ,  还有一个VALUE

PADR:

 PADS

:

session ID 已经赋值,表名绘话建立成功,下一步进入绘话阶段

绘话阶段

LCP

LCP协商阶段完成最大传输单元(MTU) ,是否进行认证和采用何种认证方式(Authentication Type)的协商

LCP协议报文分类:

链路配置报文: 用来建立和配置一条链路 报文有Configure-Request,Configure-Ack,Configure-Nak,Configure-Reject

      Configure-Ack 如果完全支持对端的LCP选项,就回复ACK,报文中必须携带Request报文中的参数选项

      Configure-Nak 如果支持对端协商选项,但是不认可该项协商的内容,则回应Configure-Nak报文,在Configure-Nak选项中填上自        己认可的内容

      Configure-Reject 如果不支持对端的协商选项则回应Configure-Reject,报文中带上不支持的选项....

链路维护报文:用来管理和调试链路 报文有Code-Reject,Protocol-Reject, Echo_Request,Echo-Reply,Discard-Request

链路终止报文:用来终止一条链路 Terminate_Request和Termiate-Replay

如果一端发送request之后, 对端没有回复ack,那么将继续发送request,直到对端回应ACK报文.如果双方发送的request,都接到了对端的发送的ACK,则链路成功建立.

Configuration Request:(c->s)

Point-to-Point Protocol

     code : Configuration Request(1), Configuration Ack(2), 

    Identifier (从0开始增长, 每一组应答( Configuration Request,Configuration Ack)中Identifier都是一样的,存在的意义就是确定请      求与应答)

Options: 包含 Max Receive Unit(MTU) ,Magic Number

Configuration Ack:(s->c):

如果对端同意参数配置,那么对端就会发送 Configuration Ack,如果不同意的话,就会返回Configuration Nck(把存在异议的参数配置写到包中)

Configuration Request:(s->c)

Configuration Request:(s->c)的请求中比Configuration Request (c->s)中多了一个ACHP的参数,这是用来下一步做认证的参数,同样在Configuration Ack:(c->s)也会携带这个数据.

Configuration Ack:(c->s)

在绘话阶段,客户端与服务器端会通过 Echo Request/Echo Reply 来维持绘话 

CHAP/PAP:

pap:在网络上是用明文传递用户名和口令,不安全

 

IPCP:

 119 Configuration Request:(s->c) : 服务端给客户端一个IP地址(网关地址)

 120 Configuration Request:(c->s) : 客户端告知服务器端 本机IP,主要DNS,次要DNS(地址都是0000)

 121 Configuration Ack:(c->s) : 客户端表示同意

 122 Configuration Nak:(s->c) : 服务端表示不同意,于是就给客户端分配IP,主要DNS,次要DNS

 123 Configuration Request:(c->s) : 客户端告知服务器端 本机IP,主要DNS,次要DNS(server端分配的)

 124 Configuration Ack:(c->s) : 服务端表示同意

  客户端就可以使用分配的ip上网了.

在分析过程中,困扰我的是出问题的包中,建立了多次绘话, 多个绘话的请求和应答交互出现,分析起来比较头疼,后来突然看到SessionID 和Identifier,突然想明白可以依赖这俩字段在众多的包中找出一个完整的交互过程来.

SessionID 用来确定一个绘话, Identifier可以用来确定一组应答(双方的request中Identifier都是从1开始递增的, Identifier最早出现在LCP协商的request中,比如说 A->B的request中Identifier为1,那么B->A的应答中Identifier也为1)

==================================================================================

发现几个关于PPPoE文章整理的比我更好,我就把连接贴在下面了

https://blog.csdn.net/yipie/article/details/46575443

 

  • 19
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值