/// <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); } }
/// <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); }
/// <summary> /// インスタンスがsrcで示されるアドレスパターンを内包しているかどうかをチェックする /// </summary> public bool Contains(Ipaddr src) { if (!src.IsValid()) { return(false); } return(ToString().Contains(src.ToString())); }
/// <summary> /// インスタンスがsrcで示されるアドレスと同じかどうかを返す /// 一般オブジェクトとの比較バージョン。 /// </summary> public override bool Equals(Object obj) { if (obj == null) { return(false); } Ipaddr src = obj as Ipaddr; return(Equals(src)); }
/// <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)); }
/// <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); } }
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); }
/// <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")); }
/// <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); }
/// <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(); } }
/// <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); }
/// <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)); }
/// <summary> /// コピーコンストラクタ /// </summary> public Ipaddr(Ipaddr addr) { Set(addr); }
/// <summary> /// コンストラクタ /// </summary> public IpaddrRange(Ipaddr addr) { StartAddr.Set(addr); EndAddr.Set(addr); }
/// <summary> /// コンストラクタ /// </summary> public IpaddrRange(Ipaddr start, Ipaddr end) { Set(start, end); }
/// <summary> /// 1個のアドレスをアドレス範囲としてセットする /// </summary> public void Set(Ipaddr addr) { StartAddr.Set(addr); EndAddr.Set(addr); }