WIFI学习五(STA与AP,基于MT7682)

1.WIFI的STA和AP是什么?

AP(Access Point)无线接入点

        AP是无线接入点,是一个无线网络的创建者,是网络的中心节点。一般家庭或办公室使用的无线路由器就是一个AP

STA(Station)站点

        STA也可以理解为终端的意思,每一个连接到无线网络中的终端(例如笔记本电脑,手机等其他可以联网的设备)都可以成为一个STA站点。

SSID(Service Set Identifier)服务集标识符

        每个无线AP都应该有一个SSID用于识别,就是通常所说的WIFI名

BSSID(Basic Service Set Identifier)基本服务集标识符

        每一个网络设备都有其用于识别的物理地址,这个东西就是MAC地址。一般在出厂后会有一个默认MAC,可更改。MAC地址作为设备识别的标识符。BSSID是针对STA而言对于STA来说,获取到AP接入点的MAC地址就是BSSID

        例如:某个AP释放一个名为A的WIFI热点,同一区域内另一个AP也释放一个名为A的WIFI热点,当手机连接A热点时,如何辨别连接的是哪个AP呢?此时就要用到BSSID。一般情况下BSSID可以理解为无线路由器的MAC地址,通过查看手机连接WIFI的MAC地址即可知道连接的是哪个AP。

ESSID(Extended Service Set Identifier)扩展服务集标识符

        ESSID是一个比较抽象的概念,它实际上和SSID相同,只是如果有好几个AP热点名字相同,此时就相当于把这个SSID扩大了,这几个AP共同的名字就叫ESSID

        例如:某个AP释放一个名为A的WIFI热点,同一区域内另一个AP也释放一个名为A的WIFI热点,那么A就是ESSID

2.AP的相关配置

typedef struct {

    uint8_t ssid[WIFI_MAX_LENGTH_OF_SSID];    /**< The SSID of the AP. */

    uint8_t ssid_length;                      /**< The length of the SSID. */

    uint8_t password[WIFI_LENGTH_PASSPHRASE]; /**< The password of the AP. */

    uint8_t password_length;                  /**< The length of the password. */

    wifi_auth_mode_t auth_mode;               /**< The authentication mode. */

    wifi_encrypt_type_t encrypt_type;         /**< The encryption mode. */

    uint8_t channel;                          /**< The channel. */

    uint8_t bandwidth;                        /**< The bandwidth that is either #WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_20MHZ or #WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_40MHZ. */

    wifi_bandwidth_ext_t bandwidth_ext;       /**< The bandwidth extension. It is only applicable when the bandwidth is set to #WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_40MHZ. */

} wifi_ap_config_t;

ssid

生成的热点名称,最大32字节

ssid_length

生成的热点名称长度

password

无线热点的连接密码,最大64字节

password_length

密码长度

auth_mode

认证模式。

typedef enum {

    WIFI_AUTH_MODE_OPEN = 0,                        /**< Open mode.     */

    WIFI_AUTH_MODE_SHARED,                          /**< Not supported. */

    WIFI_AUTH_MODE_AUTO_WEP,                        /**< Not supported. */

    WIFI_AUTH_MODE_WPA,                             /**< Not supported. */

    WIFI_AUTH_MODE_WPA_PSK,                         /**< WPA_PSK.       */

    WIFI_AUTH_MODE_WPA_None,                        /**< Not supported. */

    WIFI_AUTH_MODE_WPA2,                            /**< Not supported. */

    WIFI_AUTH_MODE_WPA2_PSK,                        /**< WPA2_PSK.      */

    WIFI_AUTH_MODE_WPA_WPA2,                        /**< Not supported. */

    WIFI_AUTH_MODE_WPA_PSK_WPA2_PSK,                /**< Mixture mode.  */

    WIFI_AUTH_MODE_WPA3,                            /**< Not supported. */

    WIFI_AUTH_MODE_WPA3_PSK,                        /**< WPA3_PSK.      */

    WIFI_AUTH_MODE_WPA2_WPA3,                       /**< Not supported. */

    WIFI_AUTH_MODE_WPA2_PSK_WPA3_PSK,               /**< Mixture mode.  */

    WIFI_AUTH_MODE_MAX,

} wifi_auth_mode_t;

WIFI_AUTH_MODE_OPEN

        开放模式,不需要输入密码即可连接。任何人都可以连接到无线热点并使用网络

