o
    àý°jB  ã                   @   sD   d dl mZ d dlmZ G dd„ deejƒZG dd„ deejƒZdS )é    )Ú	structure)ÚProtocolPacketc                   @   s   e Zd ZdZddd„ZdS )ÚBootpPacket))ÚopÚb)Úhtypezb=1)Úhlenzb=len(chaddr))Úhopszb=0)Úxidú!L=0)Úsecsú!H=0)Úflagsr   )Úciaddrr   )Úyiaddrr   )Úsiaddrr   )Úgiaddrr   )Ú_chaddrz
16s=chaddr)ÚchaddrÚ_z_chaddr[:hlen])Úsnamez64s="")Úfilez128s=""Nr   c                 C   ó   t j | ||¡ d S ©N©r   Ú	StructureÚ__init__©ÚselfÚdataÚ	alignment© r!   ú€/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/dhcp.pyr   !   ó   zBootpPacket.__init__©Nr   )Ú__name__Ú
__module__Ú__qualname__Ú	commonHdrr   r!   r!   r!   r"   r      s    r   c                   @   s,  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZd	Zi d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“i d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“¥i dNdO“dPdQ“dRdS“dTdU“dVdW“dXdY“dZd[“d\d]“d^d_“d`da“dbdc“ddde“dfdg“dhdi“djdk“dldm“dndo“¥i dpdq“drds“dtdu“dvdw“dxdy“dzd{“d|d}“d~d“d€d“d‚dƒ“d„d…“d†d‡“dˆd‰“dŠd‹“dŒd“dŽd“dd‘“¥d’d“d”d•d–œ¥Zd—Zd¨dšd›„Zdœd„ ZdždŸ„ Zd d¡„ Zd¢d£„ Zd¤d¥„ Zd¦d§„ Zd˜S )©Ú
DhcpPacketicS‚cé   é   é   é   é   é   é   é   Úpad)r   r   zsubnet-mask)r*   ú!Lztime-offset)r+   r3   Úrouter)r,   ú*!Lztime-server)r-   r5   zname-server)r.   r5   zdomain-name-server)r/   r5   z
log-server)r0   r5   zcookie-server)r1   r5   z
lpr-server)é	   r5   zimpress-server)é
   r5   zresource-locator-server)é   r5   z	host-name)é   ú:zboot-file-size)é   ú!Hzmerit-dump-file)é   r:   zdomain-name)é   r:   zswap-server)é   r:   z	root-path)é   r:   zextensions-path)é   r:   zip-forwarding)é   ÚBznon-local-source-routing)é   rC   zpolicy-filter)é   r5   z maximum-datagram-reassembly-size)é   r<   zdefault-ip-ttl)é   rC   zpath-mtu-aging-timeout)é   r3   zpath-mtu-plateau-table)é   z*!Hzinterface-mtu)é   r<   zall-subnets-are-local)é   rC   zbroadcast-address)é   r3   zperform-mask-discovery)é   rC   zmask-supplier)é   rC   zperform-router-discovery)é   rC   zrouter-solicitation-address)é    r3   zstatic-route)é!   r5   ztrailer-encapsulation)é"   rC   zarp-cache-timeout)é#   r3   zethernet-encapsulation)é$   rC   ztcp-default-ttl)é%   rC   ztcp-keepalive-interval)é&   r3   ztcp-keepalive-garbage)é'   rC   z
