Получайте только IPv4-адреса и исключайте IPv6 из WMI PHP
У меня есть скрипт для получения IP-адреса на основе PHP и WMI, например:
Получить активную сеть адаптера
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;
}
}
и получите 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
Однако я хочу получить IPv4 только как 192.168.1.103
Кто-нибудь может мне помочь? Спасибо
1 ответ
Абстрагироваться от php
тег, IPAddress
Свойство просто массив на любом используемом языке. Прочтите об этом в статье MSDN Win32_NetworkAdapterConfiguration class:
Айпи адрес
Тип данных: строковый массив
Тип доступа: только для чтения
Классификаторы: MappingStrings
("Win32Registry | System \ CurrentControlSet \ Services | Parameters \ Tcpip | IPAddress")Массив всех IP-адресов, связанных с текущим сетевым адаптером. Это свойство может содержать адреса IPv6 или IPv4. Для получения дополнительной информации см. Поддержка IPv6 и IPv4 в WMI.
Однако (выше вашего вопроса), определение сетевого адаптера через Name
или же Description
собственность не кажется хорошей идеей. использованиеInterfaceIndex
собственность вместо Прочитайте статьи Win32_NetworkAdapterConfiguration и статьи MSDN класса Win32_NetworkAdapter:
InterfaceIndex
Тип данных: uint32
Тип доступа: только для чтенияЗначение индекса, которое однозначно определяет интерфейс локальной сети. Значение в этом свойстве совпадает со значением в
InterfaceIndex
свойство в экземпляре Win32_IP4RouteTable, представляющее сетевой интерфейс в таблице маршрутов.