wifinative.java_C#编程使用Managed Wifi API连接无线SSID

2023-10-11 19:40

本文主要是介绍wifinative.java_C#编程使用Managed Wifi API连接无线SSID,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在windows平台下,可以使用native wifi api来控制无线网卡,包括获取无线网卡参数,获取周围无线接入点参数等功能,在windows xp sp2版本的系统上,使用需要下载一个KB918997补丁包才能支持,下载地址如下:http://support.microsoft.com/kb/918997/en-us。而在xp sp3、vista、win7等高版本操作系统中,已经包含了此库,所以可以直接使用。

使用的api最好的文档当然是MSDN,地址如下:http://msdn.microsoft.com/en-us/library/ms706275(v=VS.85).aspx。里面详细介绍所用到的枚举类型、结构体、函数等,并且提供了非常好的实例代码。

如何用C#去操作无线网卡连接无线网络一直是个人学习过程中的一大困惑。好在最近成功解决了这个问题。最近在写一个中国电信ChinaNet无线热点自动连接工具,期间用到了Managed Wifi API,使用起来很是方便。

操作步骤很简单:

关于Managed Wifi API:This project is a .NET class library allowing you to control Wifi (802.11) network adapters installed in your Windows machine programmatically.

The library uses the Native Wifi API, available since Windows Vista and Windows XP SP2 (in a limited fashion, and only after applying a hotfix provided in KB article 918997). Older versions of Windows are not supported.

2.创建C#工程文件,并添加对ManagedWifi.dll的引用。

ManagedWifi-dll.png

3.编写代码,引用“Native Wifi API”。 关键代码如下:

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingNativeWifi;namespaceManagedWifiExample

{classMyWifi

{public List ssids = new List();publicMyWifi()

{

ssids.Clear();

}static stringGetStringForSSID(Wlan.Dot11Ssid ssid)

{return Encoding.UTF8.GetString(ssid.SSID, 0, (int)ssid.SSIDLength);

}///

///枚举所有无线设备接收到的SSID///

public voidScanSSID()

{

WlanClient client= newWlanClient();foreach (WlanClient.WlanInterface wlanIface inclient.Interfaces)

{//Lists all networks with WEP security

Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);foreach (Wlan.WlanAvailableNetwork network innetworks)

{

WIFISSID targetSSID= newWIFISSID();

targetSSID.wlanInterface=wlanIface;

targetSSID.wlanSignalQuality= (int)network.wlanSignalQuality;

targetSSID.SSID=GetStringForSSID(network.dot11Ssid);//targetSSID.SSID = Encoding.Default.GetString(network.dot11Ssid.SSID, 0, (int)network.dot11Ssid.SSIDLength);

targetSSID.dot11DefaultAuthAlgorithm =network.dot11DefaultAuthAlgorithm.ToString();

targetSSID.dot11DefaultCipherAlgorithm=network.dot11DefaultCipherAlgorithm.ToString();

ssids.Add(targetSSID);//if ( network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP )//{//Console.WriteLine( "Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid));//}//Console.WriteLine("Found network with SSID {0}.", GetStringForSSID(network.dot11Ssid));//Console.WriteLine("dot11BssType:{0}.", network.dot11BssType.ToString());//Console.WriteLine("dot11DefaultAuthAlgorithm:{0}.", network.dot11DefaultAuthAlgorithm.ToString());//Console.WriteLine("dot11DefaultCipherAlgorithm:{0}.", network.dot11DefaultCipherAlgorithm.ToString());//Console.WriteLine("dot11Ssid:{0}.", network.dot11Ssid.ToString());//Console.WriteLine("flags:{0}.", network.flags.ToString());//Console.WriteLine("morePhyTypes:{0}.", network.morePhyTypes.ToString());//Console.WriteLine("networkConnectable:{0}.", network.networkConnectable.ToString());//Console.WriteLine("numberOfBssids:{0}.", network.numberOfBssids.ToString());//Console.WriteLine("profileName:{0}.", network.profileName.ToString());//Console.WriteLine("wlanNotConnectableReason:{0}.", network.wlanNotConnectableReason.ToString());//Console.WriteLine("wlanSignalQuality:{0}.", network.wlanSignalQuality.ToString());//Console.WriteLine("-----------------------------------");//Console.WriteLine(network.ToString());

}

}

}//EnumSSID

///

///连接到未加密的SSID///

///

public voidConnectToSSID(WIFISSID ssid)

{//Connects to a known network with WEP security

string profileName = ssid.SSID; //this is also the SSID

string mac = StringToHex(profileName); //

//string key = "";//string profileXml = string.Format("<?xml version=\"1.0\"?>{0}{1}New{0}ESSopennonefalsenetworkKeyfalse{2}0", profileName, mac, key);//string profileXml2 = "<?xml version=\"1.0\"?>Hacker SSID54502D4C494E4B5F506F636B657441505F433844323632TP-LINK_PocketAP_C8D262ESSmanualopennonefalse";//wlanIface.SetProfile( Wlan.WlanProfileFlags.AllUser, profileXml2, true );//wlanIface.Connect( Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName );

string myProfileXML = string.Format("<?xml version=\"1.0\"?>{0}{1}{0}ESSmanualopennonefalse", profileName, mac);

ssid.wlanInterface.SetProfile(Wlan.WlanProfileFlags.AllUser, myProfileXML,true);

ssid.wlanInterface.Connect(Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName);//Console.ReadKey();

}///

///字符串转Hex///

///

///

public static string StringToHex(stringstr)

{

StringBuilder sb= newStringBuilder();byte[] byStr = System.Text.Encoding.Default.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str)

for (int i = 0; i < byStr.Length; i++)

{

sb.Append(Convert.ToString(byStr[i],16));

}return(sb.ToString().ToUpper());

}

}classWIFISSID

{public string SSID = "NONE";public string dot11DefaultAuthAlgorithm = "";public string dot11DefaultCipherAlgorithm = "";public bool networkConnectable = true;public string wlanNotConnectableReason = "";public int wlanSignalQuality = 0;public WlanClient.WlanInterface wlanInterface = null;

}

}

4.示例程序允许枚举当前网卡接收到的所有无线SSID,并支持接入开放认证(无密码)的无线热点。

ManagedWifi-example.png

5.其它

Wifi XML配置文件请参考微软文档

===============================================

转载后个人遇到的问题:

设置WIFI密码后,不能设置和打开WIFI连接问题解决方案:

需要修改profileXml中的配置信息,要和WIFI设置的一样,不然不能设置和访问WIFI的哦!【个人测试经验】

本人的设置

string profileXml = string.Format("<?xml version=\"1.0\" encoding=\"US-ASCII\"?>{0}{0}ESSautofalseWPAPSKAESfalsepassPhrasefalse{1}", profileName, key);

==================================================

这篇关于wifinative.java_C#编程使用Managed Wifi API连接无线SSID的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190378

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys