使用C#的Windows 7虚拟WiFi?

时间:2009-12-29 20:21:46

标签: c# windows-7 virtual wireless wifi

Windows 7引入了虚拟WiFi,可让您创建热点。但是我在C#中找不到任何关于这样做的教程。我发现虚拟路由器(它是开源的,用C#编写)但我似乎无法弄清楚它是如何工作的,因为它有很多不相关的代码,因为它是作为服务实现的。

任何人都可以解释如何创建热点并为客户端分配IP地址?我不需要像ICS这样的功能,但我希望能够广播网关和DNS 信息。

还有一个名为Connectify的封闭源替代方案。我确实设法得到它的来源,但它没有多大帮助。它使用开源库,但我不知道如何用它创建热点。

3 个答案:

答案 0 :(得分:1)

既然你找到了一个完全符合你想要的项目,为什么不去理解那个项目呢?

看起来您感兴趣的大部分代码都在“VirtualRouter.Wlan”项目中。如果您不理解,请从那里开始尝试询问具体问题。

答案 1 :(得分:0)

您是否考虑过查看此Code-Plex项目Virtual Router

答案 2 :(得分:0)

        using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Windows.Forms;
        using System.Diagnostics;
        using System.Security.Principal;

        namespace WifiRouter
        {
            public partial class Form1 : Form
            {
                bool connect = false;
                public Form1()
                {

                    InitializeComponent();
                }

                public static bool IsAdmin()
                {
                    WindowsIdentity id = WindowsIdentity.GetCurrent();
                    WindowsPrincipal p = new WindowsPrincipal(id);
                    return p.IsInRole(WindowsBuiltInRole.Administrator);
                }
                public void RestartElevated()
                {
                    ProcessStartInfo startInfo = new ProcessStartInfo();
                    startInfo.UseShellExecute = true;
                    startInfo.CreateNoWindow = true;
                    startInfo.WorkingDirectory = Environment.CurrentDirectory;
                    startInfo.FileName = System.Windows.Forms.Application.ExecutablePath;
                    startInfo.Verb = "runas";
                    try
                    {
                        Process p = Process.Start(startInfo);
                    }
                    catch
                    {

                    }

                    System.Windows.Forms.Application.Exit();
                }
                private void button1_Click(object sender, EventArgs e)
                {
                    string ssid = textBox1.Text, key = textBox2.Text;
                    if (!connect)
                    {
                        if (String.IsNullOrEmpty(textBox1.Text))
                        {
                            MessageBox.Show("SSID cannot be left blank !",
                            "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {

                            if (textBox2.Text == null || textBox2.Text == "")
                            {
                                MessageBox.Show("Key value cannot be left blank !",
                                "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            else
                            {
                                if (key.Length >= 6)
                                {
                                    Hotspot(ssid, key, true);
                                    textBox1.Enabled = false;
                                    textBox2.Enabled = false;
                                    button1.Text = "Stop";
                                    connect = true;
                                }
                                else
                                {
                                    MessageBox.Show("Key should be more then or Equal to 6 Characters !",
                                    "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                        }
                    }
                    else
                    {
                        Hotspot(null, null, false);
                        textBox1.Enabled = true;
                        textBox2.Enabled = true;
                        button1.Text = "Start";
                        connect = false;
                    }
                }
                private void Hotspot(string ssid, string key,bool status)
                {
                    ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
                    processStartInfo.RedirectStandardInput = true;
                    processStartInfo.RedirectStandardOutput = true;
                    processStartInfo.CreateNoWindow = true;
                    processStartInfo.UseShellExecute = false;
                    Process process = Process.Start(processStartInfo);

                    if (process != null)
                    {
                        if (status)
                        {
                            process.StandardInput.WriteLine("netsh wlan set hostednetwork mode=allow ssid=" + ssid + " key=" + key);
                            process.StandardInput.WriteLine("netsh wlan start hosted network");
                            process.StandardInput.Close();
                        }
                        else
                        {
                            process.StandardInput.WriteLine("netsh wlan stop hostednetwork");
                            process.StandardInput.Close();
                        }
                    }
                }

                private void Form1_Load(object sender, EventArgs e)
                {
                    if (!IsAdmin())
                    {
                        RestartElevated();
                    }
                }

                private void Form1_FormClosing(object sender, FormClosingEventArgs e)
                {
                    Hotspot(null, null, false);
                    Application.Exit();
                }
            }
        }