pcap_set_rfmon return 0 为成功但接口未设置为监控模式
pcap_set_rfmon return 0 as success but the interface is not set to monitor mode
我正在尝试编写一个小程序,使用 C
将我的网络接口设置为 monitor mode
,函数 pcap_set_rfmon returns 0 成功但接口仍处于管理模式。我确定我的网卡支持监控模式,因为我已经使用 ng-airmon
和 iwconfig wlp3s0 mode monitor
检查过 wlp3s0 是我的网络接口的名称。
这是我的代码:
#include <pcap.h>
main()
{
char error_buffer[PCAP_ERRBUF_SIZE];
pcap_t *handle = pcap_create("wlp3s0", error_buffer);
int result = pcap_set_rfmon(handle, 1);
if (result != 0)
{
printf("failed to set pcap rfmon");
}
}
因为代码没有输出任何东西,只有 returns 0,我不知道出了什么问题,也不知道该看哪里,你们能告诉我我应该检查什么或者缺少什么吗
引用 pcap_set_rfmon()
的文档:
pcap_set_rfmon()
sets whether monitor mode should be set on a capture handle when the handle is activated. ...
我已经强调了其中的一部分——“当手柄被激活时”。 pcap_set_rfmon()
所做的只是在 pcap_t
中设置一个标志,以指示 当程序调用 pcap_activate()
时,适配器将进入监控模式(如果 pcap_activate()
成功)。
你没有打电话给 pcap_activate()
,所以没有任何反应。
您还必须保持 pcap_t
打开 - 即使是
#include <pcap.h>
main()
{
char error_buffer[PCAP_ERRBUF_SIZE];
pcap_t *handle;
int result;
handle = pcap_create("wlp3s0", error_buffer);
if (handle == NULL)
{
printf("failed to create a handle: %s\n",
error_buffer);
return 2;
}
result = pcap_set_rfmon(handle, 1);
if (result != 0)
{
printf("failed to set pcap rfmon: %s (%s)\n",
pcap_statustostr(result),
pcap_geterr(handle));
return 2;
}
result = pcap_activate(handle);
{
printf("failed to activate handle: %s (%s)\n",
pcap_statustostr(result),
pcap_geterr(handle));
return 2;
}
}
只会让适配器在退出时恢复到托管模式。您需要添加诸如
之类的内容
for (;;)
pause();
在 main()
的末尾,因此程序不会退出,除非您中断或终止它。
(注意:我在程序中添加了更多的错误检查和报告。这是一件好事,因为这意味着,如果某事不起作用,程序将给出详细的错误报告,帮助您 - 或者无论你向谁寻求帮助 - 尝试解决问题,而不是默默地失败,或者如果 pcap_create()
失败,崩溃。)
我正在尝试编写一个小程序,使用 C
将我的网络接口设置为 monitor mode
,函数 pcap_set_rfmon returns 0 成功但接口仍处于管理模式。我确定我的网卡支持监控模式,因为我已经使用 ng-airmon
和 iwconfig wlp3s0 mode monitor
检查过 wlp3s0 是我的网络接口的名称。
这是我的代码:
#include <pcap.h>
main()
{
char error_buffer[PCAP_ERRBUF_SIZE];
pcap_t *handle = pcap_create("wlp3s0", error_buffer);
int result = pcap_set_rfmon(handle, 1);
if (result != 0)
{
printf("failed to set pcap rfmon");
}
}
因为代码没有输出任何东西,只有 returns 0,我不知道出了什么问题,也不知道该看哪里,你们能告诉我我应该检查什么或者缺少什么吗
引用 pcap_set_rfmon()
的文档:
pcap_set_rfmon()
sets whether monitor mode should be set on a capture handle when the handle is activated. ...
我已经强调了其中的一部分——“当手柄被激活时”。 pcap_set_rfmon()
所做的只是在 pcap_t
中设置一个标志,以指示 当程序调用 pcap_activate()
时,适配器将进入监控模式(如果 pcap_activate()
成功)。
你没有打电话给 pcap_activate()
,所以没有任何反应。
您还必须保持 pcap_t
打开 - 即使是
#include <pcap.h>
main()
{
char error_buffer[PCAP_ERRBUF_SIZE];
pcap_t *handle;
int result;
handle = pcap_create("wlp3s0", error_buffer);
if (handle == NULL)
{
printf("failed to create a handle: %s\n",
error_buffer);
return 2;
}
result = pcap_set_rfmon(handle, 1);
if (result != 0)
{
printf("failed to set pcap rfmon: %s (%s)\n",
pcap_statustostr(result),
pcap_geterr(handle));
return 2;
}
result = pcap_activate(handle);
{
printf("failed to activate handle: %s (%s)\n",
pcap_statustostr(result),
pcap_geterr(handle));
return 2;
}
}
只会让适配器在退出时恢复到托管模式。您需要添加诸如
之类的内容 for (;;)
pause();
在 main()
的末尾,因此程序不会退出,除非您中断或终止它。
(注意:我在程序中添加了更多的错误检查和报告。这是一件好事,因为这意味着,如果某事不起作用,程序将给出详细的错误报告,帮助您 - 或者无论你向谁寻求帮助 - 尝试解决问题,而不是默默地失败,或者如果 pcap_create()
失败,崩溃。)