Python實(shí)現(xiàn)DHCP請(qǐng)求方式
DHCP四個(gè)工作步驟
1、客戶端通過廣播發(fā)送DHCP Disccover報(bào)文尋找服務(wù)器端
2、服務(wù)器通過單播發(fā)送DHCP offer報(bào)文向客戶提供IP地址等信息
3、客戶端通過廣播發(fā)送DHCP Request報(bào)文告知服務(wù)端本地選擇使用哪個(gè)IP
4、服務(wù)器通過單播發(fā)送DHCP Ack報(bào)文告知客戶端IP地址是合法可用的
使用python Scapy庫模擬DHCP包
DHCP Discover包
rom scapy.all import *
import random
def Dhcp_offer():
mac=str(RandMAC()) //隨機(jī)一個(gè)MAC
Ether_Discover=Ether(src=mac,dst="ff:ff:ff:ff:ff:ff") //創(chuàng)建Ether廣播包 目標(biāo)地址全f
IP_Discover=IP(src="0.0.0.0",dst="255.255.255.255") //創(chuàng)建IP廣播包 目標(biāo)全255
UDP_Discover=UDP(dport=67,sport=68) //DHCP使用UDP傳輸 服務(wù)端端口67 客戶端68
print("隨機(jī)mac地址為%s" %(mac))
a=mac.replace(":","")
xid_random=random.randint(1,999999999) //DHCP包中XID(請(qǐng)求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='以太網(wǎng)',count=1) //發(fā)送 iface為發(fā)送網(wǎng)卡 count為數(shù)量DHCP Request包
def Dhcp_Request():
def J(pkt):
if DHCP in pkt:
if pkt[DHCP].options[0][1]==2: //option為2 說明服務(wù)端回復(fù)
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='以太網(wǎng)',count=1)
print("正在分配ip%s" %(pkt[BOOTP].yiaddr))
if pkt[DHCP].options[0][1]==5:
print("已經(jīng)分配ip%s" %(pkt[BOOTP].yiaddr))
sniff(filter='src port 67', iface='以太網(wǎng)', prn=J,count=5) //監(jiān)聽收到的offer包 prn為處理包的函數(shù)
運(yùn)行效果

此代碼只是模擬了客戶端,也可用通過Scapy模擬服務(wù)端
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用Python中SocketServer 實(shí)現(xiàn)客戶端與服務(wù)器間非阻塞通信
本文主要介紹了利用Python中SocketServer 實(shí)現(xiàn)客戶端與服務(wù)器間非阻塞通信示例代碼,具有很好的參考價(jià)值,需要的朋友一起來看下吧2016-12-12
Python3獲取拉勾網(wǎng)招聘信息的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Python3獲取拉勾網(wǎng)招聘信息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
使用pyscript在網(wǎng)頁中撰寫Python程式的方法
本文主要介紹了使用pyscript在網(wǎng)頁中撰寫Python程式的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
python解析html提取數(shù)據(jù),并生成word文檔實(shí)例解析
這篇文章主要介紹了python解析html提取數(shù)據(jù),并生成word文檔實(shí)例解析,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
python設(shè)置環(huán)境變量的幾種方法總結(jié)
這篇文章主要介紹了在Python中設(shè)置環(huán)境變量可以通過多種方式實(shí)現(xiàn),包括使用os.environ、os.putenv、setuptools以及在操作系統(tǒng)級(jí)別設(shè)置,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01

