はじめに
無線Wi-FiのSSIDを統一し、ローミングを構築している場合において、
瞬時に接続先のアクセスポイント切り替わりがされているか確認する方法をまとめます。
約0.1秒間隔の Ping
以下のソースコードをPowershellで実行します。終了時は Ctrl+C。
$target = "192.168.0.1"
while ($true) {
# 現在時刻(ミリ秒まで)
$now = Get-Date -Format "yyyy-MM-dd HH:mm:ss.fff"
# 1回だけPing(成功したらオブジェクトが返る)
$reply = Test-Connection -ComputerName $target -Count 1 -ErrorAction SilentlyContinue
if ($reply) {
# レイテンシなどを表示
"{0} {1} Reply from {2}: time={3}ms" -f `
$now, $target, $reply.Address, $reply.ResponseTime
}
else {
"{0} {1} Request timed out." -f $now, $target
}
# 0.1秒待つ
Start-Sleep -Milliseconds 100
}
接続SSIDや電波強度の情報
以下のソースコードをPowershellで実行します。終了時は Ctrl+C。
while ($true) {
$now = Get-Date -Format "yyyy-MM-dd HH:mm:ss.fff"
# netsh の出力を行配列として取得
$output = netsh wlan show interfaces
# SSID
$ssidMatch = $output | Select-String -Pattern '^\s*SSID\s*:\s*(.+)$'
$ssid = $ssidMatch.Matches[0].Groups[1].Value.Trim()
# AP BSSID
$bssidMatch = $output | Select-String -Pattern '^\s*AP BSSID\s*:\s*(.+)$'
$bssid = $bssidMatch.Matches[0].Groups[1].Value.Trim()
# Rssi(すでに dBm 単位)
$rssiMatch = $output | Select-String -Pattern '^\s*Rssi\s*:\s*(-?\d+)'
$rssi = [int]$rssiMatch.Matches[0].Groups[1].Value
# 1行で表示
"{0} SSID={1} BSSID={2} RSSI={3}dBm" -f $now, $ssid, $bssid, $rssi
Start-Sleep -Milliseconds 100
}
余談
筆者の自宅環境では、端末主導ローミング (EasyMeshではない) を構築し、
確認したところ、Ping応答が通常数十msのところ、
切り替わりが発生したタイミングでは、Ping欠けがないものの
376msでの応答になっていたことを確認しました。
つまり、0.4秒弱で切り替わりできているようです。