IPData.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Net;
  2. using System.Net.Sockets;
  3. using IPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork;
  4. namespace MediaBrowser.Model.Net;
  5. /// <summary>
  6. /// Base network object class.
  7. /// </summary>
  8. public class IPData
  9. {
  10. /// <summary>
  11. /// Initializes a new instance of the <see cref="IPData"/> class.
  12. /// </summary>
  13. /// <param name="address">The <see cref="IPAddress"/>.</param>
  14. /// <param name="subnet">The <see cref="IPNetwork"/>.</param>
  15. /// <param name="name">The interface name.</param>
  16. public IPData(IPAddress address, IPNetwork? subnet, string name)
  17. {
  18. Address = address;
  19. Subnet = subnet ?? (address.AddressFamily == AddressFamily.InterNetwork ? new IPNetwork(address, 32) : new IPNetwork(address, 128));
  20. Name = name;
  21. }
  22. /// <summary>
  23. /// Initializes a new instance of the <see cref="IPData"/> class.
  24. /// </summary>
  25. /// <param name="address">The <see cref="IPAddress"/>.</param>
  26. /// <param name="subnet">The <see cref="IPNetwork"/>.</param>
  27. public IPData(IPAddress address, IPNetwork? subnet)
  28. : this(address, subnet, string.Empty)
  29. {
  30. }
  31. /// <summary>
  32. /// Gets or sets the object's IP address.
  33. /// </summary>
  34. public IPAddress Address { get; set; }
  35. /// <summary>
  36. /// Gets or sets the object's IP address.
  37. /// </summary>
  38. public IPNetwork Subnet { get; set; }
  39. /// <summary>
  40. /// Gets or sets the interface index.
  41. /// </summary>
  42. public int Index { get; set; }
  43. /// <summary>
  44. /// Gets or sets a value indicating whether the network supports multicast.
  45. /// </summary>
  46. public bool SupportsMulticast { get; set; } = false;
  47. /// <summary>
  48. /// Gets or sets the interface name.
  49. /// </summary>
  50. public string Name { get; set; }
  51. /// <summary>
  52. /// Gets the AddressFamily of the object.
  53. /// </summary>
  54. public AddressFamily AddressFamily
  55. {
  56. get
  57. {
  58. if (Address.Equals(IPAddress.None))
  59. {
  60. return Subnet.Prefix.AddressFamily.Equals(IPAddress.None)
  61. ? AddressFamily.Unspecified
  62. : Subnet.Prefix.AddressFamily;
  63. }
  64. else
  65. {
  66. return Address.AddressFamily;
  67. }
  68. }
  69. }
  70. }