У меня есть скрипт для получения 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
Кто-нибудь может мне помочь? Спасибо
Абстрагироваться от 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
это представляет сетевой интерфейс в таблице маршрутов.
Других решений пока нет …