Networking .NET核心前缀逻辑

Networking .NET核心前缀逻辑,networking,.net-core,dhcp,subnet,Networking,.net Core,Dhcp,Subnet,我正在将一些Windows代码移植到Linux。部分windows对象属性未在.net core的linux实现中实现。UnicastIPAddressInformation.PrefixOrigin就是其中之一 .NET核心代码文档显示将其定义为: 值,该值标识单播IP地址前缀的源 MSDN将其定义为: 指定IP地址网络前缀的定位方式 我正在.NET Core repo browser中搜索此属性的实现,该属性返回以下枚举: public enum PrefixOrigin { Oth

我正在将一些Windows代码移植到Linux。部分windows对象属性未在.net core的linux实现中实现。UnicastIPAddressInformation.PrefixOrigin就是其中之一

.NET核心代码文档显示将其定义为:

值,该值标识单播IP地址前缀的源

MSDN将其定义为:

指定IP地址网络前缀的定位方式

我正在.NET Core repo browser中搜索此属性的实现,该属性返回以下枚举:

public enum PrefixOrigin
{
    Other = 0,
    Manual,
    WellKnown,
    Dhcp,
    RouterAdvertisement,
} 
我在.NET Core repo browser中找不到实现
UnicastIPAddressInformation
的类。在.NET Framework repo browser中,我了解到通过将操作系统数据封送到C类/类型中,结构
IdAdapterUnicastAddress
被分配了
PrefixOrigin
。无论如何,我现在不知道如何确定哪个枚举值应该应用于给定的IP

我对计算机网络几乎一无所知,我正在研究什么是IP前缀以及如何找到它。我能找到的实际例子是。然而,据我所知,它提供了一种计算前缀长度的方法。我仍然需要知道如何确定给定IP的
PrefixOrigin
枚举值


仅仅考虑前缀长度就可以做到这一点吗?如果没有,我如何计算给定IP应分配的
PrefixOrigin
值?

此字段的值告诉您如何确定系统上已配置(或自动配置)的IP地址

手动:有人将其键入控制面板中的适配器配置GUI,或使用例如
netsh
或类似工具进行设置

众所周知的:来自众所周知的来源。我不确定Windows是否使用此值。如果在没有任何其他配置的情况下分配了
169.254.x.x
地址,并且不存在DHCP服务器,则可以使用此选项

DHCP:当DHCP服务器自动分配IP地址时,几乎所有家庭和办公室网络都是如此(但有时不在数据中心网络上!),这就是您可以判断的方式


路由器广告:IPv6有一个自动配置系统,本应取代DHCP。为了简单起见,请将其视为与字段的DHCP值在功能上相同。

首先,非常感谢您花时间留下更多见解并提供更多帮助,但请从头到尾关注我!顺便说一句,我不确定我的NE帖子选择的答案是否回答了这个问题,因为答案显示了如何计算前缀长度,但我不仅需要长度。Jeff,根据您上面的评论,通过知道长度,我可以推断前缀本身,因为我应该将ip的N个长度的第一位作为前缀。但是,这是否与本文所选答案中前缀长度的计算方法密切相关?您只考虑重要位来确定长度,但是为了获得前缀本身,您考虑原始IP,RejJeff,所以OK,现在我知道字段指示什么——但是我应该如何手动确定给定IP如何配置,将其分配给这4个类别中的一个?实际上,我的代码专门处理DHCP,所以只要知道如何确定ip是否由DHCP配置就足够了。您正在调用哪个API调用来获取接口上配置的IP地址?我正在使用.NET Core的
网络接口.GetAllNetworkInterfaces()
,然后
GetIpProperties
,然后在所有
UnicastAddress上循环,并检查它们是否由DHCP发出。当你读这个字段的值时,它是什么意思?尝试从每个单播地址读取PrefixOrigin会引发异常,因为它们尚未在linux中实现(这是我的问题:-)。实际上,api此时返回的唯一内容是ip字符串。