PwSh.Fw.Network.DHCPv4.psm1
<#
.SYNOPSIS Module to handle DHCP requests .DESCRIPTION Module to handle DHCP packets .NOTES #> # DHCP Packet Format (RFC 2131 - http://www.ietf.org/rfc/rfc2131.txt): # 0 1 2 3 # 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | op (1) | htype (1) | hlen (1) | hops (1) | # +---------------+---------------+---------------+---------------+ # | xid (4) | # +-------------------------------+-------------------------------+ # | secs (2) | flags (2) | # +-------------------------------+-------------------------------+ # | ciaddr (4) | # +---------------------------------------------------------------+ # | yiaddr (4) | # +---------------------------------------------------------------+ # | siaddr (4) | # +---------------------------------------------------------------+ # | giaddr (4) | # +---------------------------------------------------------------+ # | | # | chaddr (16) | # | | # | | # +---------------------------------------------------------------+ # | | # | sname (64) | # +---------------------------------------------------------------+ # | | # | file (128) | # +---------------------------------------------------------------+ # | | # | options (variable) | # +---------------------------------------------------------------+ $Script:socketIn = $null $Script:socketOut = $null <# .SYNOPSIS Short description .DESCRIPTION Long description .PARAMETER string Parameter description .EXAMPLE An example .NOTES General notes #> function Send-DHCPv4Packet { [CmdletBinding()]Param ( [Parameter(Mandatory = $true, ValueFromPipeLine = $true)][DHCPv4Packet]$Packet, [Alias('Destination')] [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][ipAddress]$ipaddress =[net.ipaddress]::Broadcast ) Begin { Write-EnterFunction } Process { $Packet.Send($ipaddress) } End { Write-LeaveFunction } } function Receive-DHCPv4Packet { [CmdletBinding()] [OutputType([DHCPv4Packet])] Param ( [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][string]$xid, [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][ipAddress]$ipaddress = [net.ipaddress]::any, [Parameter(Mandatory = $false, ValueFromPipeLine = $false)][uint16]$port = 0, [uint16]$timeout = 10000 ) Begin { Write-EnterFunction } Process { # $packet = [DHCPv4Packet]::New() # $packet.Receive($ipaddress, $xid) $client = new-object net.sockets.udpclient($ipaddress, $port) # $client.Connect(68) $client.Client.ReceiveTimeout = $timeout $ipep = new-object net.ipendpoint([net.ipaddress]::any, 0) $receive = $client.receive([ref]$ipep) $client.close() return $receive } End { Write-LeaveFunction } } |