権限 | 説明 |
android.permission.ACCESS_NETWORK_STATE | ネットワーク状態情報を取得します(現在のネットワークタイプ、接続状態など)。 |
android.permission.READ_PHONE_STATE | 携帯電話の状態情報を読み取ります(デバイス識別子、通信事業者情報など)。 |
android.permission.INTERNET | インターネットにアクセスします(ネットワーク検出リクエストを実行します)。 |
android.permission.CHANGE_NETWORK_STATE | ネットワーク接続状態を変更します。 |
android.permission.WRITE_SETTINGS | システム設定に書き込みます。 |
権限 | 説明 |
android.permission.ACCESS_WIFI_STATE | Wi-Fiネットワーク状態情報を取得します。 |
権限 | 説明 |
android.permission.ACCESS_NETWORK_STATE | ネットワーク状態情報を取得します(探测プラグインと重複)。 |
番号 | 権限 | 権限タイプ | 説明 | 特殊要件 |
1 | INTERNET | 一般権限 | コア権限です。ネットワーク検出(Ping、Tracerouteなど)の実行とデータ報告に使用されます。 | 無 |
2 | ACCESS_NETWORK_STATE | 一般権限 | 現在のネットワーク接続状態とタイプを取得します。 | 無 |
3 | ACCESS_WIFI_STATE | 一般権限 | Wi-Fi接続情報を取得します。 | 無 |
4 | READ_PHONE_STATE | 危険な権限 | デバイスと通信事業者情報を読み取ります。 | Android 6.0以降では、実行時に動的な権限申請が必要です。 |
5 | CHANGE_NETWORK_STATE | 一般権限 | ネットワーク接続状態を変更します。 | 無 |
6 | WRITE_SETTINGS | 危険な権限 | システム設定に書き込みます。 | Android 6.0以降では、ユーザーをシステム設定画面に誘導し、手動で権限を付与する必要があります。 |
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><!-- コアネットワーク権限 --><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!-- デバイス情報の読み取り(危険な権限、実行時に申請が必要) --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- ネットワーク状態の変更 --><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><!-- システム設定の書き込み(危険な権限、ユーザーを手動で認証に導く必要があります) --><uses-permission android:name="android.permission.WRITE_SETTINGS" /></manifest>
キー | ソース | 必須性 | 説明 |
NSAppTransportSecurity | Info.plist | 状況に応じて | HTTP平文または非標準TLSのターゲットがある場合のみ設定します。純粋なHTTPSの場合は設定しなくても構いません。 |
<key>NSAppTransportSecurity</key><dict><!-- グローバルな解放は推奨されません。ドメイン名ごとのきめ細かい設定を推奨します --><key>NSAllowsArbitraryLoads</key><false/><key>NSExceptionDomains</key><dict><key>example.com</key><dict><key>NSIncludesSubdomains</key><true/><key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key><true/><key>NSTemporaryExceptionMinimumTLSVersion</key><string>TLSv1.0</string></dict></dict></dict>
キー | ソース | 必須性 | 説明 |
NSLocalNetworkUsageDescription | Info.plist | 必須 | iOS 14以降のローカルネットワークアクセスの用途説明で、システムポップアップが表示されます。 |
NSBonjourServices | Info.plist | Bonjour検出時のみ必須です。 | 使用するBonjourサービスタイプを宣言します。 |
NSAppTransportSecurity | Info.plist | 状況に応じて | HTTPまたは弱いTLSを使用する場合でも、ATS例外が必要です。 |
<key>NSLocalNetworkUsageDescription</key><string>LAN内のデバイスのネットワーク接続性と遅延を検出および測定するために使用されます。</string><!-- Bonjour シナリオでのみ必要です --><key>NSBonjourServices</key><array><string>_http._tcp</string><string>_https._tcp</string><!-- 実際のプロトコルに応じて補足 --></array>
<key>NSLocationWhenInUseUsageDescription</key><string>現在のネットワーク環境情報を取得してネットワーク検出を支援するために使用されます。</string>
モジュール | ソースファイル | キー/能力 | 必須かどうか | ポップアップをトリガー | 用途説明 |
ネットワーク検出プラグイン | Info.plist | NSLocalNetworkUsageDescription | はい(ローカルネットワーク) | はい | LAN検出 |
ネットワーク検出プラグイン | Info.plist | NSBonjourServices | いいえ(Bonjour) | いいえ | LANサービス検出 |
ネットワーク検出プラグイン | Info.plist | NSAppTransportSecurity | 状況に応じて | いいえ | HTTP/弱TLS互換性 |
App層 | Info.plist | NSLocationWhenInUseUsageDescription | いいえ | はい | Wi-Fi情報読み取りの補助 |
CLS SDK | 追加の宣言はありません。 | デフォルトのネットワーク接続機能 | はい | いいえ | ログ報告/接続性リクエスト |
検出モジュール | 権限要件 | Socketタイプ | 説明 |
Ping(ICMP) | 管理者権限が必要です。 | SOCK_RAW | RAW Socketの作成には管理者権限が必要です。 |
TCPPing | 一般ユーザーで問題ありません。 | SOCK_STREAM | 標準TCP接続を使用します。 |
HTTP検出 | 一般ユーザーで問題ありません。 | 標準HTTP接続 | 特別な権限要件はありません。 |
DNS検出 | 一般ユーザーで問題ありません。 | UDP標準接続 | 特別な権限要件はありません。 |
MTR(ICMP) | 管理者権限が必要です。 | SOCK_RAW | RAW Socketの作成には管理者権限が必要です。 |
MTR(TCP/UDP) | 管理者権限が必要です。 | SOCK_RAW + SIO_RCVALL | RAW IP SocketおよびSIO_RCVALL権限が必要です。 |
機能 | 権限要件 | 説明 |
RAW Socketを作成します。 | 管理者権限 | socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) |
RAW IP Socketを作成します。 | 管理者権限 | socket(AF_INET, SOCK_RAW, IPPROTO_IP) |
SIO_RCVALLを有効にします。 | 管理者権限 | すべてのIPパケットを受信するために使用されます(ICMP Time Exceededを含む)。 |
シナリオ | エラーコード | 説明 |
PingによるRAW Socketの作成に失敗しました。 | PERMISSION_DENIED = -4 | 権限拒否エラーコードを返します。 |
MTRでSIO_RCVALLを有効にできませんでした。 | error=10013(WSAEACCES) | ログには「[mtr] FAILED: SIO_RCVALL failed, error=10013」と表示されます。 |
注意事項 | 説明 |
ファイアウォール設定 | 一部のファイアウォール(特にサードパーティ製ファイアウォール)はRAW Socketをブロックする可能性があります。管理者権限があっても、手動で許可ルールを設定する必要があります。 |
SQLiteストレージ | データベースファイルが配置されているディレクトリに書き込み権限があることを確認する必要があります。Windows環境でのUAC権限の問題に注意してください。 |
DLLの配置 | cls_network_detect.dll、cls_log_sdk.dll、sqlite3.dll が検索可能なパスに配置されていること、およびプログラムアーキテクチャが一致していることを確認する必要があります(x64への統一を推奨します)。 |
代替案 | 説明 |
TCPPingを使用してPingを代替します。 | TCPPingは通常のSOCK_STREAM接続を使用し、管理者権限は必要ありません。 |
HTTP検出を使用します。 | 標準HTTP接続であり、一般ユーザーでも実行できます。 |
DNS検出を使用します。 | UDP標準接続であり、一般ユーザーでも実行できます。 |
MTRルート追跡を放棄します。 | MTR機能はRAW Socketに強く依存しており、通常の権限では実行できません。 |
プローブ機能 | Android | iOS | Windows |
Ping(ICMP) | INTERNET | デフォルトのネットワーク接続機能 | ⚠️ 管理者権限 |
TCPPing | INTERNET | デフォルトのネットワーク接続機能 | ✅ 一般ユーザー |
HTTP検出 | INTERNET | ATS設定(状況に応じる) | ✅ 一般ユーザー |
DNS検出 | INTERNET | デフォルトのネットワーク接続機能 | ✅ 一般ユーザー |
MTRルート追跡 | INTERNET | デフォルトのネットワーク接続機能 | ⚠️ 管理者権限 |
LAN検出 | ACCESS_NETWORK_STATE | NSLocalNetworkUsageDescription | ✅ 一般ユーザー(ファイアウォールの解放が必要) |
ネットワーク状態取得 | ACCESS_NETWORK_STATE / ACCESS_WIFI_STATE | 追加の権限は不要です。 | 追加の権限は不要です。 |
データ報告(CLS) | INTERNET / ACCESS_NETWORK_STATE | デフォルトのネットワーク接続機能 | ✅ 一般ユーザー |
フィードバック