最近在进行和802.11漫游有关的工作,需要对wpa_supplicant认证流程和漫游过程有更多的了解,所以通过阅读论文等方式,记录整理漫游相关知识。Part1将记录802.11漫游的基本流程、802.11R的基本流程、与认证和漫游都有关的三层秘钥基础。Part1将包括普通漫游流程、三层秘钥原理 和802.11R漫游流程。Part2将包括wpa_supplicant有关部分解析,Part3将包括抓包分析。
首先假设一个场景,STA首次与AP1相连,物理空间上逐步远离AP1,所以打算切换到AP2上,这个过程在802.11中就被称为漫游。
本节为Part2分析的过程中,发现的一个难以解释的情况。
在使用-d 或者-dd去分析wpa的log的时候,看到了这条打印:
PSK (ASCII passphrase) - hexdump_ascii(len=13): [REMOVED]
对应的log打印函数在这:
static int wpa_config_parse_psk(const struct parse_data *data,
struct wpa_ssid *ssid, int line,
const char *value)
令人惊讶地: wpa_config_parse_psk没有任何被调用的迹象
事实上此函数通过以下路径调用:
原来是字符串拼接之后调用——事实上这种调用方式在很多情况都有使用,适用于同组多分支,全部声明过于浪费代码量的情况以及想要使用static,避免被文件外调用的情况。