WEP(Wired Equivalent Privacy)有线等效加密

        最基本的加密技术。手机、笔记本电脑、AP拥有相同的网络密钥,才能解读互相传递的数据。密钥分为64bits及128bits两种。最多可设定四组不同的密钥。当用户端进入WLAN前必须输入正确的密钥才能进行连接。

        WEP加密方法很脆弱。网络上每个客户或者计算机都是用了相同的保密字,这种方法使网络偷听者能刺探到密钥,偷走数据并且在网络上造成混乱。

WPA(WIFI Protected Access)保护无线电脑安全系统

        由WIFI联盟所提供的无线安全标准,分为家用WPA-PSK(Pre-Shared Key)与企业用的WPA-Enterprise版本。

WPA-PSK

        为了堵塞WEP的漏洞而发展的加密技术,使用方法与WEP相似。AP与STA必须设定相同的KEY才可以连入网络。但进入WLAN时长更长词组或子串作为网络金钥。并且WPA-PSK运用了TKIP(Temporal Key Integrity Protocol)技术,因此比WEP难被破解而更加安全。

        WPA-PSK通过为每个客户分配唯一的密钥而工作,但需要给雇员密码以便登录系统。这样,外部的人可通过他们享用网络资源。如果希望修改密码(建议每隔一段时间修改密码以防止偷听者解码),可以到每台电脑前去输入新的密码。

WPA-Enterprise

        采用IEEE 802.1x则需要有另一台储存无线使用者账户数据的RADIUS (Remote Authentication Dial-In User Service)服务器,当笔记型计算机连入无线基地台时,无线基地台会要求使用者输入账号密码、或是自动向笔记型计算机索取储存在计算机硬盘的使用者数字凭证,然后向RADIUS服务器确认使用者的身分。而用来加密无线封包的加密金钥(Key),也是在认证的过程中自动产生,并且每一次联机所产生的金钥都不同(专业术语称为Session Key),因此非常难被破解。

        用用户名和密码安全登陆网络后,每个客户会自动得到一个唯一的密钥,密钥很长并且每隔一段时间就会被更新。这样wi-Fi监听者就不能获取足够的数据包来解码密钥。即使一个密钥因为某种原因被解码了,富于经验的黑客有可能发现新的密钥,但是加密锁已经变了。

        一但应用了WPA-Enterprise,不像WPA-PSK那样,雇员将不会知道密码。这样,外部的人就不能通过他们享用网络资源。WPA-Enterprise还可以节约你大量的时间;你无需花费大量的时间去人工更换客户的密码。

WPA2

        WPA2顾名思义就是WPA的加强版,也就是IEEE 802.11i无线网络标准。同样有家用的PSK版本与企业的IEEE 802.1x版本。WPA2与WPA的差别在于,它使用更安全的加密技术AES (Advanced Encryption Standard),因此比WPA更难被破解、更安全

WPA3

        WPA3,它将会取代WPA2。新标准为每个用户使用192比特加密和单独加密。Wi-Fi联盟还称,WPA3将缓解由弱密码造成的安全问题,并简化无显示接口设备的设置流程。

encrypt_type

        加密模式

typedef enum {

    WIFI_ENCRYPT_TYPE_WEP_ENABLED = 0,                                              /**< WEP encryption type.  */

    WIFI_ENCRYPT_TYPE_ENCRYPT1_ENABLED = WIFI_ENCRYPT_TYPE_WEP_ENABLED,             /**< WEP encryption type.  */

    WIFI_ENCRYPT_TYPE_WEP_DISABLED = 1,                                             /**< No encryption.     */

    WIFI_ENCRYPT_TYPE_ENCRYPT_DISABLED = WIFI_ENCRYPT_TYPE_WEP_DISABLED,            /**< No encryption.     */

    WIFI_ENCRYPT_TYPE_WEP_KEY_ABSENT = 2,                                           /**< Not supported.     */

    WIFI_ENCRYPT_TYPE_ENCRYPT_KEY_ABSENT = WIFI_ENCRYPT_TYPE_WEP_KEY_ABSENT,        /**< Not supported.     */

    WIFI_ENCRYPT_TYPE_WEP_NOT_SUPPORTED = 3,                                        /**< Not supported.     */

    WIFI_ENCRYPT_TYPE_ENCRYPT_NOT_SUPPORTED = WIFI_ENCRYPT_TYPE_WEP_NOT_SUPPORTED,  /**< Not supported.     */

    WIFI_ENCRYPT_TYPE_TKIP_ENABLED = 4,                                             /**< TKIP encryption.   */

    WIFI_ENCRYPT_TYPE_ENCRYPT2_ENABLED = WIFI_ENCRYPT_TYPE_TKIP_ENABLED,            /**< TKIP encryption.   */

    WIFI_ENCRYPT_TYPE_AES_ENABLED = 6,                                              /**< AES encryption.    */

    WIFI_ENCRYPT_TYPE_ENCRYPT3_ENABLED = WIFI_ENCRYPT_TYPE_AES_ENABLED,             /**< AES encryption.     */

    WIFI_ENCRYPT_TYPE_AES_KEY_ABSENT = 7,                                           /**< Not supported.     */

    WIFI_ENCRYPT_TYPE_TKIP_AES_MIX = 8,                                             /**< TKIP or AES mix.   */

    WIFI_ENCRYPT_TYPE_ENCRYPT4_ENABLED = WIFI_ENCRYPT_TYPE_TKIP_AES_MIX,            /**< TKIP or AES mix.   */

    WIFI_ENCRYPT_TYPE_TKIP_AES_KEY_ABSENT = 9,                                      /**< Not supported.     */

    WIFI_ENCRYPT_TYPE_GROUP_WEP40_ENABLED = 10,                                     /**< Not supported.     */

    WIFI_ENCRYPT_TYPE_GROUP_WEP104_ENABLED = 11,                                    /**< Not supported.     */

#ifdef WAPI_SUPPORT

    WIFI_ENCRYPT_TYPE_ENCRYPT_SMS4_ENABLED,                                         /**< WPI SMS4 support.  */

#endif /* WAPI_SUPPORT */

} wifi_encrypt_type_t;

WIFI_ENCRYPT_TYPE_ENCRYPT1_ENABLED

WEP加密方式

WIFI_ENCRYPT_TYPE_ENCRYPT2_ENABLED

TKIP加密方式

WIFI_ENCRYPT_TYPE_ENCRYPT3_ENABLED

AES加密方式

WIFI_ENCRYPT_TYPE_ENCRYPT4_ENABLED

TKIP+AES加密方式

channel

        信道,也成为通道或频段,是以无线信号作为传输载体的数据信号传送通道。

        2.4G频段的工作频率为2.4-2.4835GHz,这83.5MHz频带划分为13个信道,各信道中心频率相差5MHz,向上向下分别扩展11MHz信道带宽22MHz。中国采用欧洲/ETSI标准,使用1-13信道,如图所示:

         相近无线路由器采用相同或重叠信道会形成信道竞争关系,相互影响无线链路质量,为了有效避免信道重叠造成的相互干扰,相近无线路由器应选择互不重叠的信道工作,如(1、6、11),(1、7、13)等,但无线路由器并非只能工作在这些信道。

bandwidth

带宽。可选20M和40M

/**@brief Specifies 20MHz bandwidth in the 2.4GHz band.

*/

#define WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_20MHZ       (0x00)



/**@brief Specifies 40MHz bandwidth in the 2.4GHz band.

*/

#define WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_40MHZ       (0x01)



/**@brief Specifies 20MHz | 40MHz bandwidth in the 2.4GHz band.

*/

#define WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_2040MHZ     (WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_20MHZ|WIFI_IOT_COMMAND_CONFIG_BANDWIDTH_40MHZ)

bandwidth_ext

带宽扩展参数,只有40M时生效。

typedef enum {

    WIFI_BANDWIDTH_EXT_40MHZ_UP,    /**< 40MHz up. */

    WIFI_BANDWIDTH_EXT_40MHZ_BELOW  /**< 40MHz below. */

} wifi_bandwidth_ext_t;

3.STA的相关配置

typedef struct {

    uint8_t ssid[WIFI_MAX_LENGTH_OF_SSID];    /**< The SSID of the target AP. */

    uint8_t ssid_length;                      /**< The length of the SSID. */

    uint8_t bssid_present;                    /**< The BSSID is present if it is set to 1. Otherwise, it is set to 0. */

    uint8_t bssid[WIFI_MAC_ADDRESS_LENGTH];   /**< The MAC address of the target AP. */

    uint8_t password[WIFI_LENGTH_PASSPHRASE]; /**< The password of the target AP. */

    uint8_t password_length;                  /**< The length of the password. If the length is 64, the password is regarded as PMK. */

} wifi_sta_config_t;

