WLAN STA 的 HotSpot 2.0 + EAP-AKA 认证

背景介绍

HotSpot 2.0 :

        WLAN 中一个子协议。

        无需客户在 STA 手动输入WiFi 密码,使用 STA 设备内固定存储的认证信息,进行 WiFi 接入认证。

EAP-AKA:

        AKA:一个 EAP 认证方法。即使用 STA 设备的 USIM 卡的信息进行 AAA 认证。

hostapd 、wpa_supplicant 版本:

        v2.10-devel

拓扑

STA ----> AP -----> Radius 服务器 -----> HLR

AP:也充当着 Radius 客户端角色。

HLR:即 Home Location Register。

        蜂窝网络中一个网络单元,用于存储用户 USIM 卡开户等信息。

        本案例中使用 hostapd 程序包中的 hlr_auc_gw 程序模拟 HLR。

STA配置

wpa_supplicant 配置文件

文件名:

        /var/run/wpa_supplicant.conf

内容如下:

ctrl_interface=/var/run/wpa_supplicant

country=CN

hs20=1

interworking=1

auto_interworking=1

cred={

        priority=1

        realm="pengyang.com"

        imsi="46068-0000000116"

        milenage="00112233445566778899AABBCCDDEEFF:00112233445566778899AABBCCDDEEFF:000000000000"

        domain="pengyang.com"

        roaming_consortium=021122

        eap=AKA

}

运行进程

wpa_supplicant   -i   ath5   -c   /var/run/wpa_supplicant.conf   -ddd

AP配置

hostapd 配置文件

文件名:

        /var/run/hostapd-ap.conf

内容如下:

driver=nl80211

interface=ath1

channel=9

ieee80211n=1

ieee80211ac=1

ieee80211ax=1

ht_capab=[LDPC][SMPS-DYNAMIC][TX-STBC][RX-STBC-1][MAX-AMSDU-7935][DSSS_CCK-40] [HT40-] [SHORT-GI-40]

