检测 Xbox 360 是否在线

检测 Xbox 360 是否在线

我一直在开发一组在 (Ubuntu) Linux 机器上的 Apache 服务器上运行的 PHP 页面,这些页面会返回有关我的 LAN 上设备的状态和信息。所做的一件事是进行简单的 ping 测试,以确定设备相对于 LAN 是否在线。

执行“ping -c 1 -w 1 host”对所有设备都有效,除了我的 Xbox 360,它似乎被锁得很紧。如果我使用“nmap -sN xbox360”,它会报告它在线,但这需要 root 权限。

有什么办法可以解决这个问题吗?我在网上找不到任何关于如何让 Xbox 360 响应 ping 的信息,有没有不需要 root 权限的东西(可以从 php 脚本运行)可以确定我的 Xbox 是否连接到 LAN?

答案1

我知道这是一个老问题,但是,我的解决方案(在 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

相关内容