使用 iwinfo 库没有扫描结果
No scan result using iwinfo library
我是 OpenWrt 新手。我正在使用 iwinfo lib 扫描 wifi。在我多次扫描我的代码之前,它工作正常。起初我认为是因为我使用这个库做错了,所以我尝试修改 iwinfo 库中的 cli 程序并使其扫描两次。这是 cli 代码的主要功能,它只会工作一次。 print_scanlist 函数实现与cli程序中相同。
int main() {
const struct iwinfo_ops *iw = iwinfo_backend("wlan0");
print_scanlist(iw, "wlan0");
print_scanlist(iw, "wlan0");
iwinfo_finish();
return 0;
}
起初我认为是因为硬件不允许短时间扫描。但是,如果我第二次 运行 程序,它仍然适用于第一个功能。现在我不知道为什么会这样,有人知道为什么吗?
我几乎可以肯定这些选项之一(甚至可能两个)都有效:
int main() {
const struct iwinfo_ops *iw = iwinfo_backend("wlan0");
print_scanlist(iw, "wlan0");
iwinfo_finish();
print_scanlist(iw, "wlan0");
iwinfo_finish();
return 0;
}
int main() {
print_scanlist(iwinfo_backend("wlan0"), "wlan0");
iwinfo_finish();
print_scanlist(iwinfo_backend("wlan0"), "wlan0");
iwinfo_finish();
return 0;
}
了解 iw
不是某种句柄很重要,它只是指向存储在后端库中的函数列表的指针。该列表是硬编码的,无法在运行时修改。
由于我使用nl80211作为后端,所以我深入研究了iwinfo的源代码。我发现它正在使用 WPA 请求者。在扫描函数中,它调用了一个函数名 nl80211_get_scanlist_wpactl
,它的目的是连接到 WPA 请求者并要求它扫描并获取结果。
iwinfo 中的步骤是
send(sock, "ATTACH", 6, 0);
send(sock, "SCAN", 4, 0);
send(sock, "SCAN_RESULTS", 12, 0);
问题是 iwinfo 忘记调用 DETACH,因此下次您将无法执行任何操作。所以在我添加 send(sock, "DETACH", 6, 0)
之后,我让它工作了。谢谢大家
我是 OpenWrt 新手。我正在使用 iwinfo lib 扫描 wifi。在我多次扫描我的代码之前,它工作正常。起初我认为是因为我使用这个库做错了,所以我尝试修改 iwinfo 库中的 cli 程序并使其扫描两次。这是 cli 代码的主要功能,它只会工作一次。 print_scanlist 函数实现与cli程序中相同。
int main() {
const struct iwinfo_ops *iw = iwinfo_backend("wlan0");
print_scanlist(iw, "wlan0");
print_scanlist(iw, "wlan0");
iwinfo_finish();
return 0;
}
起初我认为是因为硬件不允许短时间扫描。但是,如果我第二次 运行 程序,它仍然适用于第一个功能。现在我不知道为什么会这样,有人知道为什么吗?
我几乎可以肯定这些选项之一(甚至可能两个)都有效:
int main() {
const struct iwinfo_ops *iw = iwinfo_backend("wlan0");
print_scanlist(iw, "wlan0");
iwinfo_finish();
print_scanlist(iw, "wlan0");
iwinfo_finish();
return 0;
}
int main() {
print_scanlist(iwinfo_backend("wlan0"), "wlan0");
iwinfo_finish();
print_scanlist(iwinfo_backend("wlan0"), "wlan0");
iwinfo_finish();
return 0;
}
了解 iw
不是某种句柄很重要,它只是指向存储在后端库中的函数列表的指针。该列表是硬编码的,无法在运行时修改。
由于我使用nl80211作为后端,所以我深入研究了iwinfo的源代码。我发现它正在使用 WPA 请求者。在扫描函数中,它调用了一个函数名 nl80211_get_scanlist_wpactl
,它的目的是连接到 WPA 请求者并要求它扫描并获取结果。
iwinfo 中的步骤是
send(sock, "ATTACH", 6, 0);
send(sock, "SCAN", 4, 0);
send(sock, "SCAN_RESULTS", 12, 0);
问题是 iwinfo 忘记调用 DETACH,因此下次您将无法执行任何操作。所以在我添加 send(sock, "DETACH", 6, 0)
之后,我让它工作了。谢谢大家