Beispiel #1
0
 /// <summary>
 ///   インスタンスがsrcで示されるアドレスと同じかどうかを返す
 /// </summary>
 public bool Equals(Ipaddr src)
 {
     if (src == null)
     {
         return(false);
     }
     if (IsValid())
     {
         if (!src.IsValid())
         {
             return(false);
         }
         if (vals.Length != src.vals.Length)
         {
             return(false);
         }
         for (int i = 0; i < vals.Length; i++)
         {
             if (vals[i] != src.vals[i])
             {
                 return(false);
             }
         }
         return(true);
     }
     else
     {
         if (src.IsValid())
         {
             return(false);
         }
         return(true);
     }
 }
Beispiel #2
0
 /// <summary>
 ///   アドレス値の大小を比較する。
 /// </summary>
 /// <remarks>
 ///   <para>
 ///     IPv4アドレスとIPv6アドレスを比較しようとすると、つねにIPv4アドレスの
 ///     方が小さいと判定されます。
 ///   </para>
 /// </remarks>
 public int CompareTo(Ipaddr src)
 {
     if (vals == null)
     {
         return(-1);
     }
     if ((src == null) || (src.vals == null))
     {
         return(1);
     }
     if (vals.Length < src.vals.Length)
     {
         return(-1);
     }
     if (vals.Length > src.vals.Length)
     {
         return(1);
     }
     for (int i = 0; i < vals.Length; i++)
     {
         if (vals[i] < src.vals[i])
         {
             return(-1);
         }
         if (vals[i] > src.vals[i])
         {
             return(1);
         }
     }
     return(0);
 }
Beispiel #3
0
 /// <summary>
 ///   インスタンスがsrcで示されるアドレスパターンを内包しているかどうかをチェックする
 /// </summary>
 public bool Contains(Ipaddr src)
 {
     if (!src.IsValid())
     {
         return(false);
     }
     return(ToString().Contains(src.ToString()));
 }
Beispiel #4
0
        /// <summary>
        ///   インスタンスがsrcで示されるアドレスと同じかどうかを返す
        ///   一般オブジェクトとの比較バージョン。
        /// </summary>
        public override bool Equals(Object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            Ipaddr src = obj as Ipaddr;

            return(Equals(src));
        }
Beispiel #5
0
 /// <summary>
 ///   アドレス値の大小を比較する。
 /// </summary>
 /// <remarks>
 ///   <para>
 ///     IPv4アドレスとIPv6アドレスを比較しようとすると、つねにIPv4アドレスの
 ///     方が小さいと判定されます。
 ///   </para>
 /// </remarks>
 public static int Compare(Ipaddr a, Ipaddr b)
 {
     if (a == null)
     {
         if (b == null)
         {
             return(0);
         }
         return(-1);
     }
     return(a.CompareTo(b));
 }
Beispiel #6
0
 /// <summary>
 ///   アドレス範囲をセットする
 /// </summary>
 public void Set(Ipaddr start, Ipaddr end)
 {
     if (start <= end)
     {
         StartAddr.Set(start);
         EndAddr.Set(end);
     }
     else
     {
         StartAddr.Set(end);
         EndAddr.Set(start);
     }
 }
Beispiel #7
0
 public static int Main(string[] args)
 {
     foreach (string arg in args)
     {
         Ipaddr addr = new Ipaddr(arg);
         Console.Write("{0} -> {1}", arg, addr.ToString());
         foreach (byte b in addr.GetBytes())
         {
             Console.Write(" {0:X2}", b);
         }
         Console.WriteLine();
     }
     return(0);
 }
