Die eigene IP ermitteln

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dige hat geschrieben:
DarkDragon hat geschrieben:Auch gut, aber "Deutsch der kann, kann kommuniziert einfach."
Hehe :mrgreen: wohl das ist Restalkohol der vom Fasching .. *hicks*
Nicht sauft soviel oder Krankenhaus warten auf dich und Renovierung des Magens :P . (Ich nichtmehr wegbekomm diese Redensweise, dige danke)

Zurück zum Thema: Ich hoff nur dass diese ganzen IP Server nichtmehr offline gehen.
:mrgreen:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag von bluejoke »

Wenn man seinen eigenen Server verwendet (hauptsache ist halt, das der IP-Extrahier-Algo der gleiche ist), kann man die Adresse ja einfach in ner ini angeben oder so
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

ok da ja server mal offline gehen können oder die seite komplet von der bildfläche verschwinden kann und es somit zu probs in einem Programm führen kann hab ich mich mal eben hingesetzt und ne kleine procedure geschrieben die die ip-adresse auch so ermitteln kann ohne extra php-script auf nem server oder so.

der code geht nur wenn ihr NICHT über einen router oder Proxy online geht.

Code: Alles auswählen

InitNetwork()
Structure HOSTENT 
  h_name.l 
  h_aliases.l 
  h_addrtype.w 
  h_length.w 
  h_addr_list.l 
EndStructure 

ProcedureDLL.s GetIPbyHost(Hostname.s)
  TheIPAdress.s 
  pHostinfo = gethostbyname_(Hostname) 
  CopyMemory(pHostinfo, hostinfo.HOSTENT, SizeOf(HOSTENT)) 
  If hostinfo\h_addrtype <> #AF_INET 
    MessageRequester("Info","A non-IP address was returned", 0) 
  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
Debug "Your IP is: "+GetIPbyHost(Hostname())  
viel spaß damit
Gruß Nico
Zuletzt geändert von nicolaus am 10.02.2005 13:36, insgesamt 1-mal geändert.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Dein 2 tes Bsp. giebt meine Lokale IP aus net meine INet IP
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

haste du ne ganz normale DFÜ-verbindung auf gemacht?

du kannst ja mal noch in die while-schleife die zeile

Code: Alles auswählen

      Debug TheIPAdress
nach der zeile

Code: Alles auswählen

TheIPAdress = StrU(PeekB(ipAddress), 0) + "." + StrU(PeekB(ipAddress+1), 0) + "." +StrU(PeekB(ipAddress+2), 0) + "." + StrU(PeekB(ipAddress+3), 0) 
setzen und schauen wieviele IP´s dir ausgegeben werden.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Ne, ich sitz im Lan und hab nen DSL Router ;)
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

ok ich denke mal mit dem router wird das nich gehen sorry. da müßte man die IP direkt aus dem router auslesen wenn man nich über die scripts gehen will.
Benutzeravatar
dige
Beiträge: 1236
Registriert: 08.09.2004 08:53

Beitrag von dige »

@Nicolaus: Dein Beispiel macht keinen Sinn, da es die eigene lokale IP
ermittelt. Es ging aber darum herauszufinden welche IP letztlich nach
draussen geht ( nach diversen Routerm Proxys etc. )

Bei der DFÜ Einwahl erhälst Du eine dynamische IP zugewiesen,
die du mit PB Mitteln oder via API ermitteln kannst,
aber auch diese IP kann auch dem weg "nach draussen" ( zum Bsp. bei AOL)
nochmal gemappt werden...
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

das beispiel geht soweit super wenn du nicht hinter nem router oder proxy bist (also normale einwahl mit DFÜ und sonst nix).
es ist klar das es nicht geht wenn du hinter einem router oder so sitzt und das hatte ich auch in dem 2. beispiel nich gesaagt das es da geht oder?
Benutzeravatar
Nalfein
Beiträge: 29
Registriert: 22.08.2005 13:14

Code erweitert

Beitrag von Nalfein »

Hi!!

Hab' den Code von Falco um eine Kleinigkeit verändert, weil die von What's my IP anscheinend das format des Textes geändert haben, und es wird ja Suche nach Text benutzt...

Code: Alles auswählen

; Funktion um seine IP im Internet zu erfahren
; Autoren: Falko, Nicolaus und TS-Soft

Procedure.s GetMyInternetIP()
  ; TempPfad ermitteln
  Buffer.s = Space(#MAX_PATH)
  GetTempPath_(#MAX_PATH, @Buffer)
  ; IP-File downloaden
  Buffer + "ip.txt"
  If URLDownloadToFile_(0, @"http://www.whatismyip.com", @Buffer, 0, 0) = 0
    ; IP-File einlesen
    File = OpenFile(#PB_Any, Buffer)
    If File
      While Eof(File) = 0
        ; Zeile für Zeile einlesen und nach IP Filtern
        IPString.s = ReadString() ; wäre = statt + nicht besser? Das hier kann recht groß werden... funktioniert jedenfalls...
        ; wenn er eh jede Zeile erneut testet, ob er inzwischen die IP gelesen hat...
        If IPString
          temp_pos_beforIP = FindString(LCase(IPString),"your ip is ",1)
          If temp_pos_beforIP
            temp_pos_afterIP = FindString(IPString,"<",temp_pos_beforIP) ;das erste Zeichen nach der IP ist das < eines tags...
            If temp_pos_afterIP
              ip.s = Mid(IPString,temp_pos_beforIP+Len("your ip is "),temp_pos_afterIP-temp_pos_beforIP-Len("Your ip is "))
              If ip
                Break
              EndIf
            EndIf
          EndIf
        EndIf
      Wend
      CloseFile(File)
      DeleteFile(Buffer)
    EndIf
  EndIf
  If ip > ""
    ProcedureReturn ip
  EndIf
  ProcedureReturn "0.0.0.0"
EndProcedure

Debug  GetMyInternetIP()
[/code]
If OSVersion() <> #PB_OS_Windows_ME : End : EndIf !!!
Antworten