public void Process(DHCPRequest dhcpRequest) { var requestType = dhcpRequest.GetMsgType(); Trace.WriteLine(requestType + " Proxy Request From " + Utility.ByteArrayToString(dhcpRequest.GetChaddr(), true) + " " + dhcpRequest.GetSourceIP() + ":" + dhcpRequest.GetSourcePort()); var clientHardwareAddress = new PhysicalAddress(dhcpRequest.GetChaddr()); if (DHCPServer.AclList.ContainsKey(clientHardwareAddress) && !DHCPServer.AclList[clientHardwareAddress] || !DHCPServer.AclList.ContainsKey(clientHardwareAddress) && !Settings.AllowAll) { Trace.WriteLine("Request Denied By ACL - Ignoring"); return; } var vendorId = dhcpRequest.GetVendorOptionData(); if (vendorId != null) { var strVendorId = Utility.ByteArrayToString(vendorId, true); Trace.WriteLine("Vendor Class Id " + strVendorId + " " + Encoding.Default.GetString(vendorId)); if (requestType == DHCPMsgType.DHCPREQUEST && strVendorId.StartsWith("505845436C69656E74")) { //Expected Format: 505845436C69656E743A417263683A30303030303A554E44493A303032303031 (PXEClient:Arch:00000:UNDI:002001) ProcessProxyRequest(dhcpRequest); } else { Trace.WriteLine("Request Is Not A Proxy PXE Request - Ignoring"); } } else { Trace.WriteLine("No Proxy Vendor Class Id Supplied - Ignoring"); } Trace.WriteLine(""); }
private void CompleteRequest(object o) { DhcpData messageData = (DhcpData)o; EndPoint source = new IPEndPoint(IPAddress.Any, 0); try { _socket.EndReceiveFrom(messageData.Result, ref source); messageData.Source = (IPEndPoint)source; var dhcpRequest = new DHCPRequest(messageData.MessageBuffer, _socket, messageData.Source, this); OnDataReceived(dhcpRequest); var msgType = dhcpRequest.GetMsgType(); switch (msgType) { case DHCPMsgType.DHCPDISCOVER: OnDiscover(dhcpRequest); break; case DHCPMsgType.DHCPREQUEST: OnRequest(dhcpRequest); break; case DHCPMsgType.DHCPINFORM: OnInform(dhcpRequest); break; default: Trace.WriteLine("Message Type Not Handled By CloneDeploy Proxy DHCP - Ignoring Request"); break; } } catch { //throw; } }
public void Process(DHCPRequest dhcpRequest) { var requestType = dhcpRequest.GetMsgType(); if (requestType != DHCPMsgType.DHCPDISCOVER && requestType != DHCPMsgType.DHCPINFORM) { return; } var clientHardwareAddress = new PhysicalAddress(dhcpRequest.GetChaddr()); if (DHCPServer.AclList.ContainsKey(clientHardwareAddress) && !DHCPServer.AclList[clientHardwareAddress] || !DHCPServer.AclList.ContainsKey(clientHardwareAddress) && !Settings.AllowAll) { Trace.WriteLine("Request Denied By ACL - Ignoring"); return; } var vendorId = dhcpRequest.GetVendorOptionData(); if (vendorId != null) { Trace.WriteLine(requestType + " Request From " + Utility.ByteArrayToString(dhcpRequest.GetChaddr(), true)); var strVendorId = Utility.ByteArrayToString(vendorId, true); //Expected Format: 505845436C69656E743A417263683A30303030303A554E44493A303032303031 (PXEClient:Arch:00000:UNDI:002001) if (strVendorId.StartsWith("505845436C69656E74")) { ProcessPXERequest(dhcpRequest); } if (!Settings.ListenBSDP) { return; } Trace.WriteLine("Vendor Class Id " + strVendorId); //Expected Format: 4141504C42534450432F693338362F694D616331342C33 (AAPLBSDPC/i386/iMac14,3) if (strVendorId.StartsWith("4141504C4253445043")) { var vendorSpecificInformation = dhcpRequest.GetVendorSpecificInformation(); if (vendorSpecificInformation != null) { var strVendorInformation = Utility.ByteArrayToString(vendorSpecificInformation, true); if (strVendorInformation.Length >= 6) { switch (strVendorInformation.Substring(0, 6)) { case "010101": SendAppleBootList(dhcpRequest); break; case "010102": var interfaceHex = Utility.ByteArrayToString( string.IsNullOrEmpty(Settings.ServerIdentifierOverride) ? IPAddress.Parse(Settings.Nic).GetAddressBytes() : IPAddress.Parse(Settings.ServerIdentifierOverride) .GetAddressBytes(), true); if (strVendorInformation.Contains(interfaceHex)) { SendSelectedNetBoot(dhcpRequest); } else { Trace.WriteLine("Different BSDP Server Targeted - Ignoring"); } break; default: Trace.WriteLine( "Not An Apple BSDP Request, Vendor Specific Information Mismatch - Ignoring"); break; } } } } } Trace.WriteLine(""); }