Beispiel #8
0
        /// <summary>
        ///   指定ホスト名のIPアドレスを返す。
        /// </summary>
        /// <remarks>
        ///   <para>
        ///     DNS検索ができなかった場合は、127.0.0.1を返す。
        ///   </para>
        /// </remarks>
        public static Ipaddr ByHostName(string hostname)
        {
            IPHostEntry ipHostInfo = Dns.GetHostEntry(hostname);

            foreach (IPAddress i in ipHostInfo.AddressList)
            {
                Ipaddr a = new Ipaddr(i.ToString());
                if (a.IsComplete())
                {
                    return(a);
                }
            }
            return(new Ipaddr("127.0.0.1"));
        }
Beispiel #9
0
 /// <summary>
 ///   ネットワークアドレス内にあるかどうかを返す。
 /// </summary>
 public bool InNetwork(Ipaddr network, Ipaddr netmask)
 {
     if ((vals == null) || (network.vals == null) || (netmask.vals == null) ||
         (vals.Length != network.vals.Length) || (vals.Length != network.vals.Length))
     {
         return(false);
     }
     for (int i = 0; i < vals.Length; i++)
     {
         if ((byte)(vals[i] & netmask.vals[i]) != (byte)(network.vals[i] & netmask.vals[i]))
         {
             return(false);
         }
     }
     return(true);
 }
Beispiel #10
0
        /// <summary>
        ///   アドレス範囲内のアドレスをアドレスリストに追加する
        /// </summary>
        /// <param name="list">このリストに追加する</param>
        /// <param name="limit">最大件数(負の場合制限無し)</param>
        public void GetList(List <Ipaddr> list, int limit)
        {
            Ipaddr addr = new Ipaddr(StartAddr);

            while (addr <= EndAddr)
            {
                if ((limit >= 0) && (list.Count >= limit))
                {
                    return;
                }
                if (!list.Contains(addr))
                {
                    list.Add(new Ipaddr(addr));
                }
                addr.Incr();
            }
        }
Beispiel #11
0
 /// <summary>
 ///   他のIpaddrをコピーする
 /// </summary>
 /// <returns>自分自身</returns>
 public Ipaddr Set(Ipaddr ipaddr)
 {
     if ((ipaddr != null) && ipaddr.IsValid())
     {
         if ((vals == null) || (vals.Length != ipaddr.vals.Length))
         {
             vals = new byte[ipaddr.vals.Length];
         }
         for (int i = 0; i < vals.Length; i++)
         {
             vals[i] = ipaddr.vals[i];
         }
     }
     else
     {
         Clear();
     }
     return(this);
 }
Beispiel #12
0
 /// <summary>
 ///   指定したIPアドレスを指定したネットマスクでマスクした値を返す。
 /// </summary>
 static public Ipaddr GetMasked(Ipaddr ipaddr, Ipaddr mask)
 {
     if ((ipaddr.vals == null) || (mask.vals == null))
     {
         return(new Ipaddr());
     }
     byte[] vals = new byte[ipaddr.vals.Length];
     for (int i = 0; i < vals.Length; i++)
     {
         if (i < mask.vals.Length)
         {
             vals[i] = (byte)((ipaddr.vals[i]) & (mask.vals[i]));
         }
         else
         {
             vals[i] = 0;
         }
     }
     return(new Ipaddr(vals, 0, vals.Length));
 }
Beispiel #13
0
 /// <summary>
 ///   コピーコンストラクタ
 /// </summary>
 public Ipaddr(Ipaddr addr)
 {
     Set(addr);
 }
Beispiel #14
0
 /// <summary>
 ///   コンストラクタ
 /// </summary>
 public IpaddrRange(Ipaddr addr)
 {
     StartAddr.Set(addr);
     EndAddr.Set(addr);
 }
Beispiel #15
0
 /// <summary>
 ///   コンストラクタ
 /// </summary>
 public IpaddrRange(Ipaddr start, Ipaddr end)
 {
     Set(start, end);
 }
Beispiel #16
0
 /// <summary>
 ///   1個のアドレスをアドレス範囲としてセットする
 /// </summary>
 public void Set(Ipaddr addr)
 {
     StartAddr.Set(addr);
     EndAddr.Set(addr);
 }