当前位置:首页 > CN2资讯 > 正文内容

windows server 2012 网卡虚拟化

3天前CN2资讯

最近因为公司的业务要求,在没有网络的情况下,没有路由器支持的情况下,需要组建一个小局域网,可以同时支持多个终端的相互之间的通信,这里的解决方案如下。


一、硬件要求:任意支持软AP的无限网卡,具体是否支持请输入命令行如下查看,如图(一):

图(一)

根据上图,包含 C:\Windows\system32\DRIVERS\vwifibus.sys即可支持软AP。

二、熟悉命令

1.设置并允许虚拟无线网路; 命令:netsh 命令符下输入 wlan set hostednetwork mode = allow ssid=无线名称 key=无线密码(8位数) 返回结果:承载网络模式已设置为允许。 已成功更改承载网络的 SSID。 已成功更改托管网络的用户密钥密码。 2.显示设置的虚拟网络信息; 命令:netsh 命令符下输入 wlan show hostednetwork 返回结果:承载网络设置 ----------------------- 模式 : 已启用 SSID 名称 :“无线名称” 最多客户端数 : 32 身份验证 : WPA2 - 个人 密码 : CCMP 承载网络状态 --------------------- 状态 : 未启动 netsh> 3.启动设置的无线网络 命令:netsh 命令符下输入 wlan start hostednetwork 4.停止设置的无线网络 命令:netsh 命令符下输入 wlan stop hostednetwork 5.禁止设置的无线网络 命令:命令:netsh 命令符下输入 wlan set hostednetwork mode=disallow

返回结果:承载网络模式已设置为禁止。


三、对应封装的C#类,代码如下:

