Exemple #1
0
 //���X�|���X�p�P�b�g�̑��M
 void Send(SockUdp sockUdp, PacketDhcp sp)
 {
     //���M
     sockUdp.Send(sp.GetBuffer());
     //this.Logger.Set(LogKind.Detail,sockUdp,4,string.Format("{0} {1} {2}",sp.Mac,(sp.RequestIp == null) ? "0.0.0.0" : sp.RequestIp.ToString(),sp.Type.ToString()));
     Log(sockUdp, 4, sp.Mac, sp.RequestIp, sp.Type);
 }
Exemple #2
0
        public void RequestTest(string requestIpStr, string macStr, DhcpType ans)
        {
            const ushort id = 100;
            var requestIp = new Ip(requestIpStr);
            var serverIp = new Ip("127.0.0.1");
            var mac = new Mac(macStr);
            var maskIp = new Ip("255.255.255.0");
            var gwIp = new Ip("0.0.0.0");
            var dnsIp0 = new Ip("0.0.0.0");
            var dnsIp1 = new Ip("0.0.0.0");
            var sp = new PacketDhcp(id, requestIp, serverIp, mac, DhcpType.Discover, 3600, maskIp, gwIp, dnsIp0, dnsIp1, "");

            var bytes = sp.GetBuffer();
            bytes[0] = 1;//Opecode = 2->1

            var rp = Access(bytes);
            Assert.AreEqual(rp.Type, ans);
        }
Exemple #3
0
        public void ConnectTest()
        {
            const ushort id = 100;
            var requestIp = new Ip("127.0.0.1");
            var serverIp = new Ip("127.0.0.1");
            var mac = new Mac("11-22-33-44-55-66");
            var maskIp = new Ip("255.255.255.0");
            var gwIp = new Ip("255.255.255.0");
            var dnsIp0 = new Ip("255.255.255.0");
            var dnsIp1 = new Ip("255.255.255.0");
            var sp = new PacketDhcp(id, requestIp, serverIp, mac, DhcpType.Discover, 3600, maskIp, gwIp, dnsIp0, dnsIp1, "");

            var bytes = sp.GetBuffer();
            bytes[0] = 1;//Opecode = 2->1

            var rp = Access(bytes);
            Assert.AreEqual(rp.Type,DhcpType.Offer);
        }
Exemple #4
0
 //���X�|���X�p�P�b�g�̑��M
 void Send(SockUdp sockUdp,PacketDhcp sp)
 {
     //���M
     sockUdp.Send(sp.GetBuffer());
     //this.Logger.Set(LogKind.Detail,sockUdp,4,string.Format("{0} {1} {2}",sp.Mac,(sp.RequestIp == null) ? "0.0.0.0" : sp.RequestIp.ToString(),sp.Type.ToString()));
     Log(sockUdp, 4, sp.Mac,sp.RequestIp,sp.Type);
 }
