0x01 基础方法
1. 查看USB设备lsusb
1 2 3 4 5 6 7 ⚡ root@kali ~/Desktop lsusb Bus 001 Device 005: ID 148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless Adapter Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 004: ID 0e0f:0008 VMware, Inc. VMware Virtual USB Mouse Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
在USB接口001/005上检测到网卡。
2. 查看无线网卡iwconfig
1 2 3 4 5 6 7 8 9 10 ⚡ root@kali ~/Desktop iwconfig lo no wireless extensions. eth0 no wireless extensions. wlan0 IEEE 802.11 ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm Retry short long limit:2 RTS thr:off Fragment thr:off Encryption key:off Power Management:off
3. 激活无线网卡wlan0 ifconfig wlan0 up
4. 扫描网络 iwlist wlan0 scan
oriw dev wlan0 scan
发现未加密的网络
发现WPA2-PSK/WPA-PSK加密的网络
5. 连接网络
(1) 连接未加密网络
iw dev wlan0 connect [网络SSID]
(2) 连接WEP加密网络
iw dev wlan0 connect [网络SSID] key 0:[WEP密钥]
(3) 连接WPA加密网络
wpa_supplicant是一个连接、配置WIFI的工具,它主要包含wpa_supplicant与wpa_cli两个程序. 可以通过wpa_cli来进行WIFI的配置与连接,前提要保证wpa_supplicant正常启动
加密方式为 WPA-PSK 得用 wpa_supplicant 而不能使用 iwconfig wlan0 key xxx 形式,iwconfig key方式适用于WEP
新建文件 vim /etc/wpa_supplicant/my_wpa_supplicant.conf
wpa_passphrase CU_511 4006181111 > /etc/wpa_supplicant/my_wpa_supplicant.conf
可生成密码
1 2 3 4 5 6 ctrl_interface=/var/run/wpa_supplicant network={ ssid="TP-LINK_22E1D2" psk="密码" } # 其中的ctrl_interface就是用来和wpa_cli通信使用,其原理是wpa_supplicant是个干活的wifi服务器(比如连接wifi,断开wifi,启动热点等),wpa_cli就是个客户端,通过本地socket通信连接上wpa_supplicant服务器,发命令叫他干活。
连接wlan0到网络,并以daemon方式运行wpa_supplicant -B -i wlan0 -c /etc/my_wpa_supplicant.conf
-B Background 在后台以daemon 运行
-i interface
-c 配置文件
-D 驱动程序名称(可以是多个驱动程序:nl80211,wext)
如果想要看过程中的详细log,可以加上参数-dd,然后用logcat同时看log。
此时wlan0网络状态
6. 获取IP地址
最后,无论是连到开放的网络还是加密的安全网络,都得获取 IP 地址。简单地使用如下命令:
(1) dhcpcd wlan0
dhcpcd会后台守护进程运行,下次重连wifi会自动获取IP
(2) dhclient wlan0
7. 查看连接状态
(1) WPA wpa_cli status
(2) 未加密,WEP iwconfig
8. 断开当前连接
(1) WEP,未加密: iw dev wlan0 disconnect
(2) WPA:wpa_cli terminate
关闭某网卡ifconfig [网卡名] down
0x02 其他操作
有很多种方式来管理无线连接。刚才使用的是最基本的方式,有很多高级的应用程序(如 NetworkManager、wicd、netcfg、wifi 等等),他们是不包含在“默认包”里面的,使用它们会大大简化操作过程,但一般建议是开始的话最好从基本的来。
1. 设置IP地址ifconfig wlan0 [IP地址]
2. 查看路由表route
查看网关(缺省路由)方法:
1、route -n 或netstat -rn
2、ip route show
3. 添加默认网关 route add default gw [网关地址] dev wlan0
4. wpa_supplicant配置文件解读/etc/wpa_supplicant/my_wpa_supplicant.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 # 请不要修改下面这一行内容,否则将不能正常工作 ctrl_interface=/var/run/wpa_supplicant # 确保只有root用户能读取WPA的配置 ctrl_interface_group=0 # 使用wpa_supplicant来扫描和选择AP ap_scan=1 # 简单的情形:WPA-PSk密码验证方式,PSK是ASCII密码短语,所有合法的加密方式都允许连接 network={ ssid="simple" psk="very secret passphrase" # 优先级越高,就能越早匹配到。 priority=5 } # 与前面的设置相同,www.linuxidc.com但要求对特定的SSID进行扫描(针对那些拒绝广播SSID的AP) network={ ssid="second ssid" scan_ssid=1 psk="very secret passphrase" priority=2 } # 仅使用WPA-PSK方式。允许使用任何合法的加密方式的组合 network={ ssid="example" proto=WPA key_mgmt=WPA-PSK pairwise=CCMP TKIP group=CCMP TKIP WEP104 WEP40 psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb priority=2 } # 明文连接方式(不使用WPA和IEEE802.1X) network={ ssid="plaintext-test" key_mgmt=NONE } # 共享WEP秘钥连接方式(不使用WPA和IEEE802.1X) network={ ssid="static-wep-test" key_mgmt=NONE wep_key0="abcde" wep_key1=0102030405 wep_key2="1234567890123" wep_tx_keyidx=0 priority=5 } # 共享WEP秘钥连接方式(无WPA和IEEE802.1X),使用共享秘钥IEEE802.11验证方式 network={ ssid="static-wep-test2" key_mgmt=NONE wep_key0="abcde" wep_key1=0102030405 wep_key2="1234567890123" wep_tx_keyidx=0 priority=5 auth_alg=SHARED } # 在IBSS/ad-hoc网络中使用WPA-None/TKIP network={ ssid="test adhoc" mode=1 proto=WPA key_mgmt=WPA-NONE pairwise=NONE group=TKIP psk="secret passphrase" }
5. wpa_cli的使用
(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 wpa_cli -i wlan0 scan //搜索附件wifi热点 wpa_cli -i wlan0 scan_result //显示搜索wifi热点 wpa_cli -i wlan0 status //当前WPA/EAPOL/EAP通讯状态 wpa_cli -i wlan0 ping //pings wpa_supplicant 添加新的连接 wpa_cli -i wlan0 add_network //添加一个网络连接,会返回<network id> wpa_cli set_network <network id> ssid '"name"' //ssid名称 wpa_cli set_network <network id> psk '“psk”' //密码 wpa_cli set_network <network id> scan_ssid 1 wpa_cli set_network <network id> priority 1 //优先级 保存连接 wpa_cli -i wlan0 save_config //信息保存到默认的配置文件中 1 断开连接 wpa_cli -i wlan0 disable_network <network id> 1 连接已有连接 wpa_cli -i wlan0 list_network //列举保存过得连接 wpa_cli -i wlan0 select_network <network id> //连接指定的ssid wpa_cli -i wlan0 enable_network <network id> //使能制定的ssid
(2) 交互式wpa_cli
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 实操: > scan OK <3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID= <3>CTRL-EVENT-SCAN-STARTED <3>CTRL-EVENT-SCAN-RESULTS <3>WPS-AP-AVAILABLE <3>CTRL-EVENT-STATE-CHANGE id=-1 state=2 BSSID=00:00:00:00:00:00 SSID= <3>CTRL-EVENT-NETWORK-NOT-FOUND > > scan_results bssid / frequency / signal level / flags / ssid 04:a1:51:8a:9c:ae 5745 -53 [WPA2-PSK-CCMP][WPS][ESS] NETGEAR-63-5G TP-LINK_5G_MT3 b8:a3:86:5:8f:b2 2437 -79 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] SS7_VPN 40:e3:d6:8f:59:83 2462 -81 [WPA2-EAP-CCMP][ESS] mtkemp 38:97:d6:18:c4:00 5805 -85 [WPA-PSK-TKIP][WPA2-PSK-TKIP][ESS] wnwyanfa 40:e3:d6:8f:59:81 2462 -82 [WPA-EAP-CCMP+TKIP][WPA2-EAP-CCMP+TKIP][ESS] 0c:72:2c:4f:41:66 2427 -88 [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS] ...... fc:75:16:a3:95:d0 2462 -76 [WPS][ESS] dlink 00:0c:43:28:08:88 2437 -78 [ESS] MT7623_AP_2.4G 6c:f3:7f:38:ff:e8 5785 -85 [ESS] mtkguest 40:e3:d6:8f:59:40 2462 -75 [ESS] mtkguest 6c:f3:7f:38:ff:e0 2462 -85 [ESS] mtkguest > list_network network id / ssid / bssid / flags 0 Xiaomi_5G any [DISABLED] 1 D8_5GHZ any [DISABLED] 2 SS7_VPN any [DISABLED] 3 Xiaomi_2.4G any [DISABLED 4 XIaomi_5G any [DISABLED] 5 hello any [DISABLED] 6 NETGEAR6200 any [DISABLED] 7 NETGEAR6200_5G any [DISABLED] 8 NETGEAR-63-2.4G any [DISABLED] 9 DLink88_24G any [DISABLED] > add_network 10 10 > set_network 10 ssid "NETGEAR-63-5G" OK > list_network network id / ssid / bssid / flags 0 Xiaomi_5G any [DISABLED] 1 D8_5GHZ any [DISABLED] 2 SS7_VPN any [DISABLED] 3 Xiaomi_2.4G any [DISABLED] 4 XIaomi_5G any [DISABLED] 5 hello any [DISABLED] 6 NETGEAR6200 any [DISABLED] 7 NETGEAR6200_5G any [DISABLED] 8 NETGEAR-63-2.4G any [DISABLED] 9 DLink88_24G any [DISABLED] 10 NETGEAR-63-5G any [DISABLED] > set_network 10 key_mgmt WPA-PSK OK > set_network 10 psk "11111111" OK > get_network 10 key_mgmt WPA-PSK > get_network 10 psk * > enable_network 10 OK <3>CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID= <3>CTRL-EVENT-SCAN-STARTED <3>CTRL-EVENT-SCAN-RESULTS <3>WPS-AP-AVAILABLE <3>Trying to associate with [18434.676000] 80211> Connect bssid 04:a1:51:8a:9c:ae > select_network 10 OK > reconnect OK > list_network network id / ssid / bssid / flags 0 Xiaomi_5G any [DISABLED] 1 D8_5GHZ any [DISABLED] 2 SS7_VPN any [DISABLED] 3 Xiaomi_2.4G any [DISABLED] 4 XIaomi_5G any [DISABLED] 5 hello any [DISABLED] 6 NETGEAR6200 any [DISABLED] 7 NETGEAR6200_5G any [DISABLED] 8 NETGEAR-63-2.4G any [DISABLED] 9 DLink88_24G any [DISABLED] 10 NETGEAR-63-5G any [CURRENT] > save_config OK > status bssid=04:a1:51:8a:9c:ae freq=5745 ssid=NETGEAR-63-5G id=10 mode=station pairwise_cipher=CCMP group_cipher=CCMP key_mgmt=WPA2-PSK wpa_state=COMPLETED ip_address=10.0.0.5 address=00:6c:fd:ab:68:be uuid=12345678-9abc-def0-1234-56789abcdef0 <3>CTRL-EVENT-STATE-CHANGE id=10 state=9 BSSID=04:a1:51:8a:9c:ae SSID=NETGEAR-63-5G <3>CTRL-EVENT-CONNECTED - connection to 04:a1:51:8a:9c:ae completed (auth) [id=10 id_str=]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 保存后的wap_supplicant.conf root@:/system/bin # cd /data/misc/wifi/ root@:/data/misc/wifi # cat wpa_supplicant wpa_supplicant.conf wpa_supplicant/ at wpa_supplicant.conf < ctrl_interface=/data/misc/wifi/sockets driver_param=p2p_capable=0 update_config=1 uuid=12345678-9abc-def0-1234-56789abcdef0 device_name=full manufacturer= Group Co., Ltd model_name=Android TV model_number=Android TV serial_number=123456789 device_type=10-0050F204-5 os_version=01020300 config_methods=physical_display virtual_push_button external_sim=1 wowlan_triggers=magic_pkt network={ ssid="Xiaomi_5G" psk="26630099" key_mgmt=WPA-PSK priority=12 disabled=1 } network={ ssid="D8_5GHZ" key_mgmt=NONE priority=9 disabled=1 } network={ ssid="SS7_VPN" psk="12345678" key_mgmt=WPA-PSK priority=11 disabled=1 } network={ ssid="Xiaomi_2.4G" psk="26630099" key_mgmt=WPA-PSK priority=13 disabled=1 } network={ ssid="XIaomi_5G" psk="26630099" key_mgmt=WPA-PSK priority=18 disabled=1 } network={ ssid="hello" key_mgmt=NONE priority=17 disabled=1 } network={ ssid="NETGEAR6200" psk="12345678" key_mgmt=WPA-PSK priority=19 disabled=1 } network={ ssid="NETGEAR6200_5G" psk="12345678" key_mgmt=WPA-PSK priority=27 disabled=1 } network={ ssid="NETGEAR-63-2.4G" psk="11111111" key_mgmt=WPA-PSK priority=56 disabled=1 } network={ ssid="DLink88_24G" psk="12345678" key_mgmt=WPA-PSK priority=38 disabled=1 } network={ ssid="NETGEAR-63-5G" psk="11111111" key_mgmt=WPA-PSK }
6. dhclient自动获取/重新获取IP
(1) 获取IP
dhclient eth1
There is no need to restart network service. Above command should work with any Linux distro such as RHEL, Fedora, CentOS, Ubuntu and others. On a related note you can also try out the following commands:
查看结果
1 2 方法-2,显示更详细 cat /var/lib/dhcp/dhclient.leases
(2) 释放IP
dhclient -r
dhclient -r并没有真正释放IP,下一次执行dhclient wlan0时,没有discover这个步骤,而是直接REQUEST上次IP。
在网络拓扑或者配置变化的情况下,获取不到IP,需要删除cat /var/lib/dhcp/dhclient.leases 文件
查看进程 ps aux|grep dhc
(3) 删除相关文件后,重新获取ipdhclient wlan0
,这是个非常漫长的过程
服务器拒绝了很多次
最终获取到了IP地址
至于为什么DHCP服务器拒绝了这么多次,可能因为校园网人数太多,dhcp申请太过频繁,DHCP服务器广播的offer很快就被其他人使用了,导致我的request发到服务器的时候服务器发现刚刚那个offer已经被用掉了,所以就发送NAK来拒绝我们的申请
DHCP报文共有一下几种:
DHCP DISCOVER :客户端开始DHCP过程发送的包,是DHCP协议的开始
DHCP OFFER :服务器接收到DHCP DISCOVER之后做出的响应,它包括了给予客户端的IP(yiaddr)、客户端的MAC地址、租约过期时间、服务器的识别符以及其他信息
DHCP REQUEST :客户端对于服务器发出的DHCP OFFER所做出的响应。在续约租期的时候同样会使用。
DHCP ACK :服务器在接收到客户端发来的DHCP REQUEST之后发出的成功确认的报文。在建立连接的时候,客户端在接收到这个报文之后才会确认分配给它的IP和其他信息可以被允许使用。
DHCP NAK :DHCP ACK的相反的报文,表示服务器拒绝了客户端的请求。
DHCP RELEASE :一般出现在客户端关机、下线等状况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址
DHCP INFORM :客户端发出的向服务器请求一些信息的报文
DHCP DECLINE :当客户端发现服务器分配的IP地址无法使用(如IP地址冲突时),将发出此报文,通知服务器禁止
使用该IP地址。
DHCP详细工作流程解析
第一步:
DHCP客户端主动发起DHCP Discover包,用来寻找DHCP服务器,其中:
源MAC是自己的MAC地址,目的MAC是FFFF.FFFF.FFFF的广播
源IP是0.0.0.0(现在还没有IP,就用全0地址),目的IP是255.255.255.255的三层广播
因为DHCP服务器在哪里还不知道,所以使用广播来寻找,广播会泛洪到整个网段中;
第二步:
DHCP服务器收到客户端发的DHCP Discover之后,会在自己的地址池中拿出一个没有分配的地址以及配套的参数(如:掩码、DNS、网关、域名、租期……),然后以一个DHCP Offer包发送出去。
这个DHCP Offer数据包的地址如下:
源MAC是DHCP服务器的MAC,目的MAC是FFFF.FFFF.FFFF的广播
源IP是DHCP服务器的IP,目的IP是255.255.255.255的广播
这时客户端还没有获得IP,DHCP服务器端现在还无法定位客户端,所以用广播来回应。
第三步:
客户端收到这个DHCP Offer后,会再发出一个DHCP Request给服务器来申请这个Offer中包含的地址。
这个时候,客户端还没有正式拿到地址,所以还需要向DHCP服务器申请。
这时客户端的源IP还是0.0.0.0,目的IP还是255.255.255.255
源MAC是客户端的MAC,目的MAC是FFFF.FFFF.FFFF广播包
第四步:
服务器收到客户端的请求后,会发出一个DHCP ACK用来确认这个IP地址可以分配给这个客户端。
客户端收到第四个DHCP ACK数据包才算正式拿到了这个IP。
0x03 出现的错误
关闭wpa连接时出现Failed to connect to non-global ctrl_ifname: (nil) error: No such file or directory
这是Wpa_supplicant
没有在后台运行的原因
解决办法:让wpa_supplicat
在后台运行,nohup wpa_supplicant -c wpa.conf > /tmp/wpa_supplicant.log &
或者-B
参数
Wpa_supplicant 调试故障原因分析
linux下使用shell命令通过wpa_cli控制wpa_supplicant连接wifi
DHCP工作原理
DHCP工作过程详解
https://blog.csdn.net/yugongpeng_blog/article/details/45169291