NETLINK IPCメカニズムに基づくプロセス間通信デバッグ
1701 ワード
NETLINKベースのアプリケーションでは、アプリケーションとカーネル間の通信のコマンドとイベントを表示する方法が必要です.
現在、カーネルはnetlinkモニタリングのカーネルモジュールを実現しており、このカーネルモジュールに基づいて、従来のネットワークプロトコルキャプチャ方式を使用してNETLINK関連のコマンドとイベントを取得することができます.
1)カーネルNETLINKモニタ機能を開く
CONFIG_NLMON=m//モジュールで開く
2)ipコマンドを使用してnlmonネットワークポートを作成する
#ip link add nlmon0 type nlmon
#ip link set nlmon0 up
3)tcpdumpを使用して、アプリケーションのインタラクティブシーン間で発生するNETLINKベースのメッセージのキャプチャを開始する
tcpdump -i nlmon0 -w/path/to/writable/folder/netlinkMsg.pcap
4)テストが完了し、wiresharkツールを使用してpcapパッケージを開くと、
5)現在の問題
a)カーネルデフォルトモジュールはnetlinkメッセージカテゴリを制限しており、現在は以下のように簡単にこの関数を修正することができ、
tcpdumpはnetlinkタイプのメッセージをすべてキャプチャできます
簡単な変更は次のとおりです.
b)wiresharkのデフォルトのnetlinkプロトコル解析器のサポートが不十分で、現在NETLINK_のみをサポートしている.ROUTE,NETLINK_GENERIC,NETLINK_SOCK_DIAGはいくつかありますが、解析器のサポートが不十分で、コマンドと内容をよく見ることができません.
例えばnl 80211に対して、簡単な基本コマンドしか解析できません.ハイパスプラットフォーム、WLAN関連には大量のVENDORコマンドとイベントがユーザープロセスとカーネルWLANで駆動されています.wiresharkの解析器を拡張する必要があります.
現在、カーネルはnetlinkモニタリングのカーネルモジュールを実現しており、このカーネルモジュールに基づいて、従来のネットワークプロトコルキャプチャ方式を使用してNETLINK関連のコマンドとイベントを取得することができます.
1)カーネルNETLINKモニタ機能を開く
CONFIG_NLMON=m//モジュールで開く
2)ipコマンドを使用してnlmonネットワークポートを作成する
#ip link add nlmon0 type nlmon
#ip link set nlmon0 up
3)tcpdumpを使用して、アプリケーションのインタラクティブシーン間で発生するNETLINKベースのメッセージのキャプチャを開始する
tcpdump -i nlmon0 -w/path/to/writable/folder/netlinkMsg.pcap
4)テストが完了し、wiresharkツールを使用してpcapパッケージを開くと、
5)現在の問題
a)カーネルデフォルトモジュールはnetlinkメッセージカテゴリを制限しており、現在は以下のように簡単にこの関数を修正することができ、
tcpdumpはnetlinkタイプのメッセージをすべてキャプチャできます
static bool netlink_filter_tap(const struct sk_buff *skb)
{
struct sock *sk = skb->sk;
/* We take the more conservative approach and
* whitelist socket protocols that may pass.
*/
switch (sk->sk_protocol) {
case NETLINK_ROUTE:
case NETLINK_USERSOCK:
case NETLINK_SOCK_DIAG:
case NETLINK_NFLOG:
case NETLINK_XFRM:
case NETLINK_FIB_LOOKUP:
case NETLINK_NETFILTER:
case NETLINK_GENERIC:
return true;
}
return false;
簡単な変更は次のとおりです.
static bool netlink_filter_tap(const struct sk_buff *skb)
{ //let all netlink type msg pass
return true;
}
b)wiresharkのデフォルトのnetlinkプロトコル解析器のサポートが不十分で、現在NETLINK_のみをサポートしている.ROUTE,NETLINK_GENERIC,NETLINK_SOCK_DIAGはいくつかありますが、解析器のサポートが不十分で、コマンドと内容をよく見ることができません.
例えばnl 80211に対して、簡単な基本コマンドしか解析できません.ハイパスプラットフォーム、WLAN関連には大量のVENDORコマンドとイベントがユーザープロセスとカーネルWLANで駆動されています.wiresharkの解析器を拡張する必要があります.