PCやスマホがネットワーク内にあるかどうかを調べる(在宅かどうかの判断)

ネットワーク内に端末が起動中で存在しているかの確認方法です。

家にいるかどうかを判断するには、スマホが同一ネットワーク内に存在しているかを調べる方法があります。
(ただしスマホの充電が切れていたりすると判断することはできません。)

[参考記事] 在宅中か外出中かで動作ができるスマートスピーカー

スマホがWi-Fiにつながっている状態かどうかは、サーバからpingを送ってレスポンスがあるかを見ることで確認できます。

pingで回数を指定する場合は、-cオプションを付けます。

$ ping 192.168.1.11 -c 3
PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data.
64 bytes from 192.168.1.11: icmp_seq=1 ttl=128 time=1.59 ms
64 bytes from 192.168.1.11: icmp_seq=2 ttl=128 time=2.45 ms
64 bytes from 192.168.1.11: icmp_seq=3 ttl=128 time=2.30 ms

--- 192.168.1.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6ms
rtt min/avg/max/mdev = 1.587/2.111/2.451/0.377 ms

MACアドレスも対で調べるなら、aringを使います。

$ arping 192.168.1.11 -c 3
ARPING 192.168.1.11 from 192.168.1.105 enp1s0
Unicast reply from 192.168.1.11 [EA:2A:EE:89:D9:01]  2.271ms
Unicast reply from 192.168.1.11 [EA:2A:EE:89:D9:01]  2.776ms
Unicast reply from 192.168.1.11 [EA:2A:EE:89:D9:01]  2.689ms
Sent 3 probes (1 broadcast(s))
Received 3 response(s)

MACアドレスとIPの対はip neighで調べられます。
以前はnet-toolsパッケージに含まれるarpで調べられましたがこちらは非推奨になっています。
ip neighは存在するすべての端末が表示されないことがあるので、あまりあてになりません。

$ ip neigh
192.168.1.11 dev enp1s0 lladdr a3:f0:57:f2:26:67 STALE
192.168.1.3 dev enp1s0 lladdr 13:b3:80:42:00:42 DELAY
192.168.1.8 dev enp1s0 lladdr c6:dc:9c:3d:39:40 REACHABLE
192.168.1.1 dev enp1s0 lladdr cf:1e:fa:c8:0a:fe REACHABLE
fe80::1818:f758:5e2:ce4c dev enp1s0 lladdr cd:34:f0:18:c6:3e router STALE
fe80::1 dev enp1s0 lladdr cc:1a:fa:cf:0a:fe router STALE

IPv4に限定するなら、-4オプションを付けます。

$ ip -4 neigh
192.168.1.11 dev enp1s0 lladdr a3:f0:57:f2:26:67 STALE
192.168.1.3 dev enp1s0 lladdr 13:b3:80:42:00:42 DELAY
192.168.1.8 dev enp1s0 lladdr c6:dc:9c:3d:39:40 REACHABLE
192.168.1.1 dev enp1s0 lladdr cf:1e:fa:c8:0a:fe REACHABLE

PHPのコードでは下記のようになります。

function isPcActive($ipAddress)
{
    $cmd = "/usr/bin/ping $ipAddress -c 3";

    $outputs = null;
    $result_code = null;
    exec($cmd, $outputs, $result_code);

    if ($result_code==0) {
        echo "active $ipAddress";
        return true;
    } else {
        echo "no active $ipAddress";
        return false;
    }
}

在宅かどうかの判断するには、これ以外にも位置情報を取得する方法があります。

関連記事

スポンサーリンク

複数のデータベースを切り替える方法(別データベースを使用する)

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る