Wie IP-Adresse ändern?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
PSi
Beiträge: 13
Registriert: 10.05.2007 11:20

Wie IP-Adresse ändern?

Beitrag von PSi »

Hallo Leute,

wie kann ich die IP-Adresse ändern?

Hintergrund: ich möchte ein kleines Programm programmieren, das schnell meine IP-Adresse ändert (z.B. von DHCP nach statische IP-Adresse und zurück).

Sehr wahrscheinlich geht es nur über API - ich blicke aber in diesen miserablen API-Funktionen nicht durch :evil: :( /:->

Kennt jemand eine Funktion oder hat jemand Erfahrung?

Ich bin bis jetzt nur so weit, dass ich meine eigene IP-Adresse ermitteln kann:
(Achtung! Codes sind zum größten Teil aus dem Code-Archiv!)

Code: Alles auswählen

Procedure.s MyGetLocalHostname()
  Puffer.s = Space(1024) ; Puffer für Stringvariable mit 1024 Zeichen
  Pufferlaenge.l = 1024 ; Größe der Puffervariable (auch 1024)  
  GetComputerName_(@Puffer.s, @Pufferlaenge.l) ; API-FUNKTION 
  ProcedureReturn Puffer.s ; Rückgabewert der Prozedur
EndProcedure


Procedure.s MyGetIPbyHost(Hostname.s)

    InitNetwork()
     
    Structure HOSTENT 
      h_name.l 
      h_aliases.l 
      h_addrtype.w 
      h_length.w 
      h_addr_list.l 
    EndStructure 
 
    TheIPAdress.s 
    pHostinfo = gethostbyname_(Hostname) 
    CopyMemory(pHostinfo, hostinfo.HOSTENT, SizeOf(HOSTENT)) 
    
    If hostinfo\h_addrtype <> #AF_INET
      ProcedureReturn ""
    Else
      While PeekL(hostinfo\h_addr_list+AdressNumber * 4) 
        ipAddress = PeekL(hostinfo\h_addr_list + AdressNumber * 4) 
        TheIPAdress = StrU(PeekB(ipAddress), 0) + "." + StrU(PeekB(ipAddress+1), 0) + "." +StrU(PeekB(ipAddress+2), 0) + "." + StrU(PeekB(ipAddress+3), 0) 
        AdressNumber + 1 
      Wend
    EndIf
     
  ProcedureReturn TheIPAdress
   
EndProcedure

MessageRequester("Debug", "Meine aktuelle IP ist: " + MyGetIPbyHost(MyGetLocalHostname()), 0)
wie gesagt, ich habe die Prozeduren klein wenig angepasst, sie stammen nicht von mir!

OK - vielen Dank im voraus und schönes Wochenende

PSi
PB 3.3

^v^v^v^v^v^v^
man vs. machine
^v^v^v^v^v^v^
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Ich kenne da zwar nicht den API Weg und habe auch keine Lust mich damit zu beschäftigen, aber eine einfache Lösung wäre netsh dafür zu nutzen (einfach mit RunProgram).

Dazu musst du in beiden varianten die du nutzen willst mit netsh ein dump der Netzwerkkonfiguration erstellen. Willst du dann einen Zustand wiederherstellen rufst du netsh einfach mit dem dump als skript auf.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

dasselbe Problem hatte ich auch (siehe meine zahlreichen IP-* Postings). Ich kann netsh NICHT unter XP und kleiner empfehlen, da netsh alleine zum aufrufen der hilfedatei einige Sekunden braucht. Eine IP zu übernehmen dauert unter XP mit nem 3,06 GHz Intel Prozessor etwa 15 Sek. Das ist mir eindeutig zu lang! Aber wenn ihr eine andere Methode findet, lasst es mich wissen. Das IP-Adressen Projekt habe ich erstmal stillgelegt, weil mir netsh wirklich zu langsam ist.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PSi
Beiträge: 13
Registriert: 10.05.2007 11:20

Beitrag von PSi »

Oh man, das ist gar nicht so einfach :(

über netsh oder so wird es glaube ich nicht :(

Ich glaube, es führt kein Weg an "IP Helper Functions" vorbei :(

hier ein paar nützliche Links:

http://english.geekpage.jp/programming/ ... ctions.php

http://corelibrary.sourceforge.net/doxy ... pi_8h.html

http://msdn2.microsoft.com/En-US/library/aa365915.aspx

http://msdn.microsoft.com/library/defau ... ctions.asp


Eine mögliche Lösung wäre der Weg über WMI. Hier einige Infos:

http://msdn.microsoft.com/library/defau ... ration.asp


Falls doch jemand was hat, bitte melden ...

schönen Tag noch ...

Gruß
PSi
PB 3.3

^v^v^v^v^v^v^
man vs. machine
^v^v^v^v^v^v^
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@PSi: WMI wollte ich auch machen. Nur leider fehlten mir die Beispiele und Codes dafür. Alles, was du auf Microsoft.com finden wirst, ist in der eigenen Programmiersprache VisualBasic geschrieben. Und niemand hier konnte es in PB Code übersetzen :cry:. Ich habe zwar damals mal was mit VB gemacht, aber so fortgeschritten war ich da dann doch nicht :lol:

//edit: Ich glaube, mit v3.3 wirst du nicht sehr weit kommen. Update einfach auf die v4.02, da haste was anständiges
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Einfach nur die IP ändern reicht nicht.
Es müssen auch die Routing-Tabellen korrigiert werden und ein paar Dienste neu Initialisiert werden.

Such mal im Internet nach "NetSetMan". Das Tool sollte reichen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

@mk-soft: Ich denke aber, PSi braucht etwas PB lauffähiges (ich übrigens auch)
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PSi
Beiträge: 13
Registriert: 10.05.2007 11:20

Beitrag von PSi »

mk-soft hat geschrieben:Einfach nur die IP ändern reicht nicht.
Es müssen auch die Routing-Tabellen korrigiert werden und ein paar Dienste neu Initialisiert werden. Such mal im Internet nach "NetSetMan". Das Tool sollte reichen.
Das hört sich ja wirklich nicht so einfach an - schade :(
Das Tools NetSetMan ist wirklich toll, ich wüsste nur gerne wie es programmiert wurde - ich hatte nämlich auch vor so was ähnliches zu programmieren - ich möchte es aber selber machen, damit ich auch was lerne :)


PureBasic4.0 hat geschrieben:@mk-soft: Ich denke aber, PSi braucht etwas PB lauffähiges (ich übrigens auch)
das ist richtig, ich möchte direkt von PB aus diese Funktion nutzen.


PureBasic4.0 hat geschrieben:@PSi: ... Ich glaube, mit v3.3 wirst du nicht sehr weit kommen. Update einfach auf die v4.02, da haste was anständiges
OK, PB 4 hat natürlich viele Features, aber PB 3.3 ist auch nicht so schlimm - ausserdem reizt es mich mehr mit PB3.3 was hinzukriegen als mit PB4 - schade nur, dass es für 3.3 wenige bis gar keine Tools wie z.B. jaPBe gibt :(
und API-Funktionen bleiben gleich, ob nun mit PB4 oder mit PB3.3 :D

werde aber trotzdem bald auf die 4'er Version umsteigen ...

Vielen Dank an alle

Gruß
PSi
PB 3.3

^v^v^v^v^v^v^
man vs. machine
^v^v^v^v^v^v^
Antworten