public class VWirelessNetworkManager { private bool isEnableDynamicKey = false; private string cleartextKey = null; public event EventHandler<VWirelessNetworkEventArgs> VWirelessStarted; public event EventHandler<VWirelessNetworkEventArgs> VWirelessStopped; public event EventHandler<VWirelessNetworkEventArgs> VWirelessSetted; private static readonly Process currentProcess = null; private static Process CurrentProcess { get; } private static bool isRunNetsh = true; private static bool isExitNetsh = false; /// <summary> /// 虚拟无线网络信息 /// </summary> public VWirelessNetwork VWirelessNetworkInfo { get { return this.GetVWirelessNetwork(); } } static VWirelessNetworkManager() { currentProcess = new Process(); currentProcess.StartInfo = new ProcessStartInfo() { RedirectStandardInput = true, RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true, //FileName = "netsh" FileName = "netsh" }; currentProcess.Start(); } private bool RunNetsh() { if (!isRunNetsh) { isRunNetsh = true; isExitNetsh = false; currentProcess.Start(); } return isRunNetsh; } private bool ExitNetsh() { if (!isExitNetsh) { currentProcess.StandardInput.WriteLine("exit"); isRunNetsh = false; isExitNetsh = true; } return isExitNetsh; } public void SetVWirelessInfo(string sSID) { string encryptPlus; string key = GetDynamicVWirelessKey(sSID, out encryptPlus); SetVWirelessInfo(sSID, key, true); } public void SetVWirelessInfo(string sSID, string key) { SetVWirelessInfo(sSID, key, false); } public void SetVWirelessInfo(string sSID, string key, bool isEnableDynamicKey) { this.cleartextKey = key; this.isEnableDynamicKey = isEnableDynamicKey; RunNetsh(); currentProcess.StandardInput.AutoFlush = true; currentProcess.StandardInput.WriteLine(string.Format("wlan set hostednetwork mode=allow ssid={0} key={1}", sSID, key)); ExitNetsh(); VWirelessNetworkEventArgs e = new PlatForm.VWirelessNetworkEventArgs(); e.CommandExecutedResult = currentProcess.StandardOutput.ReadToEnd(); e.VWirelessNetworkShowInfo = GetVWirelessNetwork(); OnVWirelessSetted(e); } public void StartVWirelessNet() { RunNetsh(); currentProcess.StandardInput.AutoFlush = true; currentProcess.StandardInput.WriteLine("wlan start hostednetwork"); ExitNetsh(); VWirelessNetworkEventArgs e = new PlatForm.VWirelessNetworkEventArgs(); e.CommandExecutedResult = currentProcess.StandardOutput.ReadToEnd(); e.VWirelessNetworkShowInfo = GetVWirelessNetwork(); e.IPAddress = GetIpAddress(); OnVWirelessStarted(e); } public void StopVWirelessNet() { RunNetsh(); currentProcess.StandardInput.AutoFlush = true; currentProcess.StandardInput.WriteLine("wlan stop hostednetwork"); ExitNetsh(); VWirelessNetworkEventArgs e = new PlatForm.VWirelessNetworkEventArgs(); e.CommandExecutedResult = currentProcess.StandardOutput.ReadToEnd(); e.VWirelessNetworkShowInfo = GetVWirelessNetwork(); OnVWirelessStopped(e); } public void DisallowVWirelessNet() { RunNetsh(); currentProcess.StandardInput.AutoFlush = true; currentProcess.StandardInput.WriteLine("wlan set hostednetwork mode=disallow"); ExitNetsh(); VWirelessNetworkEventArgs e = new PlatForm.VWirelessNetworkEventArgs(); e.CommandExecutedResult = currentProcess.StandardOutput.ReadToEnd(); e.VWirelessNetworkShowInfo = GetVWirelessNetwork(); } protected virtual VWirelessNetwork GetVWirelessNetwork() { RunNetsh(); currentProcess.StandardInput.AutoFlush = true; currentProcess.StandardInput.WriteLine("wlan show hostednetwork"); ExitNetsh(); VWirelessNetwork vWNInfo = new VWirelessNetwork(); vWNInfo.IsEnableDynamicKey = isEnableDynamicKey; vWNInfo.RawVWirelessNetworkShowInfo = currentProcess.StandardOutput.ReadToEnd(); string[] kvpItems = vWNInfo.RawVWirelessNetworkShowInfo.Split(new char[] { '\r', '\n' }); if (kvpItems.Length > 14) { vWNInfo.BearerNetworkSettings = new PlatForm.BearerNetworkSettings() { Mode = kvpItems[6].Split(':')[1].Trim(), SSID = kvpItems[8].Split(':')[1].Trim().Trim(new char[] { '“', '”' }), MaxClientQuantity = int.Parse(kvpItems[10].Split(':')[1]), Authentication = kvpItems[12].Split(':')[1].Trim(), Key = this.isEnableDynamicKey ? kvpItems[14].Split(':')[1].Trim() : this.cleartextKey }; vWNInfo.BearerNetworkStatus = new BearerNetworkStatus(); string status = kvpItems[22].Split(':')[1].Trim(); vWNInfo.BearerNetworkStatus.Status = status; if (status == "已启动") { vWNInfo.BearerNetworkStatus.BSSID = kvpItems[24].Substring(28, 17); vWNInfo.BearerNetworkStatus.WirelessType = kvpItems[26].Split(':')[1].Trim(); vWNInfo.BearerNetworkStatus.Channels = int.Parse(kvpItems[28].Split(':')[1]); int clientQuantity = int.Parse(kvpItems[30].Split(':')[1]); vWNInfo.BearerNetworkStatus.ClientQuantity = clientQuantity; if (clientQuantity > 0) { for (int i = 1; i <= clientQuantity; i++) { vWNInfo.BearerNetworkStatus.Clients.Add(kvpItems[30 + i * 2].TrimStart().Substring(0, 17)); } } } } return vWNInfo; } public string GetIpAddress() { string ipV4Address = null; //获取虚拟无限网络的IPV4地址 NetworkInterface vNetwork = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(w => w.Description == "Microsoft Hosted Network Virtual Adapter" && w.NetworkInterfaceType == NetworkInterfaceType.Wireless80211); UnicastIPAddressInformationCollection ipCollection = vNetwork.GetIPProperties().UnicastAddresses; if (ipCollection.Count > 1) { ipV4Address = ipCollection[1].Address.ToString(); } else { ipV4Address = ipCollection[0].Address.ToString(); } return ipV4Address; } protected virtual void OnVWirelessStarted(VWirelessNetworkEventArgs e) { if (VWirelessStarted != null) { VWirelessStarted(this, e); } } protected virtual void OnVWirelessStopped(VWirelessNetworkEventArgs e) { if (VWirelessStopped != null) { VWirelessStopped(this, e); } } protected virtual void OnVWirelessSetted(VWirelessNetworkEventArgs e) { if (VWirelessSetted != null) { VWirelessSetted(this, e); } } private static string GetDynamicVWirelessKey(string sSID, out string encryptPlus) { string encrypedSSID = GetHashedString32(sSID); ; string head = null; string tail = null; encryptPlus = Guid.NewGuid().ToString(); char[] chars = encryptPlus.ToCharArray(); for (int i = 0; i < chars.Length; i++) { if (i % 2 == 0) { head += chars[i]; } else { tail += chars[i]; } } string waitingEncryptString2 = head + encrypedSSID + tail; return GetHashedString32(waitingEncryptString2); } private static string GetHashedString32(string waitingEncryptString) { string encrypedString = null; byte[] buff = Encoding.UTF8.GetBytes(waitingEncryptString); MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); byte[] encryptedBuff = md5.ComputeHash(buff); foreach (byte b in encryptedBuff) { encrypedString += b.ToString("X2"); } return encrypedString; } }



/// <summary> /// 虚拟无线网络事件参数 /// </summary> public class VWirelessNetworkEventArgs : EventArgs { /// <summary> /// 命令执行后的结果 /// </summary> public string CommandExecutedResult { get; set; } /// <summary> /// 虚拟无限网络的IP地址 /// </summary> public string IPAddress { get; set; } /// <summary> /// 显示虚拟无线网络信息 /// </summary> public VWirelessNetwork VWirelessNetworkShowInfo { get; set; } } /// <summary> /// 虚拟无线网络信息 /// </summary> public class VWirelessNetwork { /// <summary> /// 显示虚拟无线网络原始信息 /// </summary> public string RawVWirelessNetworkShowInfo { get; set; } /// <summary> /// 是否启用虚拟无限网络动态生成密码 /// </summary> public bool IsEnableDynamicKey { get; set; } /// <summary> /// 承载虚拟无线网络设置 /// </summary> public BearerNetworkSettings BearerNetworkSettings { get; set; } /// <summary> /// 承载虚拟无线网络状态 /// </summary> public BearerNetworkStatus BearerNetworkStatus { get; set; } } /// <summary> /// 承载网络设置 /// </summary> public class BearerNetworkSettings { /// <summary> /// 模式 /// </summary> public string Mode { get; set; } /// <summary> /// SSID 名称 /// </summary> public string SSID { get; set; } /// <summary> /// 最多客户端数 /// </summary> public int MaxClientQuantity { get; set; } /// <summary> /// 身份验证 /// </summary> public string Authentication { get; set; } /// <summary> /// 密码 /// </summary> public string Key { get; set; } } /// <summary> /// 承载网络状态 /// </summary> public class BearerNetworkStatus { private IList<string> clients = new List<string>(); /// <summary> /// 状态 /// </summary> public string Status { get; set; } /// <summary> /// BSSID /// </summary> public string BSSID { get; set; } /// <summary> /// 无线电类型 /// </summary> public string WirelessType { get; set; } /// <summary> /// 频道 /// </summary> public int Channels { get; set; } /// <summary> /// 客户端数 /// </summary> public int ClientQuantity { get; set; } /// <summary> /// 客户端MAC地址列表 /// </summary> public IList<string> Clients { get { return clients; } } }



四、测试代码如下:

VWirelessNetworkManager vwifi = null; vwifi = new VWirelessNetworkManager(); vwifi.VWirelessSetted += Vwifi_VWirelessSetted; vwifi.VWirelessStarted += Vwifi_VWirelessStarted; vwifi.VWirelessStopped += Vwifi_VWirelessStopped; /// <summary> /// 窗口加载事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmShowNetInfo_Load(object sender, EventArgs e) { //this.lstboxMessage.Items.Add("消息:正在启动应用程序!"); RunatVWirelessNetwork(); } private void RunatVWirelessNetwork() { // this.lstboxMessage.Items.Add("消息:正在检测是否安装USB版本的无限网卡!"); if (CheckWirelessCard()) { // this.lstboxMessage.Items.Add("消息:检测已经安装USB版本的无限网卡!"); if (GlobalConfig.AppSettings.VWirelessNetwork.IsEnableDynamicKey) { //this.lstboxMessage.Items.Add("消息:动态生成密码功能已开启,以规则运算方式并创建虚拟无限网络!"); vwifi.SetVWirelessInfo(string.Format("SmTR-{0}", DateTime.Now.ToString("HHmmssfffffff"))); } else { //this.lstboxMessage.Items.Add("消息:动态生成密码功能未开启,以明文密码方式并创建虚拟无限网络!"); vwifi.SetVWirelessInfo(string.Format("SmTR-{0}", DateTime.Now.ToString("HHmmssfffffff")), DateTime.Now.ToOADate().ToString()); } //this.lstboxMessage.Items.Add("消息:正在启动虚拟无限网络!"); vwifi.StartVWirelessNet(); } else { Application.Exit(); }



五、说明

最后测试部分的动态密码的意思是提供不公开密码的情况下,根据规则自动计算的,具体方法可以自己修改。




    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/28711.html

