【问题标题】:Get only IPV4 Addres and Exclude IPv6 from WMI PHP仅获取 IPV4 地址并从 WMI PHP 中排除 IPv6
【发布时间】:2016-04-02 11:15:23
【问题描述】:

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

有人可以帮助我吗?谢谢

【问题讨论】:

    标签: php wmi wmi-query get-wmiobject


    【解决方案1】:

    php 标记中抽象出来,IPAddress 属性是任何使用的语言 中的简单数组。阅读 MSDN 文章Win32_NetworkAdapterConfiguration class

    IP地址

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

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

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

    接口索引

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

    唯一标识本地网络接口的索引值。这 此属性中的值与 InterfaceIndex 实例中的 Win32_IP4RouteTable 属性 表示路由表中的网络接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 2018-01-23
      • 1970-01-01
      • 2011-11-09
      • 2013-08-20
      • 2013-08-24
      相关资源
      最近更新 更多