1

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

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

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

4

3 回答 3

1

既然您已经找到了一个完全符合您要求的项目,为什么不努力理解该项目呢?

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

于 2010-12-08T14:56:06.373 回答
0

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

于 2010-12-08T15:17:22.907 回答
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();
                }
            }
        }
于 2016-11-10T06:33:42.853 回答