首页 > 编程语言 >Python scapy模拟dhcp客户端

Python scapy模拟dhcp客户端

时间:2024-03-10 17:24:16浏览次数:26  
标签:xid pkt Python ip scapy FF dhcp

安装scapy

apt install -y python3-scapy

1. 发送dhcp discover广播报文
2. sniff抓包,收到dhcp offer广播报文
3. 发送dhcp request广播报文
4. sniff抓包,收到dhcp ack广播报文

import threading
from scapy.all import *
from scapy.layers.l2 import Ether

def send_dhcp_discover(mac):
    xid = 1111
    eth = Ether(src = mac, dst = "FF:FF:FF:FF:FF:FF")
    ip = scapy.all.IP(proto = 17, src ="0.0.0.0", dst = "255.255.255.255")
    udp = scapy.all.UDP(sport = 68, dport = 67)
    bootp = scapy.all.BOOTP(op = 1, xid = xid, htype = 1, hlen = 6, chaddr = mac)
    dhcp = scapy.all.DHCP(options=[("message-type","discover"), "end"])
    discover_pkt = eth/ip/udp/bootp/dhcp
    sendp(discover_pkt, iface="ens33", verbose=False)

def send_dhcp_request(xid, mac, dhcp_offer_ip, dhcp_server_ip):
    eth = Ether(src = mac, dst = "FF:FF:FF:FF:FF:FF")
    ip = scapy.all.IP(proto = 17, src ="0.0.0.0", dst = "255.255.255.255")
    udp = scapy.all.UDP(sport = 68, dport = 67)
    bootp = scapy.all.BOOTP(op = 1, htype = 1, hlen = 6, hops = 0, xid = xid)
    dhcp = scapy.all.DHCP(options=[("message-type", "request"), ("requested_addr", dhcp_offer_ip), ("server_id", dhcp_server_ip), "end"])
    request_pkt = eth/ip/udp/bootp/dhcp
    sendp(request_pkt, iface="ens33", verbose=False)

class HandlePktThread(threading.Thread):
    def __init__(self):
        super().__init__()
    
    def run(self):
        def handle_offer_pkt(pkt):
            if pkt.getlayer("DHCP").options[0][1] == 2:
                print("get dhcp offer")

                xid = pkt["BOOTP"].xid
                mac = pkt["BOOTP"].chaddr
                dhcp_offer_ip = pkt["BOOTP"].yiaddr
                dhcp_server_ip = pkt["BOOTP"].siaddr
                
                send_dhcp_request(xid, mac, dhcp_offer_ip, dhcp_server_ip)
            elif pkt.getlayer("DHCP").options[0][1] == 5:
                print("get dhcp ack")

        sniff(prn=handle_offer_pkt, iface="ens33", filter="udp and (port 68 or port 67)", timeout=3)

if __name__ == "__main__":
    mac = "01:02:03:04:05:06"
    handle = HandlePktThread()
    handle.start()

    send_dhcp_discover(mac)

 

标签:xid,pkt,Python,ip,scapy,FF,dhcp
From: https://www.cnblogs.com/WJQ2017/p/18064424

相关文章

  • 群星璀璨的Python江湖,Python第三方库介绍
    如果Python语言是一个江湖,那么python第三方库就是一个个身怀绝技的江湖侠客,这些侠客在这偌大的江湖尽情挥洒着江湖侠气。有人名扬天下,有人默默无闻,有人纵横捭阖,有人黯然谢幕,每天都在上演人生的悲欢离合。那么什么是python第三方库呢?什么是python第三方库python是一门非常流行......
  • python
    ##python在python的学习中,我发现了其许多与c语言的不同之处。例如:`#判断输入整数是否在【0,100】之间num=eval(input("请输入一个整数:"))判断【0,100】ifnum>100ornum<0:print("输入整数小于0或大于100")else:print("输入整数在0到100之间(含)")`#python的输出p......
  • python 新版本flask创建接口方式
    importpymysqlfrompymysql.cursorsimportDictCursorfromflaskimportFlask,requestfromflask.json.providerimportDefaultJSONProviderfromflask_corsimportCORSfromdatetimeimportdatetime,datesqlconnect=pymysql.connect(user="root&q......
  • python字符串截取
    python中字符截取[-1]、[:-1]、[::-1]、[n::-1]等使用方法的详细讲解(建议留存)-@小浩-博客园(cnblogs.com)str(df.loc[df.目的地.isnull(),'路线名'].values)#表示提取出目的地为空的路线名的值并将他变成字符串#上面的提取方式是在只有一行的情况下,如果是多行就要用......
  • Asyncio in Python and Concurrency tasks
    AsyncioLibraryandConcurrencytasksinPythonTheasynciolibraryisaPythonstandardlibrarymoduleusedforwritingsingle-threadedconcurrentcodeusingcoroutines,multiplexingI/Oaccess,andrunningnetworkclientsandservers.Itprovidesafram......
  • 卸载环境所有python包(第三方库)
    打开CMD终端,查看已安装库:piplist一个个删除需要执行:pipuninstall包名;那么如何一次性删除所有的包呢?首先需要执行以下代码: pipfreeze>modules.txt这时候就能够把所有的第三方模块的模块名称以及第三方模块的版本号等等信息保存在了这个modules.txt文件中,之后的操作就是......
  • forward reference in python
    ForwardReferenceinpythonThereisacodesnippetlike:@propertydefanalyses(self)->"AnalysesHubWithDefault":result=self._analysesifresultisNone:raiseValueError("Cannotaccessanalysesthisearlyinproject......
  • 【Python使用】python高级进阶知识md总结第2篇:HTTP 请求报文,HTTP响应报文【附代码文
    python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件,Ubuntu操作系统,Linux内核及发行版,查看目录命令,切换目录命令,绝对路径和相对路径,创建、删除文件及目录命令,复制、移动文件及目录命令,终端命令格式的组成,查看命令帮助。HTTP请求报文,HTTP响应报文......
  • 解决python导入csv文件报错
    python编码报错:UnicodeDecodeError:‘utf-8‘codeccan‘tdecodebyte0xbcinposition2:invalidstartbyt_unicodedecodeerror:'utf-8'codeccan'tdecodebyt-CSDN博客报错原因是:UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xb5in......
  • Python 潮流周刊第 41 期(摘要),赠书5本
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2024-03-09-weekly《Python工匠》专注......