Получать только адреса IPV4 и исключать IPv6 из переполнения стека WMI

У меня есть скрипт для получения 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

Кто-нибудь может мне помочь? Спасибо

2

Решение

Абстрагироваться от 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 class так же как Класс Win32_NetworkAdapter Статьи MSDN:

InterfaceIndex

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]