Windows 7引入了虚拟WiFi,可让您创建热点。但是我在C#中找不到任何关于这样做的教程。我发现虚拟路由器(它是开源的,用C#编写)但我似乎无法弄清楚它是如何工作的,因为它有很多不相关的代码,因为它是作为服务实现的。
任何人都可以解释如何创建热点并为客户端分配IP地址?我不需要像ICS这样的功能,但我希望能够广播网关和DNS 信息。
还有一个名为Connectify的封闭源替代方案。我确实设法得到它的来源,但它没有多大帮助。它使用开源库,但我不知道如何用它创建热点。
答案 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();
}
}
}