netmonitor/NetMonitorServer/SetNetworks.cs

103 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
namespace NetMonitorServer
{
class SetNetworks
{
UdpClient sendanswer = new UdpClient();
IPEndPoint rep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 34524);
public SetNetworks(string data)
{
if (data.Substring(0, 8).ToLower() == "net auto")
this.setNetworkAuto(data);
if (data.Substring(0, 6).ToLower() == "net ip")
this.setNetworkIp(data);
if (data.Substring(0, 7).ToLower() == "net dns")
this.setNetworkDns(data);
if (data.Substring(0, 8).ToLower() == "net wins")
this.setNetworkWins(data);
}
private void setNetworkWins(string data)
{
String[] par = data.Split(' ');
if (par.Length != 4)
return;
bool ret;
if (par[2].ToLower() == "auto")
ret = this.runProgramNetsh("interface ipv4 set winsservers name=\"" + par[3] + "\" source=dhcp");
else
ret = this.runProgramNetsh("interface ipv4 set winsservers \"" + par[3] + "\" static " + par[2]);
byte[] answ = Encoding.UTF8.GetBytes(ret.ToString());
sendanswer.Send(answ, answ.Length, rep);
}
private void setNetworkDns(string data)
{
String[] par = data.Split(' ');
if (par.Length != 4)
return;
bool ret;
if (par[2].ToLower() == "auto")
ret = this.runProgramNetsh("interface ipv4 set dnsservers name=\"" + par[3] + "\" source=dhcp");
else
ret = this.runProgramNetsh("interface ipv4 set dnsservers \"" + par[3] + "\" static " + par[2] + " primary");
byte[] answ = Encoding.UTF8.GetBytes(ret.ToString());
sendanswer.Send(answ, answ.Length, rep);
}
private void setNetworkIp(string data)
{
String[] par = data.Split(' ');
if (par.Length != 4 && par.Length != 6)
return;
bool ret;
if (par[2].ToLower() == "auto")
ret = this.runProgramNetsh("interface ipv4 set address name=\"" + par[3] + "\" source=dhcp");
else
ret = this.runProgramNetsh("interface ipv4 set address \"" + par[5] + "\" static " + par[2] + " " + par[3] + " " + par[4]);
byte[] answ = Encoding.UTF8.GetBytes(ret.ToString());
sendanswer.Send(answ, answ.Length, rep);
}
private void setNetworkAuto(string data)
{
String[] par = data.Split(' ');
if (par.Length != 3)
return;
byte[] answ;
if (this.runProgramNetsh("interface ipv4 set address name=\"" + par[2] + "\" source=dhcp") &&
this.runProgramNetsh("interface ipv4 set dnsservers name=\"" + par[2] + "\" source=dhcp") &&
this.runProgramNetsh("interface ipv4 set winsservers name=\"" + par[2] + "\" source=dhcp"))
answ = Encoding.UTF8.GetBytes(true.ToString());
else
answ = Encoding.UTF8.GetBytes(false.ToString());
sendanswer.Send(answ, answ.Length, rep);
}
private bool runProgramNetsh(string args)
{
Process p = new Process();
p.StartInfo.Arguments = args;
p.StartInfo.FileName = "netsh";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(output.Trim());
if (p.ExitCode == 0)
return true;
return false;
}
}
}