예제 #1
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void getPostMasterの確認()
 {
     //setUp
     string expected = "root.aaa.com.";
     RrSoa sut = new RrSoa("aaa.com.", 0, "ns.aaa.com.", expected, 1, 2, 3, 4, 5);
     //exercise
     string actual = sut.PostMaster;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #2
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void getRefreshの確認()
 {
     //setUp
     var expected = 300u;
     RrSoa sut = new RrSoa("aaa.com.", 0, "ns.aaa.com.", "postmaster.", 1, expected, 3, 4, 5);
     //exercise
     uint actual = sut.Refresh;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #3
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void getNameServerの確認()
 {
     //setUp
     string expected = "ns.aaa.com.";
     RrSoa sut = new RrSoa("aaa.com", 0, expected, "post.master.", 1, 2, 3, 4, 5);
     //exercise
     string actual = sut.NameServer;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #4
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void getMinimumの確認()
 {
     //setUp
     uint expected = 300u;
     var sut = new RrSoa("aaa.com", 0, "ns.aaa.com.", "postmaster.", 1, 2, 3, 4, expected);
     //exercise
     uint actual = sut.Minimum;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #5
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void getExpireの確認()
 {
     //setUp
     uint expected = 500u;
     RrSoa sut = new RrSoa("aaa.com", 0, "ns.aaa.com.", "postmaster.", 1, 2, 3, expected, 5);
     //exercise
     uint actual = sut.Expire;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #6
0
파일: PacketDns.cs 프로젝트: jsakamoto/bjd5
        //パケット解釈のためのコンストラクタ
        public PacketDns(byte[] buffer)
        {
            Init();

            //ヘッダの解釈
            _dnsHeader = new PacketDnsHeader(buffer, 0);
            var offset = _dnsHeader.Length();

            // オペコード 0:標準 1:逆 2:サーバ状態
            //var c = (short)(Util.htons(_headerDns.Flags) & 0x7800);
            //var opcode = (ushort)(c >> 11);
            var flags = _dnsHeader.Flags;
            var opcode = flags & 0x7800;

            if (opcode != 0){
                // 標準問い合せ以外は対応していない
                throw new IOException(string.Format("OPCODE not 0 [CPCODE={0}]", opcode));
            }

            //****************************************
            //質問/回答/権限/追加フィールド取得
            //****************************************
            for (var rr = 0; rr < 4; rr++){
                //ushort max = Util.htons(_headerDns.Count[rr]);//対象フィールドのデータ数
                var max = _dnsHeader.GetCount(rr);
                if (rr == 0 && max != 1){
                    //質問エントリーが1でないパケットは処理できません。
                    throw new IOException(string.Format("QD Entry !=0  [count={0}]", max));
                }
                for (var n = 0; n < max; n++){
                    //名前の取得
                    //offsetの移動  名前のサイズが一定ではないので、そのサイズ分だけ進める
                    var u0 = new UnCompress(buffer, offset);
                    offset = u0.OffSet;
                    var name = u0.HostName;

                    //名前以降のリソースレコードを取得
                    var packetRr = new PacketRr(buffer, offset);

                    var dnsType = packetRr.DnsType;
                    if (rr == 0){
                        //質問フィールド[QD]の場合は、TTL, DLEN , DATAは無い
                        _ar[rr].Add(new RrQuery(name, dnsType));
                        //offsetの移動  名前以降の分だけ進める
                        offset += 4;
                        continue;
                    }
                    var ttl = packetRr.Ttl;
                    var dlen = packetRr.DLen;
                    var data = packetRr.Data;

                    //TypeによってはNameが含まれている場合があるが、Nameは圧縮されている可能性があるので、
                    //いったん、string 戻してから、改めてリソース用に組み直したDataを作成する
                    OneRr oneRr = null;
                    if (dnsType == DnsType.A){
                        oneRr = new RrA(name, ttl, data);
                    } else if (dnsType == DnsType.Aaaa){
                        oneRr = new RrAaaa(name, ttl, data);
                    } else if (dnsType == DnsType.Cname || dnsType == DnsType.Ptr || dnsType == DnsType.Ns){
                        var u1 = new UnCompress(buffer, offset + 10);
                        switch (dnsType){
                            case DnsType.Cname:
                                oneRr = new RrCname(name, ttl, u1.HostName);
                                break;
                            case DnsType.Ptr:
                                oneRr = new RrPtr(name, ttl, u1.HostName);
                                break;
                            case DnsType.Ns:
                                oneRr = new RrNs(name, ttl, u1.HostName);
                                break;
                            default:
                                Util.RuntimeException(string.Format("DnsPacket() not implement dnsType={0}", dnsType));
                                break;
                        }
                    } else if (dnsType == DnsType.Mx){
                        var preference = Conv.GetUShort(buffer, offset + 10);
                        var u2 = new UnCompress(buffer, offset + 12);
                        oneRr = new RrMx(name, ttl, preference, u2.HostName);
                    } else if (dnsType == DnsType.Soa){
                        var u3 = new UnCompress(buffer, offset + 10);
                        var u4 = new UnCompress(buffer, u3.OffSet);
                        var p = u4.OffSet;
                        var serial = Conv.GetUInt(buffer, p);
                        p += 4;
                        var refresh = Conv.GetUInt(buffer, p);
                        p += 4;
                        var retry = Conv.GetUInt(buffer, p);
                        p += 4;
                        var expire = Conv.GetUInt(buffer, p);
                        p += 4;
                        var minimum = Conv.GetUInt(buffer, p);
                        oneRr = new RrSoa(name, ttl, u3.HostName, u4.HostName, serial, refresh, retry, expire, minimum);
                    }
                    if (oneRr != null){
                        //A NS MX SOA PTR CNAMEの6種類以外は、処理(追加)しない
                        _ar[rr].Add(oneRr);
                    }
                    offset += 10 + dlen;
                }
                //ヘッダ内のRRレコードのエントリー数を設定する
                _dnsHeader.SetCount(rr, (ushort) _ar[rr].Count);
            }
        }
예제 #7
0
        //パケット解釈のためのコンストラクタ
        public PacketDns(byte[] buffer)
        {
            Init();

            //ヘッダの解釈
            _dnsHeader = new PacketDnsHeader(buffer, 0);
            var offset = _dnsHeader.Length();

            // オペコード 0:標準 1:逆 2:サーバ状態
            //var c = (short)(Util.htons(_headerDns.Flags) & 0x7800);
            //var opcode = (ushort)(c >> 11);
            var flags  = _dnsHeader.Flags;
            var opcode = flags & 0x7800;

            if (opcode != 0)
            {
                // 標準問い合せ以外は対応していない
                throw new IOException(string.Format("OPCODE not 0 [CPCODE={0}]", opcode));
            }

            //****************************************
            //質問/回答/権限/追加フィールド取得
            //****************************************
            for (var rr = 0; rr < 4; rr++)
            {
                //ushort max = Util.htons(_headerDns.Count[rr]);//対象フィールドのデータ数
                var max = _dnsHeader.GetCount(rr);
                if (rr == 0 && max != 1)
                {
                    //質問エントリーが1でないパケットは処理できません。
                    throw new IOException(string.Format("QD Entry !=0  [count={0}]", max));
                }
                for (var n = 0; n < max; n++)
                {
                    //名前の取得
                    //offsetの移動  名前のサイズが一定ではないので、そのサイズ分だけ進める
                    var u0 = new UnCompress(buffer, offset);
                    offset = u0.OffSet;
                    var name = u0.HostName;

                    //名前以降のリソースレコードを取得
                    var packetRr = new PacketRr(buffer, offset);

                    var dnsType = packetRr.DnsType;
                    if (rr == 0)
                    {
                        //質問フィールド[QD]の場合は、TTL, DLEN , DATAは無い
                        _ar[rr].Add(new RrQuery(name, dnsType));
                        //offsetの移動  名前以降の分だけ進める
                        offset += 4;
                        continue;
                    }
                    var ttl  = packetRr.Ttl;
                    var dlen = packetRr.DLen;
                    var data = packetRr.Data;

                    //TypeによってはNameが含まれている場合があるが、Nameは圧縮されている可能性があるので、
                    //いったん、string 戻してから、改めてリソース用に組み直したDataを作成する
                    OneRr oneRr = null;
                    if (dnsType == DnsType.A)
                    {
                        oneRr = new RrA(name, ttl, data);
                    }
                    else if (dnsType == DnsType.Aaaa)
                    {
                        oneRr = new RrAaaa(name, ttl, data);
                    }
                    else if (dnsType == DnsType.Cname || dnsType == DnsType.Ptr || dnsType == DnsType.Ns)
                    {
                        var u1 = new UnCompress(buffer, offset + 10);
                        switch (dnsType)
                        {
                        case DnsType.Cname:
                            oneRr = new RrCname(name, ttl, u1.HostName);
                            break;

                        case DnsType.Ptr:
                            oneRr = new RrPtr(name, ttl, u1.HostName);
                            break;

                        case DnsType.Ns:
                            oneRr = new RrNs(name, ttl, u1.HostName);
                            break;

                        default:
                            Util.RuntimeException(string.Format("DnsPacket() not implement dnsType={0}", dnsType));
                            break;
                        }
                    }
                    else if (dnsType == DnsType.Mx)
                    {
                        var preference = Conv.GetUShort(buffer, offset + 10);
                        var u2         = new UnCompress(buffer, offset + 12);
                        oneRr = new RrMx(name, ttl, preference, u2.HostName);
                    }
                    else if (dnsType == DnsType.Soa)
                    {
                        var u3     = new UnCompress(buffer, offset + 10);
                        var u4     = new UnCompress(buffer, u3.OffSet);
                        var p      = u4.OffSet;
                        var serial = Conv.GetUInt(buffer, p);
                        p += 4;
                        var refresh = Conv.GetUInt(buffer, p);
                        p += 4;
                        var retry = Conv.GetUInt(buffer, p);
                        p += 4;
                        var expire = Conv.GetUInt(buffer, p);
                        p += 4;
                        var minimum = Conv.GetUInt(buffer, p);
                        oneRr = new RrSoa(name, ttl, u3.HostName, u4.HostName, serial, refresh, retry, expire, minimum);
                    }
                    if (oneRr != null)
                    {
                        //A NS MX SOA PTR CNAMEの6種類以外は、処理(追加)しない
                        _ar[rr].Add(oneRr);
                    }
                    offset += 10 + dlen;
                }
                //ヘッダ内のRRレコードのエントリー数を設定する
                _dnsHeader.SetCount(rr, (ushort)_ar[rr].Count);
            }
        }
예제 #8
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void getRetryの確認()
 {
     //setUp
     uint expected = 400u;
     var sut = new RrSoa("aaa.com.", 0, "ns.aaa.com.", "postmaster.", 1, 2, expected, 4, 5);
     //exercise
     uint actual = sut.Retry;
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #9
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void バイナリ初期化との比較()
 {
     //setUp
     var sut = new RrSoa("aaa.com", 10, "1", "2", 1, 2, 3, 4, 5);
     var expected = (new RrSoa("aaa.com", 10, new byte[] { 1, 49, 0, 1, 50, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5 })).ToString();
     //exercise
     var actual = sut.ToString();
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }
예제 #10
0
파일: RrSoaTest.cs 프로젝트: jsakamoto/bjd5
 public void ToStringの確認()
 {
     //setUp
     var expected = "Soa aaa.com. TTL=0 ns.aaa.com. postmaster. 00000001 00000002 00000003 00000004 00000005";
     var sut = new RrSoa("aaa.com.", 0, "ns.aaa.com.", "postmaster.", 1, 2, 3, 4, 5);
     //exercise
     var actual = sut.ToString();
     //verify
     Assert.That(actual, Is.EqualTo(expected));
 }