nis-domain)é(   r:   znis-servers)é)   r5   zntp-servers)é*   r5   zvendor-specific)é+   r:   znetbios-name-server)é,   r5   z%netbios-datagrame-distribution-server)é-   r5   znetbios-node-type)é.   rC   znetbios-scope)é/   r:   zx11-font-server)é0   r5   zx11-display-manager)é1   r5   zrequested-ip)é2   r3   z
lease-time)é3   r3   zoption-overload)é4   rC   zmessage-type)é5   rC   z	server-id)é6   r3   úparameter-request-list)é7   r:   Úmessage)é8   r:   zmaximum-dhcp-message-size)é9   r<   zrenewal-time)é:   r3   zrebinding-time)é;   r3   zvendor-class)é<   r:   z	client-id)é=   r:   zslp-directory-agent)éN   r:   zslp-service-scope)éO   r:   zfully-qualified-domain-name)éQ   r:   zdefault-url)ér   r:   zauto-configuration)ét   rC   zdomain-search-list)éw   r:   )éy   r:   )éù   r:   )éü   r:   )éÿ   r   )zclassless-route-121zclassless-route-249zproxy-autoconfigÚeof))Úcookier3   )Ú_optionsz:=self.packOptions(options))Úoptionsr   zself.unpackOptions(_options)Nr   c                 C   r   r   r   r   r!   r!   r"   r   •   r#   zDhcpPacket.__init__c                 C   sF   d}|D ]\}}| j | \}}|  ||¡}|d|t|ƒ|f 7 }q|S )Nó    s   %c%c%s)r}   ÚpackÚlen)r   r}   ÚanswerÚnameÚvalueÚcodeÚformatÚvalr!   r!   r"   ÚpackOptions˜   s   zDhcpPacket.packOptionsc                 C   s6   | j D ]}| j | \}}||kr||f  S q|dfS )Nr:   )r}   )r   Ú
optionCodeÚkr„   r…   r!   r!   r"   ÚgetOptionNameAndFormat£   s   
z!DhcpPacket.getOptionNameAndFormatc                 C   s   g }d}t |ƒ}|t|ƒd k rF|  || ¡\}}||d  }|  |t||d |d | … ƒ¡}| ||f¡ |d| 7 }|t|ƒd k s|S )Nr   r*   r+   )Ú	bytearrayr€   rŠ   ÚunpackÚbytesÚappend)r   r}   r   Úir‚   r…   Úsizerƒ   r!   r!   r"   ÚunpackOptions©   s   $ù	zDhcpPacket.unpackOptionsc                    s   ‡ fdd„|D ƒS )Nc                    s   g | ]}ˆ   t|ƒ¡d  ‘qS )r   )rŠ   Úord)Ú.0Úopt©r   r!   r"   Ú
<listcomp>¼   s    z9DhcpPacket.unpackParameterRequestList.<locals>.<listcomp>r!   )r   r}   r!   r•   r"   ÚunpackParameterRequestList»   s   z%DhcpPacket.unpackParameterRequestListc                 C   sB   | j d D ]}|d dkr|d D ]}t|ƒdkr  dS qqdS )Nr}   r   rg   r*   rx   TF)Úfieldsr’   )r   r”   ÚoptCoder!   r!   r"   ÚisAskingForProxyAutodiscovery¾   s   ÿ€z(DhcpPacket.isAskingForProxyAutodiscoveryc                 C   s,   | j d D ]}|d |kr|d   S qd S )Nr}   r   r*   )r˜   )r   r‚   r”   r!   r!   r"   ÚgetOptionValueÆ   s
   ÿzDhcpPacket.getOptionValuer$   )r%   r&   r'   ÚMAGIC_NUMBERÚBOOTREQUESTÚ	BOOTREPLYÚDHCPDISCOVERÚ	DHCPOFFERÚDHCPREQUESTÚDHCPDECLINEÚDHCPACKÚDHCPNAKÚDHCPRELEASEÚ
DHCPINFORMr}   r   r   r‡   rŠ   r‘   r—   rš   r›   r!   r!   r!   r"   r)   $   sD   þýüûúùø	÷
öõôóòñðïîíìéèçæåäã à!ß"Þ#Ý$Ü%Û&Ú'Ù*Ö+Õ,Ô/Ñ0Ð1Ï4Ì5Ë6Ê7É8È9Ç:Æ;Å<Ä=ÃA¿B¾C½D¼E»FºG¹H¸I·J¶KµL´O±P°Q¯R®S­T¬U¨[
r)   N)Úimpacketr   Úimpacket.ImpactPacketr   r   r   r)   r!   r!   r!   r"   Ú<module>   s   