IP, Subnetz, Gateway per Button ändern

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von philie.

    IP, Subnetz, Gateway per Button ändern

    Hallo,
    nachem ich schon etwas weitergekommen bin, möchte ich mal meinen aktuellen Stand präsentieren:

    Quellcode:

    VB.NET-Quellcode

    1. 'Bibliotheken importieren
    2. Imports System.Net.NetworkInformation
    3. Imports System.Net.NetworkInformation.NetworkInterface
    4. Imports System.Net.Dns
    5. Imports System.Management
    6. Public Class Form1
    7. Dim CurrentNet As String 'Das aktuell ausgewählte Netzwerk
    8. Dim adapter As NetworkInterface 'Eine Netzwerkadapter Instanz
    9. Dim adapters As NetworkInterface() 'Array mit allen Netzwerkadaptern
    10. Public Sub DisplayDnsConfiguration()
    11. adapters = NetworkInterface.GetAllNetworkInterfaces()
    12. 'Alle aktivierten Netzwerkadapter auflisten
    13. For Each Me.adapter In adapters
    14. Dim properties As IPInterfaceProperties = adapter.GetIPProperties()
    15. ComboBox1.Items.Add(adapter.Description)
    16. Next adapter
    17. End Sub
    18. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    19. 'Alle Adapter in der Liste überprüfen
    20. DisplayDnsConfiguration()
    21. End Sub
    22. Public Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    23. txtNetInfo.Text = ""
    24. For Each Me.adapter In adapters
    25. Dim properties As IPInterfaceProperties = adapter.GetIPProperties()
    26. If adapter.Description = ComboBox1.Text Then 'Wenn Adapterbeschreibung in ComboBox1 steht und ausgewählt ist, dann folgende Infos anzeigen.
    27. Try
    28. txtNetInfo.Text += adapter.Description & vbNewLine & vbNewLine & _
    29. "----->Adapterinformationen<----- " & vbNewLine & _
    30. "Typ....................................................... " & adapter.Name & vbNewLine & _
    31. "Computername.............................................. " & IPGlobalProperties.GetIPGlobalProperties.HostName.ToString & vbNewLine & _
    32. "IP Adresse................................................ " & System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList.GetValue(1).ToString & vbNewLine & _
    33. "Gateway Adresse........................................... " & properties.GatewayAddresses(0).Address.ToString & vbNewLine & _
    34. "DNS Server................................................ " & properties.DnsAddresses(0).ToString & vbNewLine & _
    35. "Dynamisches DHCP aktiviert?............................... " & adapter.GetIPProperties.GetIPv4Properties.IsDhcpEnabled.ToString & vbNewLine & _
    36. "Statisches DNS aktiviert?................................. " & properties.IsDnsEnabled & vbNewLine & _
    37. "Dynamisches DNS aktiviert?................................ " & properties.IsDynamicDnsEnabled & vbNewLine & _
    38. "MAC Adresse............................................... " & adapter.GetPhysicalAddress.ToString
    39. CurrentNet = adapter.Description
    40. Catch ex As Exception
    41. Finally
    42. End Try
    43. End If
    44. Next
    45. If txtNetInfo.Text = "" Then 'Wenn keine Adapterinfos ausgelesen werden können, dann Fehler ausgeben
    46. txtNetInfo.Text = "Fehler Beim Auslesen der Netzwerkinformationen." & vbNewLine & vbNewLine & "Bitte Wählen Sie einen anderen Netzwerkadapter."
    47. End If
    48. End Sub
    49. Private Sub Netzwerkeinstellungen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Netzwerkeinstellungen.Click
    50. End Sub
    51. End Class



    Windows Form:




    So, Auflistung der Adapter und der dazugehörigen Infos funktioniert, wie man auf dem Bild sieht. Jetzt habe ich rechts oben noch nen paar Textboxen und nen Button eingefügt und möchte dann halt, dasss man in die entsprechenden Felder IP, Subnetz und DNS einträgt, auf Netzwerkeinstellungen ändern klickt und dann das halt geändert wird. Habe mich im I-Netz schon den ganzen Tag dumm und dusselig gesucht, aber nichts brauchbares finden können. Hoffe hier kann mir jemand helfen ^^.

    Liebe Grüße
    Zum Werte Setzen kommst du meines Wissens mit der InterfaceProperties-Klasse nicht weiter.
    Dazu wäre in meinen Augen WMI am besten geeignet.
    Ansatz hier

    Gute Übersicht findest du, wenn du nach WMI Codecreator suchst.
    Damit kannst du alle Klassen, Methoden usw. sehen, testen und code kreiiren

    Gruss Mono
    Das ist meine Signatur und sie wird wunderbar sein!

    VB.NET-Quellcode

    1. Private Sub SetIP(ByVal IPAddress As String, ByVal SubnetMask As String, _
    2. ByVal Gateway As String)
    3. Dim managementClass As New ManagementClass("Win32_NetworkAdapterConfiguration")
    4. Dim mgObjCollection As ManagementObjectCollection = managementClass.GetInstances()
    5. For Each mgObject As ManagementObject In mgObjCollection
    6. If Not CType(mgObject("IPEnabled"), Boolean) Then Continue For
    7. Try
    8. Dim objNewIP As ManagementBaseObject = Nothing
    9. Dim objSetIP As ManagementBaseObject = Nothing
    10. Dim objNewGate As ManagementBaseObject = Nothing
    11. objNewIP = mgObject.GetMethodParameters("EnableStatic")
    12. objNewGate = mgObject.GetMethodParameters("SetGateways")
    13. ' Set the default gateway (decided to declare and initialise
    14. ' variables rather than attempting to initialize the array
    15. ' while communicating with the WMI.
    16. Dim tmpStrArray() As String = {Gateway}
    17. objNewGate("DefaultIPGateway") = tmpStrArray
    18. Dim tmpIntArray() As Integer = {1}
    19. objNewGate("GatewayCostMetric") = tmpIntArray
    20. ' Set the IP address and subnet.
    21. tmpStrArray(0) = IPAddress
    22. objNewIP("IPAddress") = tmpStrArray
    23. tmpStrArray(0) = SubnetMask
    24. objNewIP("SubnetMask") = tmpStrArray
    25. objSetIP = mgObject.InvokeMethod("EnableStatic", objNewIP, Nothing)
    26. objSetIP = mgObject.InvokeMethod("SetGateways", objNewGate, Nothing)
    27. Catch ex As Exception
    28. MessageBox.Show("An error occured: " + ex.Message)
    29. End Try
    30. Next
    31. End Sub
    32. ' Example Usage
    33. SetIP("192.168.1.230", "255.255.255.0", "192.168.1.51")


    Was ist daran so schwer zu verstehen? ;)
    Der Code versteht sich so ziehmlich von selbst.
    MFG
    GOOGLE ist mein Meister :)
    Jo sicher, kann ich den Code einfach so direkt übernehmen?



    PS: habe noch etwas im Internet gefunden. Mein Code für den Button sieht jetzt so aus:

    VB.NET-Quellcode

    1. Private Sub Netzwerkeinstellungen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Netzwerkeinstellungen.Click
    2. Call Shell("netsh interface ip set address " & TextBox5.Text & Space(1) & "static " & TextBox2.Text & Space(1) & TextBox3.Text & Space(1) & TextBox4.Text & Space(1) & "1")
    3. End Sub


    Dieser scheint aber auch nicht zu funktionieren, leider =(.
    Bleib bei WMI.
    Shell oder besser Process.Start bedient ja die netsh.
    Das finde ich pers. unschön ;)

    Wie gesagt, mit WMI bist du da am besten beraten.

    Gruss
    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo! Ich häng mich mal hier ran, um nicht einen doppelpost zu erstellen.

    Ich möchte mit VB2010 was ähnliches machen wie der Thread Ersteller, aber etwas vereinfacht. mir schwebt ein Tool vor, welches über 2 Buttons verfügt. Der eine ist um die IP auf DHCP einzustellen, der andere vergibt eine von mir definierte statische IP + Subnet. Das ist es eigentlich schon. Ich habe vieles im Internet gefunden aber nichts will richtig funzen.
    Ich hab einige varianten WMI und einiges netsh gefunden, aber ich brings nicht hin. am liebsten würde ich es via netsh machen weil ich das tool auf mehreren laptops benützen möchte. ich steh aber ziemlich auf dem schlauch wie ich vorgehen soll.
    Kann mir jemand weiterhelfen?
    Es wurde zwar schon genannt, aber da es von euch niemand sucht: WMI Codegenerator

    Damit kann man sich, wie der Name schon sagt, Codes generieren lassen....
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D
    Hallo und danke für die Antwort.
    Dieses Tool habe ich bereits ausprobiert, ist viel versprechend, habe aber noch zwei Probleme:
    Ich generier mir den WMI Code in Execute a Method und gebe meine gewünschten Parameter ein, allerdings weiss ich nicht welchen Win32_NetworkAdapterConfiguration.Index anzuwählen ist.
    Das zweite Problem, beim Debuggen des unteren Codes wird beim drücken des Button jeweils ein Fehler bei der IP und dem Subnet ausgelöst: Das Objekt des Typs "System.String" kann nicht in Typ "System.Array" umgewandelt werden.
    Dessweiteren bin ich mir nicht sicher, ob ich mit diesem Code überhaut auf der richtigen Färte bin.

    Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Try
    3. Dim classInstance As New ManagementObject( _
    4. "root\CIMV2", _
    5. "Win32_NetworkAdapterConfiguration.Index='20'", _
    6. Nothing)
    7. ' Obtain [in] parameters for the method
    8. Dim inParams As ManagementBaseObject = _
    9. classInstance.GetMethodParameters("EnableStatic")
    10. ' Add the input parameters.
    11. inParams("IPAddress") = "223.100.100.50"
    12. inParams("SubnetMask") = "255.255.255.0"
    13. ' Execute the method and obtain the return values.
    14. Dim outParams As ManagementBaseObject = _
    15. classInstance.InvokeMethod("EnableStatic", inParams, Nothing)
    16. ' List outParams
    17. MessageBox.Show("Out parameters:")
    18. MessageBox.Show("ReturnValue: {0}", outParams("ReturnValue"))
    19. Catch err As ManagementException
    20. MessageBox.Show("An error occurred while trying to execute the WMI method: " & err.Message)
    21. End Try
    22. End Sub