AddIPAdress keine änderung



  • Danke für den Link , aber es sollte C++ bleiben. Das eine ist C# glaub ich und die weiterführenden Links gehen zu VB glaub ich.

    Das kann doch normal nicht sooo schwierig sein oder ?



  • Ein Vorschlag geht über WMI. Das kannst du aus C++ raus genau so aufrufen.

    Ansonsten...
    https://msdn.microsoft.com/en-us/library/aa366073(v=vs.85).aspx



  • Ja, die IP Helper hab ich mir schon ziemlich lang angesehen aber bin auf nichts gekommen. Es gibt zwar wohl nen Beispiel code für "ip change" , leider ist mein SDK Verzeichnis leer, kann auch momentan nichts installieren .

    Mit AddIPAddress dachte ich wäre es machbar, aber scheinbar hab ich das total falsch Verstanden.



  • Und nu?



  • Hoffe ich darauf das jmd. sowas schon mal gemacht hat und mir evtl. sagen kann welche Funktionen ich nutzen muss, bzw. wie man richtig dabei vorgeht.

    Scheinbar gibt es keine "Change_IP_Adress(IP_String, Subnet_String, Adapter_NR); funktion. Ich dachte soetwas "triviales" wie die IP Addresse umstellen sollte kein großer akt sein.... Weit gefehlt 🙂 HELP!!!



  • Du willst kein cmd.exe.
    Du willst kein C#.
    Du willst WinAPI.
    Du hast kein SDK und kannst auch keins installieren.
    ...
    Hä?

    Wie willst du dann was kompilieren?
    Und wenn du kompilieren kannst, wozu brauchst du dann ein SDK? (Also dann hast du ja zumindest das SDK beim Compiler dabei, und das sollte ja reichen.)



  • 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.


Anmelden zum Antworten