Python实现DHCP请求方式

 更新时间:2024年06月27日 10:04:47   作者:愤怒的玉米棒  
这篇文章主要介绍了Python实现DHCP请求方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

DHCP四个工作步骤

1、客户端通过广播发送DHCP Disccover报文寻找服务器端

2、服务器通过单播发送DHCP offer报文向客户提供IP地址等信息

3、客户端通过广播发送DHCP Request报文告知服务端本地选择使用哪个IP

4、服务器通过单播发送DHCP Ack报文告知客户端IP地址是合法可用的

使用python Scapy库模拟DHCP包

DHCP Discover包

rom scapy.all import *
import random
 
 
def Dhcp_offer():
    mac=str(RandMAC()) //随机一个MAC
    Ether_Discover=Ether(src=mac,dst="ff:ff:ff:ff:ff:ff") //创建Ether广播包 目标地址全f
 
    IP_Discover=IP(src="0.0.0.0",dst="255.255.255.255")   //创建IP广播包 目标全255
   
     
    UDP_Discover=UDP(dport=67,sport=68)   //DHCP使用UDP传输 服务端端口67 客户端68                
 
    print("随机mac地址为%s" %(mac)) 
 
    a=mac.replace(":","")    
 
    xid_random=random.randint(1,999999999)   //DHCP包中XID(请求ID)
    BOOTP_Discover=BOOTP(xid=xid_random,chaddr=a)  //chaddr=客户端mac
 
    DHCP_Discover=DHCP(options=[("message-type","discover"),"end"]) 
    //模拟DHCP包
 
    Discover=Ether_Discover/IP_Discover/UDP_Discover/BOOTP_Discover/DHCP_Discover 
 
    sendp(Discover,iface='以太网',count=1) //发送 iface为发送网卡 count为数量

DHCP Request包

def Dhcp_Request():
 
    def J(pkt):
        if DHCP in pkt:
            if pkt[DHCP].options[0][1]==2:  //option为2 说明服务端回复
                Ether_Request = Ether(src=pkt[Ether].dst, dst="ff:ff:ff:ff:ff:ff")
                IP_Request = IP(src="0.0.0.0", dst="255.255.255.255")
                UDP_REQUEST = UDP(sport=68, dport=67)
                BOOTP_Request = BOOTP(chaddr=pkt[BOOTP].chaddr, xid=pkt[BOOTP].xid)
                DHCP_Request = DHCP(options=[("message-type", 'request'), ("server_id", pkt[DHCP].options[1][1]),
                                             ("requested_addr", pkt[BOOTP].yiaddr), "end"])
                Request = Ether_Request / IP_Request / UDP_REQUEST / BOOTP_Request / DHCP_Request
                sendp(Request, iface='以太网',count=1)
                print("正在分配ip%s" %(pkt[BOOTP].yiaddr))
            if pkt[DHCP].options[0][1]==5:
                print("已经分配ip%s" %(pkt[BOOTP].yiaddr))
    
    sniff(filter='src port 67', iface='以太网', prn=J,count=5)  //监听收到的offer包 prn为处理包的函数
 

运行效果

此代码只是模拟了客户端,也可用通过Scapy模拟服务端

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Django实现静态文件缓存到云服务的操作方法

    Django实现静态文件缓存到云服务的操作方法

    这篇文章主要介绍了Django实现静态文件缓存到云服务的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 使用Python删除PDF中多余或空白页面的实现步骤

    使用Python删除PDF中多余或空白页面的实现步骤

    在处理 PDF 文件时,常常会遇到一些多余或空白的页面,这些页面不仅占据存储空间,还会影响文档的整洁性和可读性,这篇文章将探讨如何使用 Python删除PDF中多余或空白的页面,需要的朋友可以参考下
    2025-05-05
  • Pandas Describe函数的具体使用

    Pandas Describe函数的具体使用

    在Pandas中,describe()能够为数据框中的数值列提供统计摘要信息,本文主要介绍了Pandas Describe函数的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Pyside2中嵌入Matplotlib的绘图的实现

    Pyside2中嵌入Matplotlib的绘图的实现

    这篇文章主要介绍了Pyside2中嵌入Matplotlib的绘图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 如何使用python的plot绘制loss、acc曲线并存储成图片

    如何使用python的plot绘制loss、acc曲线并存储成图片

    在数据可视化中曲线图是一种常见的展示数据趋势的方式,Python作为一种强大的编程语言,提供了丰富的数据处理和可视化库,使得绘制曲线图变得非常简单,下面这篇文章主要给大家介绍了关于如何使用python的plot绘制loss、acc曲线并存储成图片的相关资料,需要的朋友可以参考下
    2024-03-03
  • Python寻找路径和查找文件路径的示例

    Python寻找路径和查找文件路径的示例

    今天小编就为大家分享一篇Python寻找路径和查找文件路径的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • python定向爬取淘宝商品价格

    python定向爬取淘宝商品价格

    这篇文章主要为大家详细介绍了python定向爬取淘宝商品价格,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 如何在pycharm中配置pyqt5设计GUI操作教程

    如何在pycharm中配置pyqt5设计GUI操作教程

    这篇文章主要介绍了如何在pycharm中配置pyqt5设计GUI的操作教程,有需要的朋友可以借鉴参考下,希望大家可以多多交流,讨论相关问题共同提升
    2021-08-08
  • postman传递当前时间戳实例详解

    postman传递当前时间戳实例详解

    在本篇文章里小编给大家整理的是一篇关于postman传递当前时间戳知识点相关内容,有需要的朋友们可以学习下。
    2019-09-09
  • Python连接数据库进行数据查询的操作代码

    Python连接数据库进行数据查询的操作代码

    这篇文章主要介绍了Python连接数据库进行数据查询的操作代码,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06

最新评论