예제 #1
0
        private void SendPacket(DhcpMessageType dhcpMessageType, DhcpPacket responsePacket, IPAddress address, int port)
        {
            Console.WriteLine("{0:X8}: Sending packet type {1} to {2}:{3}", responsePacket.xid, dhcpMessageType, address, port);

            responsePacket.Options.SetByte(DhcpPacketOptionId.DhcpMessageType, (Byte)dhcpMessageType);

            var broadcast = address == IPAddress.Broadcast;

            responsePacket.flags = (UInt16)(broadcast ? 0x8000 : 0x0000);

            var bytes = responsePacket.ToArray();

            DhcpPacket.TraceToFile(bytes);

            var endPoint = new IPEndPoint(address, port);

            SendData(bytes, endPoint);

            Console.WriteLine("{0:X8}: Packet sent", responsePacket.xid);
        }
예제 #2
0
        protected override void ProcessRequest(IPEndPoint remoteEndPoint, Byte[] data, int dataLength)
        {
            DhcpPacket.TraceToFile(data);

            var dhcpPacket = new DhcpPacket(data, dataLength);

            Console.WriteLine("{0:X8}: *** DHCP packet type {1} received on port {2}", dhcpPacket.xid, dhcpPacket.MessageType, Port);

            var vendorClassIdentifier = dhcpPacket.VendorClassIdentifier;

            if (String.IsNullOrEmpty(vendorClassIdentifier) || !vendorClassIdentifier.StartsWith("PXEClient"))
            {
                Console.WriteLine("{0:X8}: Not a BOOTP request", dhcpPacket.xid);
                return;
            }

            PacketReceived(this, dhcpPacket);

            switch (dhcpPacket.MessageType)
            {
            case DhcpMessageType.DhcpDiscover:
                ProcessDiscoverRequest(dhcpPacket);
                break;

            case DhcpMessageType.DhcpRequest:
                if (Port != 4011)
                {
                    Console.WriteLine("{0:X8}: Not a BOOTP request", dhcpPacket.xid);
                    return;
                }
                ProcessRequestRequest(dhcpPacket);
                break;

            default:
                Console.WriteLine("{0:X8}: Message type not handled", dhcpPacket.xid);
                break;
            }
        }