- 論壇徽章:
- 1
|
我的內(nèi)核版本是3.12, NETLINK里面有一個叫NETLINK_SOCK_DIAG的項, 注釋是 socket monitor, 我自己理解如下:
如果有一個程序創(chuàng)建了NETLINK_SOCK_DIAG的netlink socket, 那么它可以監(jiān)控所有的應(yīng)用程序創(chuàng)建的socket, 即在其他應(yīng)用程序創(chuàng)建socket之后,它會收到內(nèi)核發(fā)來的netlink消息。
我寫了程序嘗試, 主要代碼如下:- sock = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG);
- struct sockaddr_nl sa;
- sa.nl_family = AF_NETLINK;
- sa.nl_groups = 0xFFFFFFFF;
- sa.nl_pid = 0;
- bind(sock, &sa, sizeof(sa));
- while(1)
- {
- recv(sock, buffer, 4096, 0);
- printf("recv message\n");
- }
復(fù)制代碼 啟動這個程序后, 嘗試arping/ping/tftp/ftp, 發(fā)現(xiàn)并未收到任何內(nèi)核主動發(fā)來的netlink消息。 只有主動向內(nèi)核發(fā)送request消息,才會收到reply。
請教各位: 是否可以做到被動監(jiān)聽所有socket(即內(nèi)核主動通知進程,而非進程定時發(fā)送request查詢).
google搜了很久, 沒發(fā)現(xiàn)有用的介紹 |
|