我有脚本来获取基于PHP和WMI的IP地址,如下所示:
获取有源适配器网络
function get_server_network_adapter() {
$pc = ".";
$obj = new COM ("winmgmts:\\\\".$pc."\\root\\cimv2");
$wmi_network_rec = $obj->ExecQuery("Select * from Win32_NetworkAdapter Where NetConnectionStatus = 2");
foreach ($wmi_network_rec as $wmi_call) {
$adapter = $wmi_call->Name;
return $adapter;
}
}
获取Active Adapter的IP地址
function get_server_ip()
{
$adapter = get_server_network_adapter();
$pc = ".";
$obj = new COM ("winmgmts:\\\\".$pc."\\root\\cimv2");
$wmi_server_ip = $obj->ExecQuery("Select * from Win32_NetworkAdapterConfiguration Where Description = '$adapter'");
foreach ($wmi_server_ip as $wmi_call) {
$ip = $wmi_call->IPAddress;
foreach ($ip as $key => $value) {
echo $value;
}
}
}
上面代码的结果是 192.168.1.103fe80 :: e9ad:9bb:e359:a122
但我想要的只是获得像 192.168.1.103
这样的IPv4有人能帮助我吗?感谢
答案 0 :(得分:0)
从php
代码中抽取IPAddress
属性,任何使用过的语言中的数组非常简单。在MSDN文章Win32_NetworkAdapterConfiguration class中了解它:
<强>的IPAddress 强>
数据类型:字符串数组
访问类型:只读
限定符: MappingStrings
(&#34; Win32Registry |系统\ CurrentControlSet \服务|参数\ TCPIP |的IPAddress&#34)与当前网络关联的所有IP地址的数组 适配器。此属性可以包含IPv6地址或IPv4 地址。有关详细信息,请参阅IPv6 and IPv4 Support in WMI。
但是(在您的问题主题上方),通过Name
或Description
属性识别网络适配器似乎不是一个好主意。请改用InterfaceIndex
属性。阅读Win32_NetworkAdapterConfiguration class以及Win32_NetworkAdapter class MSDN文章:
<强> InterfaceIndex 强>
数据类型: uint32
访问类型:只读
唯一标识本地网络接口的索引值。该 此属性中的值与中的值相同 Win32_IP4RouteTable实例中的
InterfaceIndex
属性 表示路由表中的网络接口。