Я работал над набором страниц PHP, которые запускаются на сервере Apache в Linux-системе (Ubuntu), которая возвращает состояние и информацию об устройствах в моей локальной сети. Одна вещь, которая сделана, является простым тестом проверки связи, чтобы определить, является ли устройство онлайн относительно локальной сети.

Выполнение «ping -c 1 -w 1 host» хорошо работает со всем, кроме моего Xbox 360, который, кажется, плотно заблокирован. Если я использую «nmap -sN xbox360», он сообщит, что он в сети, но для этого требуются права суперпользователя.

Есть идеи, как решить эту проблему? В интернете я ничего не нашел о том, как разрешить Xbox 360 реагировать на эхо-запросы, есть ли что-то, для чего не требуются права суперпользователя (которые можно запустить из скрипта php), чтобы определить, подключен ли мой Xbox к локальной сети?

1 ответ1

0

Старый вопрос, который я знаю, но, мое решение (нашел вопрос в Google при поиске решения моей проблемы)...

На моем Raspberry PI создайте скрипт следующим образом:

#!/bin/bash
SUBNET=192.168.1.
FOUT=/mnt/sda/inbound/hosts.state
FSTATE=/tmp/host.state

for i in `seq 1 255`;
do
    IP=${SUBNET}${i}
    sudo nmap -sP ${IP} | grep "Host up" >/dev/null

    HOSTSTATE=1
    MAC=1
    if [ $? -eq 0 ]; then
            MAC=$(sudo nmap -sP -n ${IP} | grep MAC | cut -d ' ' -f3)
            DATETIME=$(date)
            HOSTSTATE="${IP},${MAC},up"
    else
            HOSTSTATE="${IP},,down"
    fi

    if [ -z "${MAC}" ]; then
            ## HACK FOR grep NOT RETURNING CORRECT EXIT CODE
            HOSTSTATE="${IP},,down"
    fi

    OLDSTATE=""
    if [ -f ${FSTATE} ]; then
            OLDSTATE=$(grep ${IP} ${FSTATE} 2>/dev/null)
    fi
    if [ -z "${OLDSTATE}" ]; then
            OLDSTATE=${IP},,unknown
    fi

    if [ "${OLDSTATE}" != "${HOSTSTATE}" ]; then
            STATE1=$(echo ${OLDSTATE} | cut -d ',' -f3)
            STATE2=$(echo ${HOSTSTATE} | cut -d ',' -f3)
            CHANGE="from ${STATE1} to ${STATE2}"
            CHANGEMSG="${IP},${MAC} changed ${CHANGE} at $( date )"
            echo ${CHANGEMSG} >> ${FOUT}
            grep -v ${IP} ${FSTATE} >> ${FSTATE}.tmp
            echo ${HOSTSTATE} >> ${FSTATE}.tmp
            mv ${FSTATE}.tmp ${FSTATE}
    fi
done

Затем отредактируйте пользователя crontab с помощью crontab -e , я установил его:

0,30 * * * * /opt/scripts/checkHostActivity

Наконец, добавьте пользователя в sudoers, чтобы он мог запускать команды nmap.

Работа на рабочем месте. Каждые 30 минут я сканирую сеть, чтобы увидеть, какие хосты работают, и записываю любые изменения в /mnt/sda/inbound/host.state.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .