コード例 #1
0
 // コンストラクタ(構築)
 public DhcpOption53(DhcpPacket.MessageType message_type)
     : this()
 {
     this._Code         = 53;
     this.message_type_ = message_type;
     this._bytes        = new byte[1] {
         (byte)message_type
     };
 }
コード例 #2
0
 // コンストラクタ
 // 受信パケットの Parameter Request List ベース
 public DhcpOptions(DhcpPacket.MessageType message_type, PhysicalAddress chaddr, DhcpOption55 dhcpoption55, DhcpLeases dhcplease)
     : this()
 {
     if (message_type == DhcpPacket.MessageType.DHCPOFFER)
     {
         BuildDHCPOFFER(chaddr, dhcpoption55, dhcplease);
     }
     if (message_type == DhcpPacket.MessageType.DHCPACK)
     {
         BuildDHCPACK(chaddr, dhcpoption55, dhcplease);
     }
 }
コード例 #3
0
 // コンストラクタ
 // その他のパケットをベースに作成
 public DhcpPacket(DhcpPacket basePacket, DhcpPacket.MessageType message_type, DhcpLeases dhcplease)
     : this()
 {
     if (message_type == MessageType.DHCPOFFER)
     {
         BuildDHCPOFFER(basePacket, dhcplease);
     }
     if (message_type == MessageType.DHCPACK)
     {
         BuildDHCPACK(basePacket, dhcplease);
     }
 }
コード例 #4
0
 // 解析
 public override void Analyze()
 {
     this.message_type_ = (DhcpPacket.MessageType)(this._bytes[0]);
     if (
         (DhcpPacket.MessageType.DHCPDISCOVER <= this.message_type_) &&
         (this.message_type_ <= DhcpPacket.MessageType.DHCPINFORM)
         )
     {
         // OK
     }
     else
     {
         this.message_type_ = DhcpPacket.MessageType.unknown;
     }
 }
コード例 #5
0
ファイル: Form1.cs プロジェクト: gisaki/dhcp_test_server
        // UDP送信
        private void SendUDP(IPAddress sourceIPAddress, int sourcePort, IPAddress remoteIPAddress, int remotePort)
        {
            // 送信元
            var localEP = new IPEndPoint(sourceIPAddress, sourcePort);
            // 送信先
            var remoteEP = new IPEndPoint(remoteIPAddress, remotePort);
            // 送信データ
            DhcpPacket rcv_packet = new DhcpPacket(this.lastRcvBytes_);

            DhcpPacket.MessageType snd_message_type =
                (rcv_packet.message_type_ == DhcpPacket.MessageType.DHCPDISCOVER)? DhcpPacket.MessageType.DHCPOFFER:
                (rcv_packet.message_type_ == DhcpPacket.MessageType.DHCPREQUEST)? DhcpPacket.MessageType.DHCPACK:
                DhcpPacket.MessageType.unknown;
            if (snd_message_type == DhcpPacket.MessageType.unknown)
            {
                return;
            }
            DhcpPacket snd_packet = new DhcpPacket(rcv_packet, snd_message_type, this.dhcplease_);

            byte[] msg = snd_packet.GetPacketBytes();

            //データを文字列に変換する
            string rcvMsg = "0x" + snd_packet.xid_.ToString("X4") + ", " + snd_packet.message_type_;

            //送信したデータの情報をRichTextBoxに表示する
            string displayMsg = string.Format("{0} [{1} ({2})] > {3}",
                                              DateTime.Now.ToString("HH:mm:ss.fff"), remoteEP.Address, remoteEP.Port, rcvMsg);

            textBoxRcvData.BeginInvoke(
                new Action <string>(ShowReceivedString), displayMsg);

            // 送信イベントデータ
            var ev = new SocketAsyncEventArgs();

            ev.RemoteEndPoint = remoteEP;
            ev.SetBuffer(msg, 0, msg.Length);
            // UDP送信
            var socket = new Socket(SocketType.Dgram, ProtocolType.Udp);

            socket.Bind(localEP);   // bindしたIP、ポートと異なる送信元としたい(場合がある)のでudpClient_は使用しない
            socket.SendToAsync(ev); // 非同期で送信
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
        }