Seite 2 von 2

Verfasst: 25.06.2009 20:48
von Kurzer
Hier nochmal ein Code bei dem die externe IP per RegularExpression exrahiert wird. Vermutlich nur für PB 4.3x

Der IP-String steht bei Erfolg in dem Array sIP(0).

Code: Alles auswählen

EnableExplicit

Define sHeader.s
Dim sIP.s(0)

If CreateRegularExpression(0, "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")
	InitNetwork()
	
	sHeader = GetHTTPHeader("http://checkip.dyndns.org")
	;  Debug sHeader
	If ExtractRegularExpression(0, sHeader, sIP()) > 0
		Debug sIP(0)
	Else
		MessageRequester("Error", "Es konnte keine IP gefunden werden.")
	EndIf
	
	FreeRegularExpression(0)
Else
	MessageRequester("Error", RegularExpressionError())
EndIf

Verfasst: 26.06.2009 11:23
von Bisonte
Das ging auch ohne externe Webseite.

Ich hatte mal einen Code gefunden, der die Mac Adresse ausliest. (PureArea oder hier im Forum... ihr wißt ja... das alter ;) )
Nach einer kleinen Modifikation ermittelt das Teil nun die eigene IP-Adresse.
(Also nicht die LAN IP)

Code: Alles auswählen

Structure IP_ADDR_STRING
 pNext.l
 IpAddress.b[16]
 IpMask.b[16] 
 Context.l
EndStructure

Structure IP_ADAPTER_INFO
 Next.l
 ComboIndex.l
 AdapterName.b[260] ; MAX_ADAPTER_NAME_LENGTH + 4
 Description.b[132] ; MAX_ADAPTER_DESCRIPTION_LENGTH + 4
 AdressLength.l
 Address.b[8] ; MAX_ADAPTER_ADDRESS_LENGTH
 Index.l
 Type.l
 DhcpEnabled.l
 CurrentIpAddressPTR.l
 IpAddressList.IP_ADDR_STRING
 GatewayList.IP_ADDR_STRING
 DhcpServer.IP_ADDR_STRING
 HaveWins.l
 PrimaryWinsServer.IP_ADDR_STRING
 SecondaryWinsServer.IP_ADDR_STRING
 LeaseObtained.l
 LeaseExpires.l
EndStructure

Procedure.s N_GetOwnIP()

  Protected length.l=0, *Buffer, adapters, x, i, byte.b
  Protected tempipinfo.IP_ADAPTER_INFO
  Protected Result = GetAdaptersInfo_(0,@length)
  Protected Adapter.s, Adresse.s, Mac.s = ""

  If Result=#ERROR_BUFFER_OVERFLOW
  
    *Buffer = AllocateMemory(length)
    Result  = GetAdaptersInfo_(*Buffer,@length)

    If Result=#ERROR_SUCCESS
    
      adapters=length/SizeOf(IP_ADAPTER_INFO)

      For x=0 To adapters-1

        tempipinfo.IP_ADAPTER_INFO

        For i=0 To SizeOf(IP_ADAPTER_INFO)-1
          byte.b=PeekB(*Buffer+(x*640)+i)
          PokeB(tempipinfo+i,byte)
        Next i

        Adapter.s = PeekS(@tempipinfo\Description)

        If Left(Adapter,4) = "WAN "
          Adresse.s = PeekS(@tempipinfo\IpAddressList+4)
        EndIf

        mac =""

        For i=0 To 5
          
          byte.b=PeekB(@tempipinfo\Address+i)
          If byte>=0
            mac+RSet(Hex(byte),2,"0")
          Else
            mac+RSet(Hex(byte+256),2,"0")
          EndIf

          If i<5
            mac+":"
          EndIf

        Next i

      Next x
      
    Else
      
      Debug "Error : "+Str(Result)
    
    EndIf

EndIf 

ProcedureReturn Adresse
EndProcedure

Debug N_GetOwnIP()
funktioniert unter 4.30, sollte aber eigentlich auch unter 4.1 funktionieren...
Mich wundert nur, dass keiner der "Profs" das erwähnte ....

Verfasst: 26.06.2009 16:58
von Kurzer
Angesehen davon, daß es nur einen Rückgabewert gibt, wenn die Bezeichnung des Netzwerkadapters mit "WAN " beginnt, bekomme ich nach Eleminierung dieser Prüfung trotzdem nur meine interne IP angezeigt. (Mein Adaptername beginnt übrigens mit "Intel (R)...")

Anm: Ich sitze gerade in einem Firmennetzwerk, bin also nicht direkt mit dem Internet verbunden.

Die Lösung über eine externe Webseite (s. 2 posts weiter oben) funktioniert aber auch im Firmennetzwerk tadellos.

Verfasst: 26.06.2009 17:09
von DarkDragon
Der Code gibt bei mir auch die IP im lokalen Subnetz zurück. Hätte mich auch gewundert wenn das so ginge.

Verfasst: 26.06.2009 18:49
von Bisonte
Hm also bei mir wird die IP zurückgegeben, die ich auch über die Webadresse sehen kann.

Bei diversen anderen Rechnern, die mein Programm nutzen, wo ich das eingebaut habe, funktioniert es eigentlich so wie es soll...

Verfasst: 26.06.2009 22:28
von HeX0R
Kurzer hat geschrieben:Oder in kurz...
Das hier ist kurz! :mrgreen:

Verfasst: 27.06.2009 22:02
von Kurzer
Schon klar, aber das geht nur so lange Dein php-Skript da liegt.
Anders gesagt: Bei den anderen Lösungen ist man flexibler (um nicht zu sagen "nicht von Dir abhängig" ;) )