- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Android 上编写一个简单的 native 应用程序,以通过 Netlink MLME 和 SCAN 事件捕获所有与 Wifi 相关的事件(特别是我需要 Wifi Scan、Association、DisAssociation、Authentication、DeAuthentication、Roaming 等事件)。
我开发了一个 native 应用程序并使用 adb 将其推送到设备(/system/bin)并以 root 身份运行。但是,当我打开/关闭 wifi 时,我只会收到 CONNECT/DISCONNECT 事件。我没有收到任何其他事件,例如:SCAN_TRIGGER、SCAN_RESULTS、(DIS)ASSOCIATION、(DE)AUTHENTICATION、ROAMING 等...
我在下面分享了代码。你能帮我解决这个问题(如果有的话),以便它适用于所有 Wifi 事件吗?提前致谢!
#include <netlink/netlink.h>
#include <netlink/attr.h>
#include <netlink/genl/genl.h>
#include <netlink/genl/ctrl.h>
#include <net/if.h>
#include <signal.h>
#include <stdint.h>
#include <linux/nl80211.h>
#define print_err(...) fprintf(stderr, __VA_ARGS__)
static struct nl_sock *sk = NULL;
static int nlCallback(struct nl_msg* msg, void* arg)
{
printf("\n\t nlCallback Start\n");
struct nlmsghdr* ret_hdr = nlmsg_hdr(msg);
struct genlmsghdr *gnlh = nlmsg_data(ret_hdr);
printf("nlCallback: Event Commmand: %d\n", gnlh->cmd);
switch(gnlh->cmd) {
case NL80211_CMD_TRIGGER_SCAN :
printf("nlCallback: cmd: NL80211_CMD_TRIGGER_SCAN \n");
break;
case NL80211_CMD_SCAN_ABORTED :
printf("nlCallback: cmd: NL80211_CMD_SCAN_ABORTED \n");
break;
case NL80211_CMD_NEW_SCAN_RESULTS :
printf("nlCallback: cmd: NL80211_CMD_NEW_SCAN_RESULTS \n");
break;
case NL80211_CMD_CONNECT :
printf("nlCallback: cmd: NL80211_CMD_CONNECT \n");
break;
case NL80211_CMD_DISCONNECT :
printf("nlCallback: cmd: NL80211_CMD_DISCONNECT \n");
break;
case NL80211_CMD_NEW_STATION:
printf("nlCallback: cmd: NL80211_CMD_NEW_STATION \n");
break;
case NL80211_CMD_DEL_STATION:
printf("nlCallback: cmd: NL80211_CMD_DEL_STATION\n");
break;
case NL80211_CMD_AUTHENTICATE:
printf("nlCallback: cmd: NL80211_CMD_AUTHENTICATE\n");
break;
case NL80211_CMD_DEAUTHENTICATE:
printf("nlCallback: cmd: NL80211_CMD_DEAUTHENTICATE\n");
break;
case NL80211_CMD_ASSOCIATE:
printf("nlCallback: cmd: NL80211_CMD_ASSOCIATE\n");
break;
case NL80211_CMD_DISASSOCIATE:
printf("nlCallback: cmd: NL80211_CMD_DISASSOCIATE\n");
break;
case NL80211_CMD_ROAM:
printf("nlCallback: cmd: NL80211_CMD_ROAM\n");
break;
default:
printf("nlCallback: Default multicast event: %d\n", gnlh->cmd);
return NL_SKIP;
}
return 0;
}
static int cleanup_and_exit(int ret)
{
if (sk != NULL)
nl_socket_free(sk);
exit(ret);
}
static void signal_handler(int sig)
{
cleanup_and_exit(EXIT_SUCCESS);
}
int main()
{
printf("\n\t ****** main() Start *******\n");
int ret;
int sk_fd;
fd_set rfds;
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
sk = nl_socket_alloc();
if (sk == NULL) {
print_err(" main(): ERROR : Unable to allocate Netlink socket\n");
exit(EXIT_FAILURE);
}
ret = genl_connect(sk);
if (ret < 0) {
print_err(" main(): ERROR : no connect %d\n", ret);
cleanup_and_exit(EXIT_FAILURE);
}
int mc_grp1 = genl_ctrl_resolve_grp(sk, "nl80211", "mlme");// will return 5.
if (mc_grp1 < 0) {
print_err("main(): ERROR : MLME group not found : %d\n", mc_grp1);
cleanup_and_exit(EXIT_FAILURE);
}
int mc_grp2 = genl_ctrl_resolve_grp(sk, "nl80211", "scan");// will return 3.
if (mc_grp2 < 0) {
print_err("main(): ERROR : SCAN group not found : %d\n", mc_grp2);
cleanup_and_exit(EXIT_FAILURE);
}
printf("\n\t main() Subcribed group ids:: MLME: %d, SCAN: %d\n", mc_grp1, mc_grp2);
ret = nl_socket_add_memberships(sk, mc_grp1, mc_grp2, 0);
if (ret < 0) {
print_err("main(): ERROR : Unable to join multicast group %d\n", ret);
cleanup_and_exit(EXIT_FAILURE);
}
nl_socket_disable_seq_check(sk);
ret = nl_socket_modify_cb(sk, NL_CB_VALID, NL_CB_CUSTOM, nlCallback, NULL);
if (ret < 0) {
print_err(" main(): ERROR : Unable to register callback %d\n", ret);
cleanup_and_exit(EXIT_FAILURE);
}
while (1) {
printf("\nmain(): While(1): Waiting for MLME/SCAN events \n");
ret = nl_recvmsgs_default(sk);
if (ret < 0) {
cleanup_and_exit(EXIT_FAILURE);
}
printf("main(): While(1): MLME/SCAN event received: %d \n", ret);
}
printf("\n\t ****** main() End *******\n");
cleanup_and_exit(EXIT_FAILURE);
}
最佳答案
根据 wifi 驱动程序的能力,它可能会向用户空间发送不同的 NL80211 消息集。我认为您可以使用“iw”命令交叉检查结果,例如:
iw event -f
见:
https://wireless.wiki.kernel.org/en/users/documentation/iw
关于android - 如何使用 nl80211.h 在 Android 上捕获所有 Wifi SCAN/MLME 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46451801/
我正在使用扫描仪检测设备。目前,我的条形码的值为 2345345 A1。因此,当我扫描到记事本或文本编辑器时,输出将类似于 2345345 A1,这是正确的条形码值。 问题是: 当我第一次将条形码扫描
我正在尝试在 Jenkins 的构建后部分运行 Checkmarx Scan。 在我的 Jenkins 工作步骤是--> 1st) 从 SVN Connection 获取源代码到 Checkmarx
我有以下表架构 - CREATE TABLE [dbo].[TEST_TABLE] ( [TEST_TABLE_ID] [int] IDENTITY(1,1) NOT NULL, [N
我有一个关于 postgres 表上的选择的有趣案例: advert (~2.5 million records) id serial, user_id integer (foreig
据我所知,context:component-scan 需要指定 base-package 属性。我如何配置它以扫描类路径中的所有类? 最佳答案 你不知道。那将是一场噩梦。 例如,这意味着加载所有库的
我正在测试不同的查询,我很好奇数据库如何决定使用位图堆扫描和索引扫描。 create index customers_email_idx on customers(email varchar_patt
我在使用中 Swing 不定 import java.util.Scanner; . . . Scanner scan = new Scanner(System.in); . . . Integer.
我有下表 create table log ( id bigint default nextval('log_id_seq'::regclass) not null const
所以我有一个文件要读入,我知道数据将如何列出。例如,我知道每个新行的第一个标记将是 double 。 我一直在使用 Scanner 并且只是使用 scan.nextDouble() 来读取 doubl
在这种情况下,该表有很多文本列,我需要对每一列执行(相似)搜索。我继续为这些列中的每一列创建一个 gin 索引(扩展 pg_trgm 中的 gin_trgm_ops)以加快搜索速度,实际上 yie
我有两个针对 Go 中特定表的查询 - 一个用于检索单个项目,另一个用于返回列表。第一个使用 sql.DB.QueryRow 因为它只需要检索一行,第二个使用 sql.DB.Query 返回几个不同的
添加 StructureMap-MVC3 时打包到 ASP.NET MVC 应用程序, 一个 IoC包含 Initialize 的类添加了包含以下内容的方法(由 App_Start 文件夹中的某些代码
我有以下索引: CREATE INDEX index_c_profiles_on_city_state_name_domain ON c_profiles ((data->>'state'), (da
我在 Postgres 10 中有一个包含 1700 万行和 102 列的表 union_events。我运行命令: CREATE INDEX union_events_index ON temp_s
我以为我知道 Ruby 中的 scan:就好像它在做一个单一的匹配,但对所有结果重复它并放入数组? ruby-1.9.2-p0 > "hello world".scan(/\w{2}/) => ["
我收到此错误并尝试了互联网和 stackoverlow 中可用的所有方法来解决此问题。我试图在使用 sqlx 包连接 MySQL 数据库并扫描结果后运行查询。我已经尝试过针对类似问题共享的解决方案,但
我是 spring 和 Maven 的新手。最近我构建了 spring MVC 项目并使用 maven 来管理项目结构和依赖项。 当我编写单元测试时,我遇到了一个问题,即我无法从“src/main/j
我现在正在尝试 restful api,其中列 SequenceID 不是自动增量,因为故意的,当我像这样计数时,我的问题是库 gorm countSequenceId := db.Debug().T
Scans 当客户端针对表发出扫描时,HBase会为每个区域生成一个RegionScanner对象来提供扫描请求。 该RegionScanner对象包含一个StoreScanner对象列表
我正在构建一个基于浏览器的文档扫描应用程序。我看过多家供应商提供的产品,如 dynamosoft、asprise、atalasoft 等。我对基于浏览器的文档扫描的基本问题是,这些产品中的任何一个都可
我是一名优秀的程序员,十分优秀!