当name为null时Sigar的getNetInterfaceConfig(String name)方法得到了什么?
What does the method getNetInterfaceConfig(String name) of Sigar get when name is null?
以下代码是什么意思?
String name = sigar.getNetInterfaceConfig(null).getName();
NetInterfaceStat stat = sigar.getNetInterfaceStat(name);
我知道getNetInterfaceConfig(String name)
的作用是得到一个具体的NetInterfaceConfig
,但是当它的参数为null时,它得到什么?
我通常会建议您使用文档,除了 SIGAR 不再有 none。 But you can find it on the Wayback Machine.
public NetInterfaceConfig getNetInterfaceConfig(java.lang.String name)
throws SigarException
Get network interface configuration info.
不是很有用。可能是一个合理的假设,它将调用委托给无参数方法,这稍微有用一些。
public NetInterfaceConfig getNetInterfaceConfig()
throws SigarException
Get default network interface configuration info. Iterates getNetInterfaceList(), returning the first available ethernet interface.
所以有官方答案。 “第一个可用的以太网接口”。
要弄清楚这到底是什么意思,请使用源代码。从 output of the high level implementation,它声称 return“主要”接口。
NetInterfaceConfig config = this.sigar.getNetInterfaceConfig(null);
println("primary interface....." + config.getName());
但是还有no such thing as a primary interface. Still, we can look at the implementation to see what SIGAR defines as primary. For example, the Windows implementation is here. The macOS implementation looks identical. Linux inherits from the default here,也是一样的
if (!name) {
return sigar_net_interface_config_primary_get(sigar, ifconfig);
}
因此我们可以查看 sigar_net_interface_config_primary_get()
的源代码以了解其实际工作原理:
- 它遍历所有接口
- 不包括环回接口
- 它排除了没有 IP 地址或没有 MAC 地址的接口
- 一旦它找到上面没有排除的接口,它就会return将那个接口作为“主要”。
“第一个”这样的接口是否实际上是“主要”接口是有争议的,因为 the order they are returned is platform dependent. The "first" one may be an IPv4 interface, but if a user is connecting via IPv6 the system may choose a different one. Or you might have a different interface for an internal network vs. an external one. Each one is "primary" for one sort of traffic, as defined by routing tables. You probably want to look at your system's routing tables 识别您关心的 IP 范围,并将您的网络接口过滤到匹配范围。即使那样,您也可能得到不止一个。例如,在 macOS 上,如果我同时连接了有线和无线,我可以更改即时接受流量的路由的优先级。
最终你的问题的答案是,”当名称为null
时,它return是系统发现的第一个不是环回的网络接口,并且有MAC 地址和 IP 地址。"
这可能是也可能不是您正在寻找的界面。
以下代码是什么意思?
String name = sigar.getNetInterfaceConfig(null).getName();
NetInterfaceStat stat = sigar.getNetInterfaceStat(name);
我知道getNetInterfaceConfig(String name)
的作用是得到一个具体的NetInterfaceConfig
,但是当它的参数为null时,它得到什么?
我通常会建议您使用文档,除了 SIGAR 不再有 none。 But you can find it on the Wayback Machine.
public NetInterfaceConfig getNetInterfaceConfig(java.lang.String name) throws SigarException
Get network interface configuration info.
不是很有用。可能是一个合理的假设,它将调用委托给无参数方法,这稍微有用一些。
public NetInterfaceConfig getNetInterfaceConfig() throws SigarException
Get default network interface configuration info. Iterates getNetInterfaceList(), returning the first available ethernet interface.
所以有官方答案。 “第一个可用的以太网接口”。
要弄清楚这到底是什么意思,请使用源代码。从 output of the high level implementation,它声称 return“主要”接口。
NetInterfaceConfig config = this.sigar.getNetInterfaceConfig(null);
println("primary interface....." + config.getName());
但是还有no such thing as a primary interface. Still, we can look at the implementation to see what SIGAR defines as primary. For example, the Windows implementation is here. The macOS implementation looks identical. Linux inherits from the default here,也是一样的
if (!name) {
return sigar_net_interface_config_primary_get(sigar, ifconfig);
}
因此我们可以查看 sigar_net_interface_config_primary_get()
的源代码以了解其实际工作原理:
- 它遍历所有接口
- 不包括环回接口
- 它排除了没有 IP 地址或没有 MAC 地址的接口
- 一旦它找到上面没有排除的接口,它就会return将那个接口作为“主要”。
“第一个”这样的接口是否实际上是“主要”接口是有争议的,因为 the order they are returned is platform dependent. The "first" one may be an IPv4 interface, but if a user is connecting via IPv6 the system may choose a different one. Or you might have a different interface for an internal network vs. an external one. Each one is "primary" for one sort of traffic, as defined by routing tables. You probably want to look at your system's routing tables 识别您关心的 IP 范围,并将您的网络接口过滤到匹配范围。即使那样,您也可能得到不止一个。例如,在 macOS 上,如果我同时连接了有线和无线,我可以更改即时接受流量的路由的优先级。
最终你的问题的答案是,”当名称为null
时,它return是系统发现的第一个不是环回的网络接口,并且有MAC 地址和 IP 地址。"
这可能是也可能不是您正在寻找的界面。