AddIPAdress keine änderung



  • Hallo Leute,

    ich spiele momentan ein bisschen mit den IP Helper Funktionen . (Bin mir nicht sicher ob das hier das richtige Unterforum ist, wenn nicht schonmal SORRY).

    Also wenn ich das richtig verstanden habe, ist die Funktion AddIPAddress zum ändern der IP Adresse da , oder ?

    Ich rufe Sie wie folgt auf, wenn ich aber in Windows unter Netzwerk Adaptereinstellungen meine Verbindungen kontrollieren, hat sich da nichts getan....

    Kann mir da bitte jmd. weiterhelfen ?

    int set_ip(){
    
    ULONG NTEContext = 0;
    ULONG NTEInstance = 0;
    
    UINT iaIPAddress;
    UINT iaIPMask;
    
    iaIPAddress = inet_addr("192.168.0.199");
    iaIPMask    = inet_addr("255.255.255.0");
    
    DWORD dwRetVal;
    
    dwRetVal = AddIPAddress(iaIPAddress, iaIPMask, 11,  &NTEContext, &NTEInstance);
    if (dwRetVal != NO_ERROR) {
        printf("AddIPAddress call failed with %d\n", dwRetVal);
    }
    
    }
    

    Wenn ich das Programm (mit Adminrechten, sonst kommt immer Fehler 5) einmal durchlaufen lasse, kommt Keine Fehlermeldung, jedoch stellt sich die Adresse für den Adapter nicht um. Beim zweiten mal kommt dann immer Fehler 5010 , der wohl "Objekt existiert schon" besagt....



  • msdn schrieb:

    The AddIPAddress function adds the specified IPv4 address to the specified adapter.

    Die Funktion fügt hinzu, sie ändert nichts.
    Deswegen gibt's beim zweiten Mal auch 'ne Fehlemeldung - die Adresse ist ja schon eingetragen.



  • Ok, dann stellen sich mir jetzt folgende fragen....

    1. Was fügt sie da genau dazu ? Also die IP Adresse wird wo hinzugefügt?

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

    Hab davor noch nie was mit Win Api usw. gemacht, also bin da bisschen arg hilflos momentan.



  • api_prob schrieb:

    1. Was fügt sie da genau dazu ? Also die IP Adresse wird wo hinzugefügt?

    Die Funktion fügt dem Netzwerk-Interface eine IP-Adresse hinzu - ein Netzwerk-Interface kann mehrere IP-Adressen haben.

    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(..)



  • Also ich möchte hald eigentlich einen Adapter z.b: Loacal Area Connection von DHCP auf eine statische IP umstellen. Und später evtl. wieder zurück auf DHCP. Also welche Funktionen ich benötige, oder wie ich das genau machen soll erschließt sich mir nicht wirklich.

    Ich will das hald nicht mit System("cmd befehle zum aendern") machen.



  • api_prob schrieb:

    Also ich möchte hald eigentlich einen Adapter z.b: Loacal Area Connection von DHCP auf eine statische IP umstellen. Und später evtl. wieder zurück auf DHCP. Also welche Funktionen ich benötige, oder wie ich das genau machen soll erschließt sich mir nicht wirklich.

    Ich will das hald nicht mit System("cmd befehle zum aendern") machen.

    Ev. hilft das:
    http://stackoverflow.com/questions/25862904/how-to-change-the-ip-address-of-a-computer-in-windows



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


Log in to reply