Exemple #5
0
        //�ڑ��P�ʂ̏���
        protected override void OnSubThread(SockObj sockObj)
        {
            var sockUdp = (SockUdp)sockObj;
            if (sockUdp.RemoteAddress.Port != 68) {// �ڑ����|�[�g�ԍ���68�ȊO�́ADHCP�p�P�b�g�ł͂Ȃ��̂Ŕj������
                return;
            }

            //�p�P�b�g�̓Ǎ�(��M�p�P�b�grp)
            var rp = new PacketDhcp();
            if (!rp.Read(sockUdp.RecvBuf))
                return; //�f�[�^��߂Ɏ��s�����ꍇ�́A�����Ȃ�

            if (rp.Opcode != 1)
                return;//OpCode���u�v���v�Ŗ����ꍇ�́A��������

            //���M���u���[�h�L���X�g�ɐݒ肷��
            var ep = new IPEndPoint(IPAddress.Broadcast, 68);
            sockUdp.RemoteAddress = ep;

            //********************************************************
            // MAC����
            //********************************************************
            if ((bool)Conf.Get("useMacAcl")) {// MAC���䂪�L���ȏꍇ
                if (!_lease.SearchMac(rp.Mac)) {
                    Logger.Set(LogKind.Secure,sockUdp,1,rp.Mac.ToString());
                    return;
                }
            }

            // �r������ (�f�[�^�x�[�X�����̂���)
            lock (_lockObj) {

                //�T�[�o�A�h���X
                Ip serverIp = rp.ServerIp;
                if (serverIp.AddrV4 == 0) {
                    serverIp = new Ip(_serverAddress);
                }
                //���N�G�X�g�A�h���X
                Ip requestIp = rp.RequestIp;

                //this.Logger.Set(LogKind.Detail,sockUdp,3,string.Format("{0} {1} {2}",rp.Mac,requestIp.ToString(),rp.Type.ToString()));
                Log(sockUdp, 3, rp.Mac, requestIp, rp.Type);

                if (rp.Type == DhcpType.Discover) {// ���o

                    requestIp = _lease.Discover(requestIp, rp.Id, rp.Mac);
                    if(requestIp!=null){
                        // OFFER���M
                        var sp = new PacketDhcp(rp.Id,requestIp,serverIp,rp.Mac,DhcpType.Offer,_leaseTime,_maskIp,_gwIp,_dnsIp0,_dnsIp1,_wpadUrl);
                        Send(sockUdp,sp);
                    }
                } else if (rp.Type == DhcpType.Request) {// �v��

                    requestIp = _lease.Request(requestIp, rp.Id, rp.Mac);
                    if (requestIp != null) {

                        if (serverIp.ToString() == _serverAddress) {// ���T�[�o����
                            // ACK���M
                            var sp = new PacketDhcp(rp.Id,requestIp,serverIp,rp.Mac,DhcpType.Ack,_leaseTime,_maskIp,_gwIp,_dnsIp0,_dnsIp1,_wpadUrl);
                            Send(sockUdp,sp);

                            //this.Logger.Set(LogKind.Normal,sockUdp,5,string.Format("{0} {1} {2}",rp.Mac,requestIp.ToString(),rp.Type.ToString()));
                            Log(sockUdp, 5, rp.Mac, requestIp, rp.Type);
                        } else {
                            _lease.Release(rp.Mac);//����������
                        }

                    } else {
                        // NACK���M
                        var sp = new PacketDhcp(rp.Id,requestIp,serverIp,rp.Mac,DhcpType.Nak,_leaseTime,_maskIp,_gwIp,_dnsIp0,_dnsIp1,_wpadUrl);
                        Send(sockUdp,sp);
                    }
                } else if (rp.Type == DhcpType.Release) {// �J��
                    requestIp = _lease.Release(rp.Mac);//�J��
                    if(requestIp!=null)
                        //this.Logger.Set(LogKind.Normal,sockUdp,6,string.Format("{0} {1} {2}",rp.Mac,requestIp.ToString(),rp.Type.ToString()));
                        Log(sockUdp, 6, rp.Mac, requestIp, rp.Type);
                } else if (rp.Type == DhcpType.Infrm) {// ���
                    // ACK���M
                    //Send(sockUdp,sp);
                }
            }// �r������
        }
