root 以外のpcap_lookupdev()
ユーザーとして実行された場合は errbuf 変数に入力されますが、root として実行された場合は同じ関数が最初に使用可能なネットワーク インターフェイスの値を返します。
このアクセスは、OS またはライブラリによって無効にされていますか。OSだと思います。正解は?
これは宿題の質問ではありません
一般に、ファイル、デバイス、および OS によって提供されるその他のサービスへのアクセスに関しては、Unix (したがって Linux) のアクセス モデルが OS に実装されています。
ユーザー空間プログラムは、実行したいことは何でも試し、ユーザーにメッセージを通知するなどしてエラー状態を適切に処理することが期待されます。
これにはいくつかの利点があります。
保守性: アクセス ポリシーの適用は OS に残り、一様に構成できます。リソースへのアクセスを制限したい管理者は、ここでこのライブラリを構成するのではなく、そのライブラリをそこに構成するのではなく、1 回実行します。
構成可能性: 管理者は、ユーザー空間の実装ごとに制限されることなく、必要なアクセス ポリシーを単純または複雑に構成できます。
セキュリティ: 一般に、ユーザー空間プログラムは、アクセス ポリシーの実施に関して信頼されるべきではありません。オオカミが羊を守っているようなものです。
編集:
あなたの場合、pcap
ネットワークインターフェイスへの低レベルのアクセスが必要です。セキュリティへの影響 (ネットワーク トラフィックのキャプチャ、任意のネットワーク パケットの生成など) により、このようなアクセスは特権ユーザーのみに制限されます。たとえば、Linux では、ユーザーが使用できる機能pcap
が必要です。CAP_NET_RAW
pcap 機能の多くは、正しく動作するために root 権限が必要です。これが問題ではないでしょうか?