    分享给朋友:

    “windows server 2012 网卡虚拟化” 的相关文章

    使用newcom598优惠码注册域名,享受超值价格

    什么是newcom598优惠码? 我想和大家分享一个超值的优惠信息,那就是newcom598优惠码。这是一个专为Namecheap的新用户设计的优惠码,意在帮助刚开始建立自己在线业务的人以超优惠的价格注册.COM域名。通过这个优惠码,新用户可以以仅$5.98的价格获得首年的.COM域名,这样算下来在...

    深入探讨144GB显存显卡在深度学习中的应用与优势

    在谈到现代显卡时,144GB显存无疑成为了一个引人注目的热门话题。显存是显卡中极为关键的一部分,决定着我们在高性能计算、图形处理和深度学习等领域的使用体验。显存的容量直接影响到显卡在执行复杂任务时的能力,而144GB的显存容量,帮助我们突破了许多传统显存限制。 首先,显存的基本概念就像是计算机的临时...

    深度解析韩国makemodel:传统与现代结合的时尚理念

    markdown格式的内容 韩国makemodel概念 谈到韩国makemodel,我首先感受到了它所传递的深厚文化底蕴。这一时尚理念融合了传统与现代,不仅仅是对衣物的设计,更是一种对韩国文化的致敬。它通过巧妙的配搭,将历史悠久的韩服元素与现代流行趋势相结合,创造出一种独特的美学风格。每一件作品都像...

