2016-04-02 6 views
2

У меня есть сценарий, чтобы получить IP-адрес, основанный на PHP и WMI, как это:Получить только IPV4 Адресная и Исключено IPv6 с помощью WMI 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:

IPAddress

Тип данных: массив строк типа
доступа: только для чтения
Квалификационные: MappingStrings
("Win32Registry | System \ CurrentControlSet \ Услуги | Параметры \ Tcpip | IPAddress ")

Массив всех IP-адресов, связанных с текущей сетью адаптер. Это свойство может содержать либо адреса IPv6, либо адреса IPv4 . Для получения дополнительной информации см. IPv6 and IPv4 Support in WMI.

Однако (выше ваш вопрос темы), идентифицирующий сетевой адаптер через Name или Description собственности, кажется, не будет хорошей идеей. Вместо этого используйте InterfaceIndex. Read Win32_NetworkAdapterConfiguration class, а также Win32_NetworkAdapter class MSDN статьи:

InterfaceIndex

Тип данных Тип uint32
Доступ: только для чтения

значение индекса, который однозначно идентифицирует интерфейс локальной сети. Значение в этом свойстве такое же, как значение в InterfaceIndex property в случае Win32_IP4RouteTable , которое представляет сетевой интерфейс в таблице маршрутов.

 Смежные вопросы

  • Нет связанных вопросов^_^