2016-04-02 33 views
2

我有脚本获得基于PHP和WMI这样的IP地址:有源适配器仅获得IPV4 ADDRES和WMI排除IPv6的PHP

获取主动适配器网络

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; 
    } 
} 

和获取IPAdress

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

但是我要的是只获取IPv4的类似192.168.1.103

有人能帮助我吗?感谢

回答

0

心不在焉从php标签,IPAddress属性是简单的阵列任何使用的语言。阅读关于它在MSDN文章Win32_NetworkAdapterConfiguration class

ip地址

数据类型:字符串数组
访问类型:只读
预选赛: MappingStrings
(“Win32Registry |系统\ CurrentControlSet \服务|参数\ Tcpip | IPAddress“)

所有与当前网络关联的IP地址的数组 适配器。该属性可以包含IPv6地址或IPv4地址。有关更多信息,请参阅IPv6 and IPv4 Support in WMI

但是(你上面的问题的话题),通过NameDescription属性识别网络适配器似乎不是一个好主意。改用InterfaceIndex属性。阅读Win32_NetworkAdapterConfiguration class以及Win32_NetworkAdapter class MSDN文章:

InterfaceIndex

数据类型:UINT32
访问类型:只读

指数值唯一标识本地网络接口。此属性中的 值与代表路由表中网络接口的Win32_IP4RouteTable 实例中的 InterfaceIndex属性中的值相同。