Exemple #6
0
        //�ڑ��P�ʂ̏���
        override protected void OnSubThread(SockObj sockObj)
        {
            var sockUdp = (SockUdp)sockObj;

            if (sockUdp.RemoteAddress.Port != 68)  // �ڑ����|�[�g�ԍ���68�ȊO�́ADHCP�p�P�b�g�ł͂Ȃ��̂Ŕj������
            {
                return;
            }

            //�p�P�b�g�̓Ǎ�(��M�p�P�b�grp)
            var rp = new PacketDhcp();

            if (!rp.Read(sockUdp.RecvBuf))
            {
                return; //�f�[�^��߂Ɏ��s�����ꍇ�́A�����Ȃ�
            }
            if (rp.Opcode != 1)
            {
                return;//OpCode���u�v���v�Ŗ����ꍇ�́A��������
            }
            //���M���u���[�h�L���X�g�ɐݒ肷��
            var ep = new IPEndPoint(IPAddress.Broadcast, 68);

            sockUdp.RemoteAddress = ep;

            //********************************************************
            // MAC����
            //********************************************************
            if ((bool)Conf.Get("useMacAcl"))  // MAC���䂪�L���ȏꍇ
            {
                if (!_lease.SearchMac(rp.Mac))
                {
                    Logger.Set(LogKind.Secure, sockUdp, 1, rp.Mac.ToString());
                    return;
                }
            }

            // �r������ (�f�[�^�x�[�X�����̂���)
            lock (_lockObj) {
                //�T�[�o�A�h���X
                Ip serverIp = rp.ServerIp;
                if (serverIp.AddrV4 == 0)
                {
                    serverIp = new Ip(_serverAddress);
                }
                //���N�G�X�g�A�h���X
                Ip requestIp = rp.RequestIp;

                //this.Logger.Set(LogKind.Detail,sockUdp,3,string.Format("{0} {1} {2}",rp.Mac,requestIp.ToString(),rp.Type.ToString()));
                Log(sockUdp, 3, rp.Mac, requestIp, rp.Type);

                if (rp.Type == DhcpType.Discover)  // ���o

                {
                    requestIp = _lease.Discover(requestIp, rp.Id, rp.Mac);
                    if (requestIp != null)
                    {
                        // OFFER���M
                        var sp = new PacketDhcp(rp.Id, requestIp, serverIp, rp.Mac, DhcpType.Offer, _leaseTime, _maskIp, _gwIp, _dnsIp0, _dnsIp1, _wpadUrl);
                        Send(sockUdp, sp);
                    }
                }
                else if (rp.Type == DhcpType.Request)    // �v��

                {
                    requestIp = _lease.Request(requestIp, rp.Id, rp.Mac);
                    if (requestIp != null)
                    {
                        if (serverIp.ToString() == _serverAddress)  // ���T�[�o����
                        // ACK���M
                        {
                            var sp = new PacketDhcp(rp.Id, requestIp, serverIp, rp.Mac, DhcpType.Ack, _leaseTime, _maskIp, _gwIp, _dnsIp0, _dnsIp1, _wpadUrl);
                            Send(sockUdp, sp);

                            //this.Logger.Set(LogKind.Normal,sockUdp,5,string.Format("{0} {1} {2}",rp.Mac,requestIp.ToString(),rp.Type.ToString()));
                            Log(sockUdp, 5, rp.Mac, requestIp, rp.Type);
                        }
                        else
                        {
                            _lease.Release(rp.Mac);//����������
                        }
                    }
                    else
                    {
                        // NACK���M
                        var sp = new PacketDhcp(rp.Id, requestIp, serverIp, rp.Mac, DhcpType.Nak, _leaseTime, _maskIp, _gwIp, _dnsIp0, _dnsIp1, _wpadUrl);
                        Send(sockUdp, sp);
                    }
                }
                else if (rp.Type == DhcpType.Release)   // �J��
                {
                    requestIp = _lease.Release(rp.Mac); //�J��
                    if (requestIp != null)
                    {
                        //this.Logger.Set(LogKind.Normal,sockUdp,6,string.Format("{0} {1} {2}",rp.Mac,requestIp.ToString(),rp.Type.ToString()));
                        Log(sockUdp, 6, rp.Mac, requestIp, rp.Type);
                    }
                }
                else if (rp.Type == DhcpType.Infrm)    // ���
                // ACK���M
                //Send(sockUdp,sp);
                {
                }
            }// �r������
        }
Exemple #7
0
        PacketDhcp Access(byte [] buf)
        {
            //クライアントソケット生成、及び送信
            var cl = new UdpClient(68);
            cl.Connect((new Ip(IpKind.V4Localhost)).IPAddress, 67); //クライアントのポートが67でないとサーバが応答しない
            cl.Send(buf,buf.Length);

            //受信
            var ep = new IPEndPoint(0, 0);
            var recvBuf = cl.Receive(ref ep);
            if (recvBuf.Length == 0) {
                Assert.Fail();//受信データが無い場合
            }
            var rp = new PacketDhcp();
            rp.Read(recvBuf);

            cl.Close();
            return rp;
        }