SSID指的是无线网络的名称全程为Service Set Identifier


通过查阅网上资料找到了连接指定SSID的方法,无线网络可以是三种简单的方式
1. 无加密
2. wep加密
3. wpa加密


以下即为三种方式的介绍
一、Open System
完全不认证也不加密,任何人都可以连到无线基地台使用网络。
二、WEP (Wired EquivalentPrivacy) 有线等效加密
最基本的加密技术,手机用户、笔记型计算机与无线网络的Access Point(网络金钥AP)拥有相同的网络金钥,才能解读互相传递的数据。这金钥分为64bits及128bits两种,最多可设定四组不同的金钥。当用户端进入WLAN前必须输入正确的金钥才能进行连接。
WEP加密方法很脆弱。网络上每个客户或者计算机都使用了相同的保密字,这种方法使网络偷听者能刺探你的密钥,偷走数据并且在网络上造成混乱。
三、WPA (Wi-Fi Protected Access) 商务宝采用的加密方式
由Wi-FiAlliance (http://www.wi-fi.com/)所提出的无线安全标准,有分成家用的WPA-PSK (Pre-Shared Key)与企业用的WPA-Enterprise版本。
1、WPA-PSK

为了堵塞WEP的漏洞而发展的加密技术,使用方法与WEP相似。无线基地台与笔记型计算机必须设定相同的Key,计算机才可以连入基地台。但其进入WLAN时以更长词组或字串作为网络金钥。并且WPA-PSK运用了TKIP (Temporal Key IntegrityProtocol)技术,因此比WEP难被破解而更加安全。

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

2、WPA-Enterprise

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

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

一但应用了WPA-Enterprise,不像WPA-PSK那样,雇员将不会知道密码。这样,外部的人

就不能通过他们享用网络资源。WPA-Enterprise还可以节约你大量的时间;你无需花费大量的时间去人工更换客户的密码。

四、WPA2

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

五、MAC ACL (Access Control List)

MAC ACL只能用于认证而不能用于加密。在无线基地台输入允许被连入的无线网卡MAC地址,不在此清单的无线网卡无法连入无线基地台。

六、Web Redirection

这种方式是WISP(Wireless Internet Service Provider,例如统一安源WiFly)最常用的方式。无线基地台设定成Open System,但是另外在后台利用存取控制网关器(Access Control Gateway, ACG),拦截笔记型计算机发出的Web封包(开启浏览器尝试上网),并强制重导到认证网页要求输入账号密码,然后ACG向RADIUS认证服务器来确认使用者的身分,认证通过才可以自由到其它的网站。

七、各种加密方式对比

WEP安全加密方式

  WEP特性里使用了rsa数据安全性公司开发的rc4 prng算法。全称为有线对等保密(Wired EquivalentPrivacy,WEP)是一种数据加密算法,用于提供等同于有线局域网的保护能力。使用了该技术的无线局域网,所有客户端与无线接入点的数据都会以一个共享的密钥进行加密,密钥的长度有40位至256位两种,密钥越长,黑客就需要更多的时间去进行破解,因此能够提供更好的安全保护。

  WPA安全加密方式

  WPA加密即Wi-Fi Protected Access,其加密特性决定了它比WEP更难以入侵,所以如果对数据安全性有很高要求,那就必须选用WPA加密方式了(Windows XP SP2已经支持WPA加密方式)。

  WPA作为IEEE 802.11通用的加密机制WEP的升级版,在安全的防护上比WEP更为周密,主要体现在身份认证、加密机制和数据包检查等方面,而且它还提升了无线网络的管理能力。

  WPA、WEP对比

  WPA与WEP不同,WEP使用一个静态的密钥来加密所有的通信。WPA不断的转换密钥。WPA采用有效的密钥分发机制,可以跨越不同厂商的无线网卡实现应用。另外WPA的另一个优势是,它使公共场所和学术环境安全地部署无线网络成为可能。而在此之前,这些场所一直不能使用WEP。WEP的缺陷在于其加密密钥为静态密钥而非动态密钥。这意味着,为了更新密钥,IT人员必须亲自访问每台机器,而这在学术环境和公共场所是不可能的。另一种办法是让密钥保持不变,而这会使用户容易受到攻击。由于互操作问题,学术环境和公共场所一直不能使用专有的安全机制。

  WPA2:目前最强的无线加密技术

  WPA2是WiFi联盟验证过的IEEE 802.11i标准的认证形式,WPA2实现了802.11i的强制性元素,特别是Michael算法被公认彻底安全的CCMP(计数器模式密码块链消息完整码协议)讯息认证码所取代、而RC4加密算法也被AES所取代。

  在WPA/WPA2中,PTK的生成是依赖于PMK的,而PMK的方式有两种,一种是PSK方式,也就是预共享密钥模式(pre-shared key,PSK,又称为个人模式),在这种方式中PMK=PSK;而另一种方式则需要认证服务器和站点进行协商来产生PMK。下面我们通过公式来看看WPA和WPA2的区别:

  WPA = IEEE 802.11idraft 3 = IEEE 802.1X/EAP + WEP(选择性项目)/TKIP

  WPA2 = IEEE 802.11i =IEEE 802.1X/EAP + WEP(选择性项目)/TKIP/CCMP

  目前WPA2加密方式的安全防护能力非常出色,只要你的无线设备均支持WPA2加密,那你将体验到最安全的无线网络生活。即使是目前最热的“蹭网卡”也难以蹭入你的无线网络,用户大可放心使用。

连接指定的无线的代码如下所示:(引用自这里写链接内容)

public class WifiAdmin {   // 定义WifiManager对象    private WifiManager mWifiManager;   // 定义WifiInfo对象    private WifiInfo mWifiInfo;   // 扫描出的网络连接列表    private List<ScanResult> mWifiList;   // 网络连接列表    private List<WifiConfiguration> mWifiConfiguration;   // 定义一个WifiLock    WifiLock mWifiLock;   // 构造器    public WifiAdmin(Context context) {   // 取得WifiManager对象    mWifiManager = (WifiManager) context   .getSystemService(Context.WIFI_SERVICE);   // 取得WifiInfo对象    mWifiInfo = mWifiManager.getConnectionInfo();   }   // 打开WIFI    public void openWifi() {   if (!mWifiManager.isWifiEnabled()) {   mWifiManager.setWifiEnabled(true);   }   }   // 关闭WIFI    public void closeWifi() {   if (mWifiManager.isWifiEnabled()) {   mWifiManager.setWifiEnabled(false);   }   }   // 检查当前WIFI状态    public int checkState() {   return mWifiManager.getWifiState();   }   // 锁定WifiLock    public void acquireWifiLock() {   mWifiLock.acquire();   }   // 解锁WifiLock    public void releaseWifiLock() {   // 判断时候锁定    if (mWifiLock.isHeld()) {   mWifiLock.acquire();   }   }   // 创建一个WifiLock    public void creatWifiLock() {   mWifiLock = mWifiManager.createWifiLock("Test");   }   // 得到配置好的网络    public List<WifiConfiguration> getConfiguration() {   return mWifiConfiguration;   }   // 指定配置好的网络进行连接    public void connectConfiguration(int index) {   // 索引大于配置好的网络索引返回    if (index > mWifiConfiguration.size()) {   return;   }   // 连接配置好的指定ID的网络    mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,   true);   }   public void startScan() {   mWifiManager.startScan();   // 得到扫描结果    mWifiList = mWifiManager.getScanResults();   // 得到配置好的网络连接    mWifiConfiguration = mWifiManager.getConfiguredNetworks();   }   // 得到网络列表    public List<ScanResult> getWifiList() {   return mWifiList;   }   // 查看扫描结果    public StringBuilder lookUpScan() {   StringBuilder stringBuilder = new StringBuilder();   for (int i = 0; i < mWifiList.size(); i++) {   stringBuilder   .append("Index_" + new Integer(i + 1).toString() + ":");   // 将ScanResult信息转换成一个字符串包    // 其中把包括:BSSID、SSID、capabilities、frequency、level    stringBuilder.append((mWifiList.get(i)).toString());   stringBuilder.append("/n");   }   return stringBuilder;   }  // 得到MAC地址    public String getMacAddress() {   return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();   }   // 得到接入点的BSSID    public String getBSSID() {   return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();   }   // 得到IP地址    public int getIPAddress() {   return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();   }   // 得到连接的ID    public int getNetworkId() {   return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();   }   // 得到WifiInfo的所有信息包    public String getWifiInfo() {   return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();   }   // 添加一个网络并连接    public void addNetwork(WifiConfiguration wcg) {   int wcgID = mWifiManager.addNetwork(wcg);   boolean b =  mWifiManager.enableNetwork(wcgID, true);   System.out.println("a--" + wcgID);  System.out.println("b--" + b);  }   // 断开指定ID的网络    public void disconnectWifi(int netId) {   mWifiManager.disableNetwork(netId);   mWifiManager.disconnect();   }   //然后是一个实际应用方法,只验证过没有密码的情况:  public WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type)   {   WifiConfiguration config = new WifiConfiguration();     config.allowedAuthAlgorithms.clear();   config.allowedGroupCiphers.clear();   config.allowedKeyManagement.clear();   config.allowedPairwiseCiphers.clear();   config.allowedProtocols.clear();   config.SSID = "\"" + SSID + "\"";     WifiConfiguration tempConfig = this.IsExsits(SSID);             if(tempConfig != null) {    mWifiManager.removeNetwork(tempConfig.networkId);    }  if(Type == 1) //WIFICIPHER_NOPASS  {   config.wepKeys[0] = "";   config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);   config.wepTxKeyIndex = 0;   }   if(Type == 2) //WIFICIPHER_WEP  {   config.hiddenSSID = true;  config.wepKeys[0]= "\""+Password+"\"";   config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);   config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);   config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);   config.wepTxKeyIndex = 0;   }   if(Type == 3) //WIFICIPHER_WPA  {   config.preSharedKey = "\""+Password+"\"";   config.hiddenSSID = true;     config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);     config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);                           config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);                           config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);                      //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);    config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);  config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);  config.status = WifiConfiguration.Status.ENABLED;     }  return config;   }   private WifiConfiguration IsExsits(String SSID)    {    List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();    for (WifiConfiguration existingConfig : existingConfigs)     {    if (existingConfig.SSID.equals("\""+SSID+"\""))    {    return existingConfig;    }    }    return null;     }  }
//分为三种情况:1没有密码2用wep加密3用wpa加密  

改动主要集中在CreateWifiInfo这个方法中,并且添加了一个私有方法:
(1)将与方法的第三个参数有关的变量都改成int型,或者使用原作者的枚举型(存在bug需要改正),但枚举会在后续的开发中遇到些困难;
(2)在if(type == 3)中注释掉“config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);”,并添加“
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);“这两句,否则当wifi热点需要输入密码时,无法加入网络。
(3)在代码末尾添加了方法IsExsits,原因在于如果按照网上介绍的方法成功加入指定的wifi后,都会在终端的wifi列表中新添加一个以该指定ssid的网络,所以每运行一次程序,列表中就会多一个相同名字的ssid。而该方法就是检查wifi列表中是否有以输入参数为名的wifi热点,如果存在,则在CreateWifiInfo方法开始配置wifi网络之前将其移除,以避免ssid的重复:
WifiConfiguration tempConfig = this.IsExsits(SSID);
if(tempConfig != null) {
mWifiManager.removeNetwork(tempConfig.networkId);
}
以上便是wifi工具类的建立,之后就可以在其他部分实例化这个类,调用其中的方法完成加入指定ssid的wifi热点,还是先上代码吧,建立一个名为Test_wifiActivity.java的文件(同上,没有包含包声明和impo

public class Test_wifiActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WifiAdmin wifiAdmin = new WifiAdmin(this);
wifiAdmin.openWifi();
wifiAdmin.addNetwork(wifiAdmin.CreateWifiInfo(“XXX”, “XXX”, 3));
}
}
大体上只涉及到openWifi(打开wifi)、CreateWifiInfo(配置wifi网络信息)和addNetwork(添加配置好的网络并连接),对CreateWifiInfo进行简单的说明:第一参数是SSID的名称;第二个参数是指定SSID网络的密码,当不需要密码是置空(”“);第三个参数是热点类型:1-无密码 / 2-WEP密码验证(未测试)/ 3-WAP或WAP2 PSK密码验证。
最后就是在Manifest中添加相应的权限了:

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission>  <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission>  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission>  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission> 

Android之连接指定SSID的无线网络相关推荐

  1. Android Wifi --自动连接指定SSID(各种加密方式均可)

    Android Wifi API参考网站这里写链接内容 1.开始先加入wifi权限 <uses-permission android:name="android.permission. ...

  2. android 开发 自动生成wifi,Android编程开发:自动连接指定SSID的wifi热点

    在Android编程开发中,最近在做一个项目,其中涉及到一块"自动连接已存在的wifi热点"的功能,在网上查阅了大量资料,五花八门,但其中一些说的很简单,即不能实现傻瓜式的拿来就用 ...

  3. Android开发——自动连接指定SSID的wifi热点(不加密/加密)

    最近在做一个项目,其中涉及到一块"自动连接已存在的wifi热点"的功能,在网上查阅了大量资料,五花八门,但其中一些说的很简单,即不能实现傻瓜式的拿来就用,有些说的很详细,但其中不乏 ...

  4. Android自动连接指定的WiFi热点

    Android自动连接指定的WiFi热点 "Android自动连接指定的WiFi热点",看上去这是个再基础不过的功能了.很多人都觉得很简单,网上也有大量的资料.但在以Android ...

  5. WeFi – 自动搜索并连接未加密的无线网络

    蹭网,相信很多拥有笔记本电脑的朋友,有意或无意中都做过,但是大部分却是手动搜索未加密的无线网络,然后连接上去,那么是否有这么一款工具,可以自动搜索没有密码的无线网络并自动连接呢?答案是肯定的.今天就给 ...

  6. w ndows10专业版连接不上网,windows10无线网络连不上的原因与应对方法

    最近有用户反馈,遇到了windows10无线网络连不上的问题,不知如何解决?其实导致windows10无线网络连不上的原因有很多种,下面小编介绍windows10无线网络连不上的原因与应对方法. 一. ...

  7. 如何启用计算机上的无线网络连接,告诉大家win10无线网络连接如何打开

    有不少的网友想知道win10无线网络连接如何打开呢?其实win10无线网络连接如何打开的方法是很简单的,下面就让我给大家介绍一下关于win10无线网络连接如何打开的解决方法吧. win10无线网络连接 ...

  8. 小米机顶盒显示网络无法连接服务器,小米盒子无线网络连接不上怎么回事 - 卡饭网...

    无线网络连接不上怎么回事,如何解决 无线网络连接不上怎么回事,如何解决 无线网络连接不上怎么回事,如何解决,很多电脑用户可能会遇到这个问题. 一:先检查下你的无线网络开关是否打开,没打开请打开 二:检 ...

  9. 如何上手机上不了无线网络连接服务器,手机连接不上路由器无线网络怎么处理...

    家里的无线路由器网络,跟电脑连接正常,但与手机连接却经常会出现这3种情况:手机搜索不到无线信号;手机连接上了无线网络但却无法上网;手机突然上不了网.下面是学习啦小编给大家整理的一些有关手机连接不上路由 ...

