AddIPAdress keine änderung



  • Nö, in der Online Hilfe auf MSDN steht das es im SDK Ordner einen weiteren Ordner mit Beispielen gibt, der ein Programm zum ändern der IP beinhaltet.
    Ich kann auf Arbeit nichts installieren und da ist der Ordner leider leer.
    Darum kann ich das Bspl. nicht ansehen.

    Das ganze soll später evtl. noch in ne Graphische Oberfläche gepackt werden. Aber erst mal will ich einfach nur die IP Adresse statisch auf eine durch nen String erfassste Adresse umstellen... und dann wieder zurück auf "automatisch".

    Ich finde einfach nicht, wie ich das mit der WinApi realisieren kann. Es muss schon bei den IP Helper Functions dabei sein, ich weiß nur nicht welche ich hernehmen muss.

    Mit GetAdaptersAddresses hab ich die Infos für die Schnittstelle erhalten.



  • [quote="theta"]

    api_prob schrieb:

    Edit:

    api_prob schrieb:

    1. Kann mir jmd. bitte ne Funktion zum ÄNDERN der IP Adresse für einen Adapter sagen ? Ich bin jetzt schon 2 Tage auf der MSDN Seite unterwegs, aber wirklich schlauer bin ich nicht daraus geworden.

    Das geht AFAIK nicht direkt. Du musst die alte IP löschen und die neue hinzufügen.

    GetAdaptersInfo(..)
    DeleteIPAddress(..)
    AddIPAddress(..)

    Das hab ich auch schon ein bisschen rausgefunden, Verstehe aber nicth wie ich DeleteIPAddress nutze, da ich ja kein NTEContext habe . Dieses wird laut MSDN ja erst mit AddIPAddress "beschrieben"...?



  • Also ich würde C# dafür verwenden. Sehe keinen Grund das mit WinAPI runterzuklopfen.

    api_prob schrieb:

    Ich kann auf Arbeit nichts installieren und da ist der Ordner leider leer.
    Darum kann ich das Bspl. nicht ansehen.

    Da sehe ich jetzt kein Problem. Oder sagen wir mal so: keinen guten Grund für ein Problem.

    1. Es ist ein Projekt für die Firma. Dann solltest du dir die nötigen Rechte besorgen das SDK bzw. die SDK Samples zu installieren, die EDV bitten es für dich zu installieren oder sonstwas in der Richtung machen. Von nix kommt nix, und wenn man was braucht zum Arbeiten... tjoah.
    2. Es ist ein privates Projekt. Dann solltest du in der Arbeit lieber arbeiten als dich darum zu kümmern.

    Davon abgesehen...
    1~2 Minuten googeln: GetAdaptersInfo -> IP_ADAPTER_INFO[] -> Adapter finden -> IP_ADAPTER_INFO -> alte Adresse finden -> IP_ADDR_STRING -> Context Member an DeleteIPAddress übergeben um alte Adresse zu löschen -> AddIPAddress um neue Adresse hinzuzufügen -> Booyah.

    z.B. hier beschrieben:
    http://microsoft.public.vb.winapi.narkive.com/TW7rVsdu/how-to-obtain-ntecontext-for-use-in-deleteipaddress-without-first-calling-addipaddress

    EDIT:
    Blöderweise überlebt eine so hinzugefügte Adresse keinen Reboot.
    https://msdn.microsoft.com/en-us/library/aa365801(v=VS.85).aspx

    MSDN schrieb:

    The AddIPAddress function is used to add a new IPv4 address entry on a local computer. The IPv4 address added by the AddIPAddress function is not persistent. The IPv4 address exists only as long as the adapter object exists. Restarting the computer destroys the IPv4 address, as does manually resetting the network interface card (NIC). Also, certain PnP events may destroy the address.

    Ein Absatz weiter unten steht dann

    MSDN schrieb:

    To create an IPv4 address that persists, the EnableStatic method of the Win32_NetworkAdapterConfiguration Class in the Windows Management Instrumentation (WMI) controls may be used. The netsh commands can also be used to create a persistent IPv4 address. For more information, please see the documentation on Netsh.exe in the Windows Sockets documentation.

    Also WMI oder netsh.exe. Aber das willst du ja nicht.

    Was nu?



  • [quoteDavon abgesehen...
    1~2 Minuten googeln: GetAdaptersInfo -> IP_ADAPTER_INFO[] -> Adapter finden -> IP_ADAPTER_INFO -> alte Adresse finden -> IP_ADDR_STRING -> Context Member an DeleteIPAddress übergeben um alte Adresse zu löschen -> AddIPAddress um neue Adresse hinzuzufügen -> Booyah.[/quote]

    Muss ich probieren. Ohne scheiss ich hab echt viel gegoogelt aber eben bis zuletzt nicht genau gewusst nach was ich suche.

    Tausend Dank erstmal!!!

    Wegen den Rechten in der Arbeit : Da muss schon ne bombe einschlagen bevor unsere EDV itgendwas tut. Traurige Geschichte.



  • 2 (3) Sachen noch...

    1. Du hast gesehen/gelesen dass auf diese Art hinzugefügte IP Adressen NICHT erhalten bleiben, ja?

    2. U.u. musst du vorher die modifizierte Adresse einfügen und dann die alte löschen. In dem von mir verlinkten Thread erwähnt ja einer dass er mit dem Code die letzte Adresse nicht löschen kann. Und da denk ich mir... wenn man vorher ne Andere dazumacht könnte es trotzdem gehen.

    api_prob schrieb:

    Wegen den Rechten in der Arbeit : Da muss schon ne bombe einschlagen bevor unsere EDV itgendwas tut. Traurige Geschichte.

    Das ist Kacke.
    Haste keinen Abteilungsleiter der da ein Machtwort sprechen könnte? Ich meine, Systemprogrammierung machen ohne Admin-Rechte... das wird schwierig. Vor allem kannste laut MSDN ohne Admin-Rechte die hier erwähnten Funktionen auch gar nicht verwenden...



  • @api_prob: Es war keine geistige Verwirrung meinerseits GetAdapters(..) neben DeleteIPAddress(..) zu erwähnen.. 😉

    ➡ Besser lesen...



  • Hab mir das ganze jetzt nochmal angesehen...
    Problem :

    Nach XP soll man Get_Adapter_Addresses nutzen. Hab jetzt alle Strukturen mal durchgesehen... aber auf die "benötigte" P_ADAPTER_INFO[] komme ich nicht.



  • XP?
    Get_Adapter_Addresses?
    Huch?



  • Also man soll für Windows 7 GetAdapterAdresses nutzen... Jetzt bin ich wieder genausoweit, weil ich auch in den weiterführenden Strukturen bis jetzt noch keinen NTEContext



  • GetPerAdapterInfo Liefert scheinbar auch den Contex und es steht auch nichts ersichtlich dabei, dies in Win 7 bzw. nach XP nicht zu nutzen. Ich versuch mein Glück mal damit 🙂



  • Ich glaub ich gebe auf. Da steht entweder nichts oder nur Muell drinnen.

    C# kann ich leider nicht. Aber ich glaub ich fange an das zu lernen.
    Sind solche aufgaben mit C# und .Net "leichter" zu loesen ?



  • Das ist über WMI relativ einfach zu machen.
    Und WMI ist mit VB und C# sehr einfach zu verwenden.

    Du kannst WMI auch in einem C++ Programm verwenden, aber in der Zeit die du brauchst bis du dir zusammengesucht und -probiert hast wie das funktioniert...
    ...kannst du vermutlich schon ausreichend gut C# lernen um so einfache Dinge zu programmieren.

    Siehe z.B. http://stackoverflow.com/questions/209779/how-can-you-change-network-settings-ip-address-dns-wins-host-name-with-code



  • Werd nächste Woche mal mit nem guten C# Buch anfangen. Das mit der WinApi naja, also da muss man wohl dafür gemacht sein.

    Ich hab´s jetzt noch hinbekommen, jedoch bleibt jetzt die Gatewayaddresse stehen. Das hältst doch im Kopf nicht aus.

    Bzgl. netsh.exe . Gibt es da noch alternative als den Befehl über "System(do_sth)" rauszuhauen ?



  • Klar.
    Du kannst direkt mit CreateProcess einen Prozess starten.
    Du kannst u.u. ShellExecuteEx verwenden.
    Und natürlich kannst du ein temporäres Batchfile erzeugen, und dann cmd.exe über system / CreateProcess / ShellExecuteEx rausstarten um dieses auszuführen.

    Wenn du allerdings den Output des Programms in dein eigenes Programm umleiten willst statt ein Commandline-Fenster anzeigen zu lassen, dann wird's wieder richtig viel Arbeit und richtig viel Code. Wohingegen es in C# 3 Zeilen sind. Weil die .NET Framework-Klasse "Process" dir den ganzen aufwendigen und haarigen Code abnimmt.

    Alternativ könntest du noch ein VB-Script bzw. Javascript File bauen und dieses über wscript.exe ausführen lassen.
    Darin könntest du dann wieder relativ einfach WMI verwenden.



  • Alternativ könntest du noch ein VB-Script bzw. Javascript File bauen und dieses über wscript.exe ausführen lassen.

    Das hört sich gar nicht schlecht an. Ich muss dann aber wscipt.exe über ShellExecute starten und mit Parametern, bzw. dem Script versorgen, oder hab ich das jetzt falsch verstanden ?

    Auf jeden Fall nochmal vielen Dank für die Hilfe, hab mir jetzt mal die Bücher : "C# in a Nutshell " und "Visual C#2012 - Grundlagen und Profiwissen" besorgt. Denke damit sollte ich relativ gut versorgt sein ?





  • 👍 Danke, werd ich mir noch genauer ansehen.



  • api_prob schrieb:

    Alternativ könntest du noch ein VB-Script bzw. Javascript File bauen und dieses über wscript.exe ausführen lassen.

    Das hört sich gar nicht schlecht an. Ich muss dann aber wscipt.exe über ShellExecute starten und mit Parametern, bzw. dem Script versorgen, oder hab ich das jetzt falsch verstanden ?

    Starten kannst du die ganze Show auch über CreateProcess.
    Und was die Parameter angeht ... dein C++ Programm kann ja ein Temp-File generieren, wo alle nötigen Einstellungen schon drinnen sind, und das dann ausführen lassen.

    Die nötigen Parameter die du an wscript.exe übergeben musst sind dann nur der Pfad zu dem Temp-File und evtl. noch die Info welche Sprache es verwendet (VB-Script oder Javascript).

    api_prob schrieb:

    Auf jeden Fall nochmal vielen Dank für die Hilfe, hab mir jetzt mal die Bücher : "C# in a Nutshell " und "Visual C#2012 - Grundlagen und Profiwissen" besorgt. Denke damit sollte ich relativ gut versorgt sein ?

    OK, Bücher sind gut. Wobei ich C# wirklich einfach zu lernen fand. Gab dann natürlich ein paar "aha!s" später, aber sowas doch eher einfaches ist in C# ... eher einfach hinzubekommen 🙂
    Gibt viel Beispielcode im Netz und Stackoverflow etc. ist voll von Antworten auf alle nur denkbaren Fragen. Fast. Aber genug dass kaum wirklich schwierige Probleme übrigbleiben.



  • Ich hab sowas ähnliches mal programmiert um es für uns schneller zu machen unsere Service-Laptos von DHCP (Firmenetzwerk) auf definierte Statische IPs um zustellen um Feldgeräte beim Kunden per Webinterface zu progammieren. Also per API war mir das zu schwierig, da hab ich einfach ne GUI für netsh.exe programmiert. Die Besonderheit ist eben unter XP benötigt das Proggy keine Adminrechte unter Vista aufwärts schon, liegt halt am OS. Ansonste um die Befehlsfolge auszutesten die mit netsh.exe notwendig ist, das Ganze mit ner Batchdatei erst ausprobieren, dann die Befehle in die GUI einbauen. Hab dann das Proggy mit speicherbaren Settings ausgestattet, hat soweit super funktioniert.
    Ist halt die Spar-Lösung für den kleinen Mann der's nicht besser kann 🙂


Anmelden zum Antworten