ssid

要连接的热点名称,最大32字节

ssid_length

连接的热点名称长度

bssid_present

BSSID是否有效

bssid

BSSID内容,最大6字节

password

连接密码,最大64字节

password_length

密码长度

4.实例

配置 AP为开放模式

wifi_config_t config = {0};
config.opmode = WIFI_MODE_AP_ONLY;
strcpy((char *)config.ap_config.ssid, "MTK_SOFT_AP");
config.ap_config.ssid_length = strlen((char *)config.ap_config.ssid);
config.ap_config.auth_mode = WIFI_AUTH_MODE_OPEN;
config.ap_config.encrypt_type = WIFI_ENCRYPT_TYPE_WEP_DISABLED;
config.ap_config.channel = 6;
wifi_init(&config, NULL);

wifi_config_set_opmode(WIFI_MODE_AP_ONLY);
wifi_config_set_ssid(WIFI_PORT_AP, "MTK_SOFT_AP", strlen("MTK_SOFT_AP"));
wifi_config_set_security_mode(WIFI_PORT_AP, WIFI_AUTH_MODE_OPEN,
WIFI_ENCRYPT_TYPE_WEP_DISABLED);
wifi_config_set_channel(WIFI_PORT_AP, 6);
wifi_config_reload_setting();

配置AP为WPA2PSK模式

wifi_config_t config = {0};
config.opmode = WIFI_MODE_AP_ONLY;
strcpy((char *)config.ap_config.ssid, "MTK_SOFT_AP");
config.ap_config.ssid_length = strlen("MTK_SOFT_AP");
config.ap_config.auth_mode = WIFI_AUTH_MODE_WPA2_PSK;
config.ap_config.encrypt_type = WIFI_ENCRYPT_TYPE_AES_ENABLED;
strcpy((char *)config.ap_config.password, "12345678");
config.ap_config.password_length = strlen("12345678");
config.ap_config.channel = 6;
wifi_init(&config, NULL);

wifi_config_set_opmode(WIFI_MODE_AP_ONLY);
wifi_config_set_ssid(WIFI_PORT_AP, "MTK_SOFT_AP", strlen("MTK_SOFT_AP"));
wifi_config_set_security_mode(WIFI_PORT_AP, WIFI_AUTH_MODE_WPA2_PSK,
WIFI_ENCRYPT_TYPE_AES_KEY_ENABLED);
wifi_config_set_wpa_psk_key(WIFI_PORT_AP, "12345678", strlen("12345678"));
wifi_config_set_channel(WIFI_PORT_AP, 6);
wifi_config_reload_setting();

配置AP为WEP开放模式

wifi_config_t config = {0};
wifi_config_ext_t config_ext = {0};
config.opmode = WIFI_MODE_AP_ONLY;
strcpy((char *)config.ap_config.ssid, "MTK_SOFT_AP");
config.ap_config.ssid_length = strlen("MTK_SOFT_AP");
config.ap_config.auth_mode = WIFI_AUTH_MODE_OPEN;
config.ap_config.encrypt_type = WIFI_ENCRYPT_TYPE_WEP_ENABLED;
strcpy((char *)config.ap_config.password, "1234567890");
config.ap_config.password_length = strlen("1234567890");
config.ap_config.channel = 6;
config_ext.ap_wep_key_index_present = 1;
config_ext.ap_wep_key_index = 0;
wifi_init(&config, &config_ext);

wifi_wep_key_t keys = {{{0}}};
uint8_t key_id = 0; //0~3
char *key_string = "1234567890";
uint8_t length = strlen(key_string);
if (key_id < 4) {
keys.wep_key_length[key_id] = length;
os_memcpy(&keys.wep_key[key_id], key_string, length);
}
wifi_config_set_opmode(WIFI_MODE_AP_ONLY);
wifi_config_set_ssid(WIFI_PORT_AP, "MTK_SOFT_AP", strlen("MTK_SOFT_AP"));
wifi_config_set_security_mode(WIFI_PORT_AP, WIFI_AUTH_MODE_OPEN,
WIFI_ENCRYPT_TYPE_WEP_ENABLED);
wifi_config_set_wep_key(WIFI_PORT_AP, &keys);
wifi_config_set_channel(WIFI_PORT_AP, 4);
wifi_config_reload_setting();

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值