快捷搜索:  汽车  科技

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)1 设置子网掩码选项。options号 options作用两者关系DHCP 是BOOTP 的增强版本都是基于TCP/IP协议的协议。BOOTP只用于无盘工作站,DHCP 即可用于无盘站也可用于一般的网络应用。DHCP常见options类型

DHCP

动态主机设置协议(Dynamic Host Configuration Protocol,缩写:DHCP)是一个局域网的网络协议,使用UDP协议工作。

BOOTP

BOOTP(Bootstrap Protocol,引导程序协议)是一种引导协议,基于IP/UDP协议,也称自举协议,是DHCP协议的前身。

两者关系

DHCP 是BOOTP 的增强版本都是基于TCP/IP协议的协议。BOOTP只用于无盘工作站,DHCP 即可用于无盘站也可用于一般的网络应用。

DHCP常见options类型

options号 options作用

1 设置子网掩码选项。

3 设置网关地址选项。

6 设置DNS服务器地址选项。

50 设置请求IP选项。

52 设置Option附加选项。

53 设置DHCP消息类型。

BOOTP报文字段

op:操作码/消息类型,取值为1或2:

1= BOOTREQUEST (引导请求)

2 = BOOTREPLY (引导应答)

xid: 事务ID,一个随机数,用来匹配引用请求和应答。

Chaddr: Client hardware address,客户端硬件地址,由客户端填写。

option:选项字段

关闭自己家中路由器的dhcp服务

使用windows server2008 搭建本次学习所使用的dhcp服务器

1. 搭建dhcp服务器首先需要做的就是将自己的ip地址设置为静态

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(1)

2.打开服务器管理器添加角色

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(2)

3.勾选dhcp服务,下一步

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(3)

4.这里可以看到一个要求就是必须在此计算机设置一个静态ip地址,前面设置过了,下一步

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(4)

5.将此静态ip地址作为dhcp服务器的地址

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(5)

6.dns服务器地址自己看看着来填,填完可以点右边验证一下是否可用

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(6)

7.这里选择不需要,然后下一步

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(7)

8.添加一个作用域,名字随便范围给了200-250,网关为当前所在网关,下一步

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(8)

9.这里选择禁用ipv6,下一步

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(9)

10.确认无误,开始安装

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(10)

安装完成后打开虚拟机win7,尝试自动获取地址

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(11)

获取到的地址就是dhcp地址池的范围,打开dhcp服务器查看地址池租用,可以看到192.168.3203这个地址正在租用,也就说明服务器搭建完成

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(12)

分析下图dhcp请求包,来获取后续需要的参数

dhcp服务器:192.168.3.51

dhcp地址池:192.168.3.200-250

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(13)

从图中得知一个完成的DHCP

Discover数据包是由Ether/IP/UDP/DHCP构成的

链路层Ether:

1

Src:本机mac地址

1

Dst:ff:ff:ff:ff:ff:ff:ff:ff 即为广播地址

1

网络层IP:

1

Src:0.0.0.0*

1

Dst:255.255.255.255

1

IP层只是将上一层的mac地址转换成ip地址

传输层UDP:

1

Src port:67

1

Dst port:68

1

67/68端口分别是为bootp服务开放的端口,通常用来请求ip,dhcp服务使用67端口作为源端口,68端口作为目的端口来广播信息

应用层DHCP:

1

client address:本机mac地址

1

xid :随机值

1

options:53 Discover

1

得到所有参数后打开scapy测试是否可行

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(14)

dhcp_attack = (Ether()/IP()/UDP()/BOOTP()/DHCP())

dhcp_attack[Ether].src = RandMAC() #给Ether的src设置随机mac

dhcp_attack[Ether].dst = 'ff:ff:ff:ff:ff:ff' #给Ether的dst设置为广播

dhcp_attack[IP].src = '0.0.0.0'

dhcp_attack[IP].dst = '255.255.255.255'

dhcp_attack[UDP].sport = 68

dhcp_attack[UDP].dport = 67

dhcp_attack[BOOTP].chaddr = RandMAC() #给BOOTP协议中的chaddr字段设置随机mac

dhcp_attack[BOOTP].xid = 14513 #xid为随机值,随便给

dhcp_attack[BOOTP].flags = 0x8000

dhcp_attack[DHCP].options = [('message-type' 'discover')] #给DHCP协议的options设置为discover

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(15)

> Dhcp_attack.show() #确认参数是否无误

> 打开wireshare在后台抓包

> sendp(dhcp_attack) #没有问题后就发送数据包

> Wireshare筛选栏为 dhcp and ip.dst eq 255.255.255.255

就可以看到刚刚发送的数据包了,且第二个还包含的dhcp服务器返回的ip地址

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(16)

用python达到自动构建发送dhcp_discover数据包的功能

#!/usr/bin/python

from scapy.all import *

import random

def dhcp_attack():

random_xid = random.randint(1 1000000)

random_mac = str(RandMAC())

i = 1

while i > 0 :

dhcp_attack = (Ether()/IP()/UDP()/BOOTP()/DHCP())

dhcp_attack[Ether].src = random_mac

dhcp_attack[Ether].dst = 'ff:ff:ff:ff:ff:ff'

dhcp_attack[IP].src = '0.0.0.0'

dhcp_attack[IP].dst = '255.255.255.255'

dhcp_attack[UDP].sport = 68

dhcp_attack[UDP].dport = 67

dhcp_attack[BOOTP].chaddr = random_mac

dhcp_attack[BOOTP].xid = random_xid

dhcp_attack[BOOTP].flags = 0x8000

dhcp_attack[DHCP].options = [('message-type' 'discover')]

try:

sendp(dhcp_attack verbose=0)

i = 1

print ("sending dhcp_discover packet:%s Ctrl Z stop"%i)

except:

print ("sending error")

dhcp_attack()

运行效果

简述dhcp工作过程及报文交互过程(记录一次DHCP协议的学习过程)(17)

本是想写一个dhcp攻击的过程的,将dhcp地址池的地址全部占用。

一次完整的dhcp过程包括,请求,响应,确认,

但折腾了一天也写不出确认包,没有确认包就无法拿到服务器分配的地址,先放着把,等有头绪再写。

————————————————

版权声明:本文为CSDN博主「猪儿虫鸭」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_44344395/java/article/details/104601004

猜您喜欢: