W jaki sposób z poziomu c# można zmienić ustawienia sieci (adres IP, maska, brama) na komputerze?
Zmiana numeru IP i maski sieci

- Rejestracja:ponad 9 lat
- Ostatnio:ponad rok
- Lokalizacja:Kraków
- Postów:574
0
hipekk
Oczywiście szukałeś w sieci przed zadaniem pytania? Wpisanie w google 'c# change network adapter settings` w dwóch pierwszych wynikach daje odpowiedź na pytanie.

gg OP
Nie rozczulaj mnie ;) ... oczywista oczywistość.
Ten przykład ze stackoverflow jako pierwszy przeglądałem ale mam problem z "ManagementClass", której nie mam mimo dodania using "System.Management".
hipekk
Niby tak, a jednak @fasadin pokazał naocznie to co napisałem komentarz wyżej.

fasadin
@gg czyli wszyscy maja wiedziec ze ty masz problem z managmentClass, po prostu maja to wiedziec :D gratulacje sposobu myslenia. Musisz dodac referencje do swojego projektu

- Rejestracja:ponad 14 lat
- Ostatnio:ponad 3 lata
- Postów:4883
1
using System;
using System.Management;
namespace WindowsFormsApplication_CS
{
class NetworkManagement
{
/// <summary>
/// Set's a new IP Address and it's Submask of the local machine
/// </summary>
/// <param name="ip_address">The IP Address</param>
/// <param name="subnet_mask">The Submask IP Address</param>
/// <remarks>Requires a reference to the System.Management namespace</remarks>
public void setIP(string ip_address, string subnet_mask)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if ((bool)objMO["IPEnabled"])
{
try
{
ManagementBaseObject setIP;
ManagementBaseObject newIP =
objMO.GetMethodParameters("EnableStatic");
newIP["IPAddress"] = new string[] { ip_address };
newIP["SubnetMask"] = new string[] { subnet_mask };
setIP = objMO.InvokeMethod("EnableStatic", newIP, null);
}
catch (Exception)
{
throw;
}
}
}
}
/// <summary>
/// Set's a new Gateway address of the local machine
/// </summary>
/// <param name="gateway">The Gateway IP Address</param>
/// <remarks>Requires a reference to the System.Management namespace</remarks>
public void setGateway(string gateway)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if ((bool)objMO["IPEnabled"])
{
try
{
ManagementBaseObject setGateway;
ManagementBaseObject newGateway =
objMO.GetMethodParameters("SetGateways");
newGateway["DefaultIPGateway"] = new string[] { gateway };
newGateway["GatewayCostMetric"] = new int[] { 1 };
setGateway = objMO.InvokeMethod("SetGateways", newGateway, null);
}
catch (Exception)
{
throw;
}
}
}
}
/// <summary>
/// Set's the DNS Server of the local machine
/// </summary>
/// <param name="NIC">NIC address</param>
/// <param name="DNS">DNS server address</param>
/// <remarks>Requires a reference to the System.Management namespace</remarks>
public void setDNS(string NIC, string DNS)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if ((bool)objMO["IPEnabled"])
{
// if you are using the System.Net.NetworkInformation.NetworkInterface you'll need to change this line to if (objMO["Caption"].ToString().Contains(NIC)) and pass in the Description property instead of the name
if (objMO["Caption"].Equals(NIC))
{
try
{
ManagementBaseObject newDNS =
objMO.GetMethodParameters("SetDNSServerSearchOrder");
newDNS["DNSServerSearchOrder"] = DNS.Split(',');
ManagementBaseObject setDNS =
objMO.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
}
catch (Exception)
{
throw;
}
}
}
}
}
/// <summary>
/// Set's WINS of the local machine
/// </summary>
/// <param name="NIC">NIC Address</param>
/// <param name="priWINS">Primary WINS server address</param>
/// <param name="secWINS">Secondary WINS server address</param>
/// <remarks>Requires a reference to the System.Management namespace</remarks>
public void setWINS(string NIC, string priWINS, string secWINS)
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances();
foreach (ManagementObject objMO in objMOC)
{
if ((bool)objMO["IPEnabled"])
{
if (objMO["Caption"].Equals(NIC))
{
try
{
ManagementBaseObject setWINS;
ManagementBaseObject wins =
objMO.GetMethodParameters("SetWINSServer");
wins.SetPropertyValue("WINSPrimaryServer", priWINS);
wins.SetPropertyValue("WINSSecondaryServer", secWINS);
setWINS = objMO.InvokeMethod("SetWINSServer", wins, null);
}
catch (Exception)
{
throw;
}
}
}
}
}
}
}
googlowanie ciezka rzecz

A nie prościej zwykłym shellexecutem wywołać takie coś: netsh interface ip set address name="nazwa_połączenia" static xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy zzz.zzz.zzz.zzz

- Rejestracja:ponad 9 lat
- Ostatnio:ponad rok
- Lokalizacja:Kraków
- Postów:574
0
Pytanie wynikało z tego, że trzeba jeszcze dodać referencję do System.Management - co zresztą jest napisane w komentarzu a umknęło mojej uwadze. No ale spoglądać oczami i widzieć to nie zawsze to samo.
Dzięki za "opieprz", który pobudził z rana i wyzwolił "czujność" ;).
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
C#