2

我有脚本来获取基于 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 的 IPAaddress

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

有人能帮我吗?谢谢

4

1 回答 1

0

php从标签中抽象出来,IPAddress属性是任何使用语言的简单数组在 MSDN 文章Win32_NetworkAdapterConfiguration 类中阅读它:

IP地址

数据类型:字符串数组
访问类型:只读
限定符: MappingStrings
("Win32Registry|System\CurrentControlSet\Services|Parameters\Tcpip|IPAddress")

与当前网络适配器关联的所有 IP 地址的数组。此属性可以包含 IPv6 地址或 IPv4 地址。有关详细信息,请参阅WMI 中的 IPv6 和 IPv4 支持

Name但是(在您的问题主题之上),通过or属性识别网络适配器Description似乎不是一个好主意。改为使用InterfaceIndex属性。阅读Win32_NetworkAdapterConfiguration 类以及Win32_NetworkAdapter 类MSDN 文章:

接口索引

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

唯一标识本地网络接口的索引值。此属性中的值 与Win32_IP4RouteTableInterfaceIndex实例中的属性值相同,该实例 表示路由表中的网络接口。

于 2016-04-02T20:16:25.783 回答