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!

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"

)