Как узнать, работает ли машина в моей сети с PHP?

Я хочу написать PHP-скрипт, аналогичный Enterprise Network Console, но для локальной сети ПК и устройств вместо WAN серверов.

Я хочу иметь возможность проверить, подключены ли ПК, копировальные аппараты и т. д. к сети. Я хочу знать, даже если они выключены, однако это невозможно, поскольку ПК игнорируют пакеты, если это не пакет пробуждения по локальной сети, верно?

Как лучше всего проверить, включен компьютер или нет? Я использовал fSocketOpen() для тестирования серверов, однако большинство ПК не являются серверами. Они отвечают на эхо-запросы, но не имеют открытых портов для соединений, что означает, что PHP'ss fSocketOpen() не будет работать, а пингование работает.


person CoderWalker    schedule 09.08.2012    source источник
comment
Почему вы пытаетесь сделать это в PHP?   -  person meagar    schedule 09.08.2012
comment
Мне нужно, чтобы это было доступно через веб-интерфейс, поскольку мой раздел VLAN является одной из многих частей, которые физически удалены друг от друга.   -  person CoderWalker    schedule 09.08.2012
comment
Я удалил тонну более или менее чепухи из вашего поста и отредактировал его, чтобы задать конкретный вопрос, на который можно ответить, тем самым уберег его от закрытия. Ваши сообщения должны содержать один вопрос и быть максимально короткими. Не было никакой причины для всей этой справочной информации, просто выйдите и задайте вопрос. Кроме того, пожалуйста, не добавляйте подписи или слоганы к своим сообщениям.   -  person meagar    schedule 09.08.2012
comment
Спасибо за щедрость тех, кто ответил, что это не использовалось в качестве слогана. Также есть огромная проблема с вашим редактированием. Вы удалили важные детали, такие как: диапазон устройств (VOIP, копировальные аппараты, настольные компьютеры), информацию о сети и важную часть поста (проверка новых устройств). что я не получу много невозможных ответов. Но спасибо, что не закрыли. Просто подумайте, что это может сбивать с толку сейчас. Нужно ли делать пост по каждому вопросу?   -  person CoderWalker    schedule 09.08.2012
comment
Глядя на исходный пост, у меня есть такой комментарий: вы хотите, чтобы мы сделали все это для вас? Я имею в виду, почитайте о сетевом программировании, а затем вернитесь, если у вас возникнут вопросы.   -  person netcoder    schedule 09.08.2012
comment
Нет, мне просто любопытно, возможно ли использовать исключительно PHP и есть ли у кого-нибудь знания о какой-либо его части, которая может быть полезной. Пример: Как пинговать устройства в PHP, лучший способ настроить автоматическую часть. (О сетевом программировании: я занимаюсь программированием уже 6 лет, 3 из них — программирование на C# .NET и PHP/MySQL.)   -  person CoderWalker    schedule 09.08.2012
comment
Ваши конкретные вопросы (отправка пакетов WOL, проверка связи и т. д.) уже были рассмотрены либо в стеке Переполнение или в руководстве . Просто нужно немного поискать.   -  person netcoder    schedule 09.08.2012
comment
Я не хочу отправлять пакеты WOL, я хочу знать, подключена ли машина к сети. Я думаю, может быть, мой вопрос вводит в заблуждение.   -  person CoderWalker    schedule 09.08.2012
comment
@CoderWalker: Я хочу знать, даже если они выключены, но большинство машин не отвечают на пакеты ICMP, когда они выключены. Если они это сделают, проверьте руководство по команде ping, она уже есть, и я уже связался с ней. В любом случае, моя точка зрения такова: не ленитесь, думайте об этом и ищите вместо того, чтобы просить кого-то сделать это за вас.   -  person netcoder    schedule 09.08.2012
comment
@CoderWalker Мое редактирование сделало ваш вопрос ответным и подходящим для этого сайта. Если вы хотите изменить свой вопрос, вы можете это сделать. И та часть, где ты подписался своим именем, Коби Уокер, была той подписью, о которой я говорил.   -  person meagar    schedule 09.08.2012


Ответы (1)


Вы можете использовать системные команды и перехватывать стандартный вывод результатов.

Просто выполните поиск примеров PHP popen ( http://uk3.php.net/popen ).

echo run('ping 192.168.1.5');

function run($command) {
    $command .= ' 2>&1';
    $handle = popen($command, 'r');
    $log = '';

    while (!feof($handle)) {
        $line = fread($handle, 1024);
        $log .= $line;
    }

    pclose($handle);
    return $log;
}
person Tim    schedule 09.08.2012
comment
Не беспокойтесь о поиске портов, создании сокетов или имитации таких команд, как ping. Используйте команды ОС, выполняя их через PHP. Я добавляю пример к своему ответу. - person Tim; 09.08.2012