📑

Node.js で家のネットワークかどうかチェックする

2021/09/18に公開

家のネットワーク上でだけ実行したいスクリプトがあったので、接続しているかチェックするコードを書きました。

network (npm) を使う

tomas/network: The missing network utilities in Node.js.

CLI でも以下のように確認できます。Mac, Linux, Windows 対応しているみたいです。

npx network active_interface
{
  name: 'en0',
  type: 'Wireless',
  ip_address: '192.168.11.12',
  mac_address: 'ff:ff:ff:01:ce:5b', // ここ
  gateway_ip: '192.168.11.1',
  netmask: '255.255.255.0'
}

現在のネットワークを記録

今接続しているアクセスポイントの MAC アドレスを取得します。

import { promisify } from 'util'
import network from 'network'

const getActiveInterface = promisify(network.get_active_interface)
const getCurrent = async () => (await getActiveInterface())?.mac_address

const currntAccessPointMacAddress = await getCurrent()

console.log(currntAccessPointMacAddress)
// ff:ff:ff:ff:ce:5b

比較する

const isSameNetwork = async (mac: string) => mac === (await getCurrent())

const HOME_MAC_ADDRESS = 'ff:ff:ff:ff:ce:5b'

console.log(await isSameNetwork(HOME_MAC_ADDRESS))
// true

ファイルにストアする例

const SAVE_FILE = 'home.mac.txt'

const saveHomeNetwork = (id: string) => fs.writeFileSync('home.mac.txt', id)
const loadHomeNetwork = () => fs.readFileSync(SAVE_FILE, 'utf-8').trim()

const isHomeNetwork = () => isSameNetwork(loadHomeNetwork())

Home 設定

async function setupHome() {
  const currntAccessPointMacAddress = await getCurrent()

  console.log(currntAccessPointMacAddress)
  saveHomeNetwork(currntAccessPointMacAddress)
}

チェック

console.log(await isHomeNetwork())

全体のコード

Gist: Check is home Network

GitHubで編集を提案

Discussion