1

このリンクに記載されているのと同様のタスクが必要です。. Android でのソケットのパッシブ モニタリング。1 つの方法は、/proc/net/{tcp,udp,...} テーブルを解析することです。しかし、監視を続けるためには、継続的に読み続ける必要があります。これは効率的な方法ではありません。これはモバイル デバイス アプリになるため、時間間隔 (たとえば 1 秒) の監視を続けるために CPU 時間を必要とするため、バッテリーを消費します。

しかし、私はイベントベースのアプローチを探しています。同じことについてグーグルで調べたところ、ソケットを監視するためにNETLINKで終了しました。しかし、Android NDK は

#include <linux/sock_diag.h>
#include <linux/inet_diag.h>
#include <linux/unix_diag.h>
#include <linux/packet_diag.h>
#include <linux/netlink_diag.h>

INETソケットを監視するためにAndroidでNETLINKを使用しようとした人はいますか? もしそうなら、情報を共有してください。

ありがとう。


更新: 上記のファイルを「jni」フォルダーにコピーして貼り付け、ndk-build を使用してビルドしようとしました。ビルドは成功し、実行時のクラッシュもありませんでした。ただし、型のソケット作成

socket(AF_NETLINK, SOCK_DGRAM, NETLINK_INET_DIAG)

エラー EACCES(13) で失敗しています - 指定されたタイプまたはプロトコルのソケットを作成する権限が拒否されました。

さらに進める方法について何か提案はありますか?

4

2 に答える 2

3

Android Lollipop では、Android の Security Enhanced Linux (SELinux) が「強制」モードで有効になっています。app.teのサンドボックス定義Android ソース コード - SE ポリシー(以下に貼り付けた抜粋) を観察/確認すると、netlink ソケットのサポートはありません。

app.te

# Privileged netlink socket interfaces.
 
neverallow appdomain
 
    self:{
 
        netlink_socket
 
        netlink_firewall_socket
 
        netlink_tcpdiag_socket
 
        netlink_nflog_socket
 
        netlink_xfrm_socket
 
        netlink_audit_socket
 
        netlink_ip6fw_socket
 
        netlink_dnrt_socket
 
    } *;
于 2014-12-09T06:58:14.107 に答える
0

アプリにはルート権限が必要だと思います!

于 2019-05-27T15:01:46.470 に答える