最新文章

  1. java条码大小_java – 如何设置iText条码宽度?
  2. HCNA(012-211) 试题解析
  3. 单点登录框架 OpenSSO
  4. Maven基础知识--Maven资源库详述
  5. 不装oracle进行远程连接解决办法 .
  6. 外部函数获取内部函数变量_一维随机变量的分布函数
  7. python如何安装wordcloud_基于python的wordcloud库的安装方法
  8. CentOS操作系统keepalived安装步骤
  9. SCDM(3)建立几何
  10. 传奇手游漏洞获取gm权限_传奇私服漏洞获取gm权限
  11. 中国晒2018经济成绩单 GDP、收入、就业等指标亮眼
  12. 1931CIE基础知识
  13. Github+Facebook=?这家公司有望让程序猿的头秃得慢一点
  14. docx4j操作word文档之生成页码、合并多个文档
  15. NameNode故障处理方法
  16. xss获取键盘记录实验演示
  17. 【C深入】程序中的三国天下,栈,堆,静态内存
  18. Spirng中Mongodb中write-concern的解释
  19. 推荐给你的一个读书清单
  20. 菜鸟的病毒分析5 pe感染文件感染病毒

热门文章

  1. 计算机通过网线连接不到网络,电脑有网线连不上网怎么解决
  2. 解决论文目录页码对不齐问题
  3. PostgreSQL regress test
  4. 2022年国赛建模评估
  5. matlab 矩阵中最小的数,计算矩阵中最小的N个数值
  6. 《数值分析》李庆扬 03 曲线拟合的最小二乘法
  7. 二叉树练习:最小函数值
  8. 工业面阵相机及镜头的选择(笔记)
  9. 【夜读】影响一生的五大定律
  10. 如何绘制好看的大脑皮层图?wb_view +fun.gii格式操作