    选择最佳印度尼西亚 VPS 服务商的终极指南

    在了解印度尼西亚的虚拟专用服务器(VPS)之前,我们先来讲讲VPS的基本概念。简单来说,VPS是一种将一台物理服务器划分为多个虚拟服务器的技术。每个虚拟服务器都有独立的操作系统、资源和配置,让用户可以像使用独立服务器一样,获得更高的灵活性和控制权。这种方式不但能满足各种规模的业务需求,还能显著降低成...

    HostKVM优惠码:如何轻松获取最佳虚拟主机折扣

    当提到虚拟主机时,HostKVM无疑是一个备受瞩目的名字。那么,HostKVM究竟是什么呢?简单来说,HostKVM是一家专注于提供高性能虚拟专用服务器(VPS)和云计算解决方案的公司。它以KVM(基于内核的虚拟机)技术为核心,保证用户能够享受到更快的处理速度和更高的稳定性。这种技术使得服务器能够高...

    HostHatch怎么样?全面评测云服务提供商的性能与性价比

    我们今天要聊聊HostHatch,这个相对年轻却迅速崛起的云服务提供商。简单来说,HostHatch成立于不久前,目标是为用户提供高效、经济的托管服务。他们的理念十分清晰,就是希望能让更多的人无需复杂的技术知识,也能轻松享受到稳定高效的服务器服务。 HostHatch的创始团队由一群充满激情的科技爱...