コード例 #1
0
ファイル: Server.cs プロジェクト: schifflee/bjd5
        void Log(SockUdp sockUdp, int messageNo, Mac mac, Ip ip, DhcpType type)
        {
            string macStr = mac.ToString();

            foreach (var m in _macAcl)
            {
                if (m.StrList[0].ToUpper() == mac.ToString())
                {
                    macStr = string.Format("{0}({1})", mac, m.StrList[2]);
                    break;
                }
            }
            Logger.Set(LogKind.Detail, sockUdp, messageNo, string.Format("{0} {1} {2}", macStr, (ip == null) ? "0.0.0.0" : ip.ToString(), type.ToString()));
        }
コード例 #2
0
ファイル: ServerTest.cs プロジェクト: jsakamoto/bjd5
        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);
        }
コード例 #3
0
ファイル: ServerTest.cs プロジェクト: schifflee/bjd5
        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);
        }
コード例 #4
0
ファイル: Server.cs プロジェクト: jsakamoto/bjd5
 void Log(SockUdp sockUdp,int messageNo, Mac mac,Ip ip,DhcpType type)
 {
     string macStr = mac.ToString();
     foreach (var m in _macAcl) {
         if (m.StrList[0].ToUpper() == mac.ToString()) {
             macStr = string.Format("{0}({1})",mac,m.StrList[2]);
             break;
         }
     }
     Logger.Set(LogKind.Detail, sockUdp, messageNo, string.Format("{0} {1} {2}", macStr, (ip == null) ? "0.0.0.0" : ip.ToString(), type.ToString()));
 }
コード例 #5
0
ファイル: PacketDhcp.cs プロジェクト: schifflee/bjd5
        //���M�p�P�b�g�p�̃R���X�g���N�^
        public PacketDhcp(uint id, Ip requestIp, Ip serverIp, Mac mac, DhcpType dhcpType, int leaseTime, Ip maskIp, Ip gwIp, Ip dnsIp0, Ip dnsIp1, string wpadUrl)
        {
            //public PacketDhcp(uint id,Ip requestIp,Ip serverIp,Mac mac,DHCP_TYPE dhcpType) {


            //Dmy init
            _headerDhcp.HopCount         = 0;
            _headerDhcp.NumberOfSecounds = 0;
            _headerDhcp.Flags            = 0;
            _headerDhcp.ClientIp         = 0;
            _headerDhcp.GatewayIp        = 0;


            _headerDhcp.ClientHwAddr   = new byte[16];
            _headerDhcp.ServerHostName = new String((char)0, 64);
            _headerDhcp.BootFile       = new String((char)0, 128);

            _headerDhcp.Opcode        = 0x02;// �����p�P�b�g
            _headerDhcp.HwType        = 0x01;
            _headerDhcp.HwAddrLen     = 0x06;
            _headerDhcp.TransactionId = id;
            _headerDhcp.MagicCookie   = 0x63538263;
            if (requestIp != null)
            {
                _headerDhcp.YourIp = Util.htonl(requestIp.AddrV4);
            }
            _headerDhcp.ServerIp = Util.htonl(serverIp.AddrV4);
            Buffer.BlockCopy(mac.GetBytes(), 0, _headerDhcp.ClientHwAddr, 0, 6);


            //�I�v�V����
            _option    = new byte[1];
            _option[0] = 0xFF;//�I�[�|�C���^��Z�b�g


            byte[] buf;//�I�v�V�����lj����̃e���|����
            //if (dhcpType != DHCP_TYPE.INFRM) {
            if (dhcpType == DhcpType.Ack || dhcpType == DhcpType.Offer)
            {
                // ERR if (dhcpType == DHCP_TYPE.OFFER) {
                //leaseTime
                double d = leaseTime / 0x2;
                uint   i = (uint)d;
                buf = BitConverter.GetBytes(Util.htonl(i));
                SetOptions(0x3a, buf);//Renewal Time

                d   = leaseTime * 0.85;
                i   = (uint)d;
                buf = BitConverter.GetBytes(Util.htonl(i));
                SetOptions(0x3b, buf);//Rebinding Time

                i   = (uint)leaseTime;
                buf = BitConverter.GetBytes(Util.htonl(i));
                SetOptions(0x33, buf);//Lease Time

                //serverIp
                byte [] dat = BitConverter.GetBytes(Util.htonl(serverIp.AddrV4));
                SetOptions(0x36, dat);

                //maskIp
                buf = BitConverter.GetBytes(Util.htonl(maskIp.AddrV4));
                SetOptions(0x01, buf);

                //gwIp
                buf = BitConverter.GetBytes(Util.htonl(gwIp.AddrV4));
                SetOptions(0x03, buf);


                //dnsIp0
                buf = new byte[0];
                if (dnsIp0 != null)
                {
                    buf = BitConverter.GetBytes(Util.htonl(dnsIp0.AddrV4));
                }
                if (dnsIp1 != null)
                {
                    byte [] tmp = BitConverter.GetBytes(Util.htonl(dnsIp1.AddrV4));
                    buf = Bytes.Create(buf, tmp);
                }
                if (buf.Length != 0)
                {
                    SetOptions(0x06, buf);
                }
                //wpad
                if (wpadUrl != null)
                {
                    byte[] tmp = Encoding.ASCII.GetBytes(wpadUrl);
                    SetOptions(252, tmp);
                }
            }

            buf = new byte[] { 0 };
            switch (dhcpType)
            {
            case DhcpType.Discover:
                buf[0] = 0x01;
                break;

            case DhcpType.Offer:
                buf[0] = 0x02;
                break;

            case DhcpType.Request:
                buf[0] = 0x03;
                break;

            case DhcpType.Decline:
                buf[0] = 0x04;
                break;

            case DhcpType.Ack:
                buf[0] = 0x05;
                break;

            case DhcpType.Nak:
                buf[0] = 0x06;
                break;

            case DhcpType.Release:
                buf[0] = 0x07;
                break;

            case DhcpType.Infrm:
                buf[0] = 0x08;
                break;
            }
            SetOptions(0x35, buf);
        }