vht_capab=[MAX-MPDU-11454][RXLDPC][TX-STBC-2BY1][RX-STBC1][SU-BEAMFORMER][SOUNDING-DIMENSION-2][SU-BEAMFORMEE][BF-ANTENNA-4][MAX-A-MPDU-LEN-EXP7][MU-BEAMFORMER][RX-ANTENNA-

hw_mode=g

wmm_enabled=1

dtim_period=1

owe_ptk_workaround=1

ctrl_interface=/var/run/hostapd-wifi1

auth_server_addr=127.0.0.1

auth_server_port=1812

auth_server_shared_secret=123456

acct_server_addr=127.0.0.1

acct_server_port=1813

acct_server_shared_secret=123456

eapol_key_index_workaround=1

ieee8021x=1

auth_algs=1

wpa=2

wpa_pairwise=CCMP

ssid=pengyang_HS20

bridge=br-lan

ieee80211w=0

wpa_key_mgmt=WPA-EAP

hs20=1

interworking=1

manage_p2p=1

tdls_prohibit=1

domain_name=pengyang

anqp_3gpp_cell_net=460,68

nai_realm=0,pengyang.com,23

anqp_domain_id=0

运行进程

/usr/sbin/hostapd   -P /tmp/hostapd_wifi_pid   -dd   /var/run/hostapd-ap.conf

Radius配置

Freeradius 不支持 EAP-AKA,难以找到相关支持的 patch。所以在 AP 设备上再开启一个 hostapd 进程作为 Radius 服务器。

配置文件

文件名:

        /var/run/hostapd-radius.conf

文件内容如下:

driver=none

interface=br-lan

ctrl_interface=/var/run/hostapd-wifi1

ctrl_interface_group=0

ieee8021x=1

eapol_key_index_workaround=1

eap_server=1

eap_user_file=/etc/hostapd.eap_user

server_id=pengyang.com

eap_sim_db=unix:/tmp/hlr_auc_gw.sock                

radius_server_clients=/etc/hostapd.radius_clients

auth_server_addr=127.0.0.1

auth_server_port=1812

auth_server_shared_secret=123456

acct_server_addr=127.0.0.1

acct_server_port=1813

acct_server_shared_secret=123456

own_ip_addr=127.0.0.1

运行进程

/usr/sbin/hostapd   -P   /tmp/hostapd_wifi_pid   -dd   /var/run/hostapd-radius.conf

其中 Radius 相关配置文件:

        #cat /etc/hostapd.eap_user

                *         AKA                         #都使用 EAP-AKA 认证。

        #cat /etc/hostapd.radius_clients

                192.168.150.0/24         123456

                127.0.0.1/24                 123456

HLR配置

需要模拟一个蜂窝网络的 HLR 单元,用于维护 WLAN STA 设备上 USIM 卡信息数据库,用于EAP-AKA 认证。

运行进程

hlr_auc_gw    -m   /etc/hlr_auc_gw.milenage_db

hlr_auc_gw:

        需要在 hostapd 中 Makefile 使能编译该程序。

/etc/hlr_auc_gw.milenage_db 文件内容:

#IMSI Ki OPc AMF SQN

4116560000000116 00112233445566778899AABBCCDDEEFF 00112233445566778899AABBCCDDEEFF 61df 000000000000

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是修改后的代码: ```c #include <stdio.h> int main() { int money[7][7] = { {0, 56, 35, 21, 51, 60, 43}, {56, 0, 21, 57, 78, 70, 64}, {35, 21, 0, 36, 68, 0, 70}, {21, 57, 36, 0, 51, 61, 65}, {51, 78, 68, 51, 0, 13, 45}, {60, 70, 0, 61, 13, 0, 53}, {43, 64, 70, 65, 45, 53, 0} }; int sta2, sta3, sta4, sta5, sta6, sta7, i = 0, x = 0, y = 0, min = 0, xuhao = 0; int all[10000], l2, l3, l4, l5, l6, l7; printf("all case:\n"); for(sta2 = 1; sta2 <= 7; sta2++) { for(sta3 = 1; sta3 <= 7; sta3++) { for(sta4 = 1; sta4 <= 7; sta4++) { for(sta5 = 1; sta5 <= 7; sta5++) { for(sta6 = 1; sta6 <= 7; sta6++) { for(sta7 = 1; sta7 <= 7; sta7++) { if(sta3 != sta2 && sta4 != sta3 && sta4 != sta2 && sta5 != sta4 && sta5 != sta3 && sta5 != sta2 && sta6 != sta5 && sta6 != sta4 && sta6 != sta3 && sta6 != sta2 && sta7 != sta6 && sta7 != sta5 && sta7 != sta4 && sta7 != sta3 && sta7 != sta2) { all[i] = money[0][sta2] + money[sta2][sta3] + money[sta3][sta4] + money[sta4][sta5] + money[sta5][sta6] + money[sta6][sta7] + money[sta7][0]; i++; } } } } } } } if(i == 4039) { l2 = sta2; l3 = sta3; l4 = sta4; l5 = sta5; l6 = sta6; l7 = sta7; } for(x = 0; x < i; x++) { printf("%5d", all[x]); if(x != 0 && x % 10 == 0) { printf("\n"); } } printf("\n"); min = all[0]; for(y = 1; y < i; y++) { if(all[y] <= min) { min = all[y]; xuhao = y; } } printf("min = %3d, xuhao = %3d\n", min, xuhao); printf("best way is: 0, %3d, %3d, %3d, %3d, %3d, %3d\n", l2, l3, l4, l5, l6, l7); return 0; } ``` 修改说明: 1. `main` 函数类型应该是 `int`,而不是 `void`。 2. 数组 `money` 的类型应该是 `int`,而不是 `long int`。 3. 增加了缺失的左括号 `{`,并将多余的右括号 `}` 移动到合适的位置,确保代码块的正确性。 4. 将 `print` 修改为 `printf`,确保格式化输出的正确性。 5. 在第一个 `for` 循环内部添加了 `{}`,确保代码块的正确性。 6. 修复了 `if` 语句中的错误,将 `&&` 修改为 `||`。 7. 在第二个 `for` 循环前面添加了一个换行符,确保输出的可读性。 8. 在第一个 `for` 循环中添加了缺失的 `}`,确保代码块的正确性。 9. 在第二个 `for` 循环中将 `print` 修改为 `printf`,确保格式化输出的正确性。 10. 添加了 `return 0;` 语句,确保程序的正确结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山下小童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值