| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- namespace RackPeek.Domain.Resources.Services.Networking;
- public readonly struct Cidr
- {
- public uint Network { get; }
- public uint Mask { get; }
- public int Prefix { get; }
- public Cidr(uint network, uint mask, int prefix)
- {
- Network = network;
- Mask = mask;
- Prefix = prefix;
- }
- public bool Contains(uint ip)
- {
- return (ip & Mask) == Network;
- }
- public override string ToString()
- {
- return $"{IpHelper.ToIp(Network)}/{Prefix}";
- }
- public static Cidr Parse(string cidr)
- {
- var parts = cidr.Split('/');
- if (parts.Length != 2)
- throw new ArgumentException($"CIDR must be in format a.b.c.d/nn: {cidr}");
- var ip = IpHelper.ToUInt32(parts[0]);
- var prefix = int.Parse(parts[1]);
- var mask = IpHelper.MaskFromPrefix(prefix);
- var network = ip & mask;
- return new Cidr(network, mask, prefix);
- }
- }
|