コード例 #6
0
ファイル: PacketDhcp.cs プロジェクト: jsakamoto/bjd5
        //���M�p�P�b�g�p�̃R���X�g���N�^
        public PacketDhcp(uint id,Ip requestIp,Ip serverIp,Mac mac,DhcpType dhcpType,int leaseTime,Ip maskIp,Ip gwIp,Ip dnsIp0,Ip dnsIp1,string wpadUrl)
        {
            //public PacketDhcp(uint id,Ip requestIp,Ip serverIp,Mac mac,DHCP_TYPE dhcpType) {

            //Dmy init
            _headerDhcp.HopCount = 0;
            _headerDhcp.NumberOfSecounds = 0;
            _headerDhcp.Flags = 0;
            _headerDhcp.ClientIp = 0;
            _headerDhcp.GatewayIp = 0;

            _headerDhcp.ClientHwAddr = new byte[16];
            _headerDhcp.ServerHostName = new String((char)0,64);
            _headerDhcp.BootFile = new String((char)0, 128);

            _headerDhcp.Opcode = 0x02;// �����p�P�b�g
            _headerDhcp.HwType = 0x01;
            _headerDhcp.HwAddrLen = 0x06;
            _headerDhcp.TransactionId = id;
            _headerDhcp.MagicCookie = 0x63538263;
            if(requestIp!=null)
                _headerDhcp.YourIp = Util.htonl(requestIp.AddrV4);
            _headerDhcp.ServerIp = Util.htonl(serverIp.AddrV4);
            Buffer.BlockCopy(mac.GetBytes(),0,_headerDhcp.ClientHwAddr,0,6);

            //�I�v�V����
            _option = new byte[1];
            _option[0] = 0xFF;//�I�[�|�C���^��Z�b�g

            byte[] buf;//�I�v�V�����lj����̃e���|����
            //if (dhcpType != DHCP_TYPE.INFRM) {
            if (dhcpType == DhcpType.Ack || dhcpType == DhcpType.Offer) {
            // ERR if (dhcpType == DHCP_TYPE.OFFER) {
                //leaseTime
                double d = leaseTime/0x2;
                uint i = (uint)d;
                buf = BitConverter.GetBytes(Util.htonl(i));
                SetOptions(0x3a,buf);//Renewal Time

                d = leaseTime*0.85;
                i = (uint)d;
                buf = BitConverter.GetBytes(Util.htonl(i));
                SetOptions(0x3b,buf);//Rebinding Time

                i = (uint)leaseTime;
                buf = BitConverter.GetBytes(Util.htonl(i));
                SetOptions(0x33,buf);//Lease Time

                //serverIp
                byte [] dat = BitConverter.GetBytes(Util.htonl(serverIp.AddrV4));
                SetOptions(0x36,dat);

                //maskIp
                buf = BitConverter.GetBytes(Util.htonl(maskIp.AddrV4));
                SetOptions(0x01,buf);

                //gwIp
                buf = BitConverter.GetBytes(Util.htonl(gwIp.AddrV4));
                SetOptions(0x03, buf);

                //dnsIp0
                buf = new byte[0];
                if(dnsIp0!=null){
                    buf = BitConverter.GetBytes(Util.htonl(dnsIp0.AddrV4));
                }
                if(dnsIp1!=null){
                    byte [] tmp = BitConverter.GetBytes(Util.htonl(dnsIp1.AddrV4));
                    buf = Bytes.Create(buf,tmp);
                }
                if(buf.Length!=0){
                    SetOptions(0x06,buf);
                }
                //wpad
                if(wpadUrl != null) {
                    byte[] tmp = Encoding.ASCII.GetBytes(wpadUrl);
                    SetOptions(252,tmp);
                }

            }

            buf = new byte[] { 0 };
            switch (dhcpType) {
                case DhcpType.Discover:
                    buf[0] = 0x01;
                    break;
                case DhcpType.Offer:
                    buf[0] = 0x02;
                    break;
                case DhcpType.Request:
                    buf[0] = 0x03;
                    break;
                case DhcpType.Decline:
                    buf[0] = 0x04;
                    break;
                case DhcpType.Ack:
                    buf[0] = 0x05;
                    break;
                case DhcpType.Nak:
                    buf[0] = 0x06;
                    break;
                case DhcpType.Release:
                    buf[0] = 0x07;
                    break;
                case DhcpType.Infrm:
                    buf[0] = 0x08;
                    break;

            }
            SetOptions(0x35, buf);
        }