Forum: PC-Programmierung IP Adresse setzen in C#


von Eric (Gast)


Lesenswert?

Hallo,

wie setze ich meine lokale IP-Adresse in C#. Zurzeit nutze ich den Code 
unten. Dieser funktioniert aber nicht. Hat jemand einen Tipp?
1
public bool writeNetworkdata(string ip_address, string subnet_mask,string Networkcard)
2
        {
3
            ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
4
            ManagementObjectCollection objMOC = objMC.GetInstances();
5
            try
6
                    {
7
            foreach (ManagementObject objMO in objMOC)
8
            {
9
                if ((bool)objMO["IPEnabled"])
10
                {
11
                    if  (((string)(objMO["Description"]))==Networkcard)
12
                        {
13
                        
14
                        ManagementBaseObject setIP;
15
                        ManagementBaseObject newIP =
16
                        objMO.GetMethodParameters("EnableStatic");
17
                     string []a =  ip_address.Split(',');
18
                        newIP["IPAddress"] = ip_address.Split(',');
19
                        newIP["SubnetMask"] = new string[] { subnet_mask };
20
                        objMO.
21
                        setIP = objMO.InvokeMethod("EnableStatic", newIP,null);
22
                       
23
                        }
24
25
                    }
26
                }
27
                return true;
28
            }
29
            catch
30
            {
31
            return false;
32
            }

von Peter II (Gast)


Lesenswert?

Eric schrieb:
> Dieser funktioniert aber nicht.
was geht nicht?

>  Hat jemand einen Tipp?
nicht bei den wenigen infos.


Sehe ich das richtig das du die Aktuell IP vom Systen ändern willst? 
Wenn ja läuft denn das Programm mit admin rechten?

von Eric (Gast)


Lesenswert?

Hallo,

Ja ich will die IP-Adresse vom System für eine Netzwerkkarte ändern.
Es wird kein Fehler gezeigt, nur die IP-Adresse und die Subnetmaske wird 
nicht geändert. Das Programm müsste eigentlich mit Admin-Rechten laufen. 
Auslesen kann ich alle Netzwerkarten und die dazugehörigen IP-Adressen.

Viele Grüße,

Eric

von Peter II (Gast)


Lesenswert?

Eric schrieb:
> Es wird kein Fehler gezeigt,

wenn man eine leere Fehlerbehandung macht ist das auch kein wunder.

>  catch
>            {
>            return false;
>            }

von Eric (Gast)


Lesenswert?

Hallo,

der Debugger springt nicht in die catch-Anweisung hinein, daran kann es 
also nicht liegen.

von Christian (Gast)


Lesenswert?

Noch nie gemacht das ganze aber mal ganz aus der Hüfte, definitiv den 
richtigen netzwerkadapter erwischt?

von Eric (Gast)


Lesenswert?

Ja den habe ich erwischt. Habe jetzt gesehen, das mein Profil, dem eines 
eingeschränkten Users entspricht. Ich führe Visual Studio 2005 
allerdings als Admistrator aus. Windows 7 (rechtsklich)

Seltsam, bei der FREE Software NetSetMan kann ich die IP-Adresse setzen.

von Borislav B. (boris_b)


Lesenswert?

Ich habs letztens so gemacht:
1
/// <summary>
2
    /// Configures the adapter static IP.
3
    /// </summary>
4
    /// <param name="connectionName">Name of the connection.</param>
5
    /// <param name="ip">The ip.</param>
6
    /// <param name="subnetMask">The subnet mask.</param>
7
    public static void ConfigureAdapterStaticIP(string connectionName, string ip, string subnetMask)
8
    {
9
      string cmd = string.Format("interface ip set address \"{0}\" static {1} {2}", connectionName, ip, subnetMask);
10
      StartProcess("netsh", cmd, true);
11
    }
12
13
    /// <summary>
14
    /// Starts the process.
15
    /// </summary>
16
    /// <param name="executable">The executable.</param>
17
    /// <param name="command">The command.</param>
18
    /// <param name="runAsAdmin">if set to <c>true</c> [run as admin].</param>
19
    private static void StartProcess(string executable, string command, bool runAsAdmin)
20
    {
21
      var p = new Process();
22
      var startInfo = new ProcessStartInfo(executable, command);
23
      startInfo.Verb = "runas";
24
      startInfo.WindowStyle = ProcessWindowStyle.Hidden;
25
      startInfo.UseShellExecute = true;
26
      if(runAsAdmin) p.StartInfo = startInfo;
27
      p.Start();
28
    }

von Eric (Gast)


Lesenswert?

Hallo,

danke für die Information. Ich werde es später mal ausprobieren. Ich 
gebe ein Feedback, ob es bei mir funktioniert.

Viele Grüße,

Eric

von Eric (Gast)


Lesenswert?

Hallo,

so hab es getestet. Hat nicht funtioniert. Ich gehe davon aus das 
Connectionname der Name meiner Netzwerkkarte ist ?

Gruß

von Eric (Gast)


Lesenswert?

Hallo,

es funktioniert doch :D. Ich muss dieses netsh tool und dem Befehl nur 2 
mal aufrufen, sehr seltsam

Trotzdem vielen Dank und eine entspannte Woche.

von Borislav B. (boris_b)


Lesenswert?

Morgen,
jein ;-) Der connectiionName ist der name der Verbindung, wie er in der 
Systemsteuerung angezeigt wird (unter "Systemsteuerung\Netzwerk und 
Internet\Netzwerkverbindungen").
Habs gerade nochmal ausprobiert: bei mir tuts wunderbar (Windows 7 x64).

Du kannst ja mal versuchen, den Befehl netsh über die Konsole manuell 
auszuführen (genau so, wie der Code es tut). Dann siehst du ja an den 
Ausgaben woran es scheitert. Vermutlich stimmt ein Parameter nicht...

EDIT: OK, hat sich ja dann erledigt ;-)

von Eric (Gast)


Lesenswert?

Ich hab jetzt nochmal die andere Methode (am Anfang des Beitrages) 
probiert. Diese geht aufeinmal auch. Versteh ich zwar nicht, aber egal.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.