LoginSignup
2
1

More than 5 years have passed since last update.

Macで最優先のネットワークインターフェイスの取得方法

Last updated at Posted at 2018-02-10

Macはシステム環境設定で優先するネットワークインターフェイスを変更することが出来きます。
最優先のデバイスは、接続中のデバイスの中で、優先度が最も高いデバイスが選択されます。

これをコードで取得したかったため、調べてみると、SystemConfigurationフレームワークを使えば可能だと分かりました。

import Foundation
import SystemConfiguration

var processName = ProcessInfo.processInfo.processName as CFString
var dynamicStore = SCDynamicStoreCreate(kCFAllocatorDefault, processName, nil, nil)

var ipv4Key = SCDynamicStoreKeyCreateNetworkGlobalEntity(
    kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetIPv4)
if let ipv4Interface = SCDynamicStoreCopyValue(dynamicStore, ipv4Key) as? [CFString: Any] {
    if let primaryInterface = ipv4Interface[kSCDynamicStorePropNetPrimaryInterface] as? String {
        print("PrimaryInterface: \(primaryInterface)")
    }
}

2018/02/10 22:40 追記

「kSCEntNetIPv4」を「kSCEntNetIPv6」にしたらどうなるかが気になったので、試してみると、同じようにプライマリインターフェイスが取得できました。

それと、システム環境設定で順番を明示的に変更したときや、プライマリインターフェイスを切断したときに、直ぐに反映されるのかも試してみると、直ぐに反映されました。

試したOSは、macOS 10.13.3 High Sierraです。

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1