GetExternIP API-Free

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.
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

GetExternIP API-Free

Beitrag von HeX0R »

Wollte nur sicher gehen, dass mein geistiger Erguss nicht in den Untiefen der Laberecke verendet.

Hab noch ein paar kleinere Veränderungen gemacht.

Nun noch für die Stichwortsuche:
Diese Funktion ermöglicht es eure externe IP festzustellen, wenn ihr hinter nem Router steckt.

Im Code sind die beiden URLs von ts-soft und winduff zur IP-Ermittlung enthalten. Der Traffic dürfte zwar minimal sein, dennoch würde ich vorschlagen die beiden zu fragen, oder besser noch den wahnsinnig aufregenden und komplexen php-code auf euren eigenen Webspace zu laden.

Einfach die neue URL + Pfad in die DataSection aufnehmen (wird von oben nach unten abgearbeitet) und fertig.

Code: Alles auswählen

;+---------------------------------------------+
;|  GetMyExternIP-Procedure                    |
;|                                             |
;|  Procedure to get your external IP          |
;|                                             |
;|  Called as Thread (absolutely Threadsafe!)  |
;|  UNICODE Supported                          |
;|                                             |
;|  (c)HeX0R 2006                              |
;|  http://h3x0r.ath.cx                        |
;|  mailto:h3x0r [a  t] h3x0r.ath.cx           |
;|                                             |
;|                                             |
;|  For compiling this source you will         |
;|  need at least PureBasic 4.00!              |
;|  AND NO NEED OF ANY EXTERNAL LIBS!          |
;+---------------------------------------------+

Macro _MemoryStringLength(a)
	MemoryStringLength(a) * SizeOf(CHARACTER)
EndMacro

Procedure GetMyExternIP(*IP.long)

	Protected A.l, i.l, P.l, NetID.l, Length.l, Factor.l, TimeOUT.l, *MyBuffer, *Pointer.BYTE, *Start

	*Start    = ?GetMyExtIPData
	*MyBuffer = AllocateMemory(8192)
	If *MyBuffer
		PokeS(*MyBuffer, "GET ", -1, #PB_Ascii)
		While _MemoryStringLength(*Start)
			PokeS(*MyBuffer + 4, PeekS(*Start), -1, #PB_Ascii)
			*Start + _MemoryStringLength(*Start) + SizeOf(CHARACTER)
			PokeS(*MyBuffer + 4 + MemoryStringLength(*MyBuffer + 4, #PB_Ascii), " HTTP/1.1" + #CRLF$ + "Host: ", -1, #PB_Ascii)
			i = 4 + MemoryStringLength(*MyBuffer + 4, #PB_Ascii)
			PokeS(*MyBuffer + 4 + MemoryStringLength(*MyBuffer + 4, #PB_Ascii), PeekS(*Start), -1, #PB_Ascii)
			NetID = OpenNetworkConnection(PeekS(*MyBuffer + i, -1, #PB_Ascii), 80)
			If NetID
				PokeS(*MyBuffer + 4 + MemoryStringLength(*MyBuffer + 4, #PB_Ascii), #CRLF$ + "User-Agent: Mozilla/5.0" + #CRLF$ + #CRLF$, -1, #PB_Ascii)
				P = 0
				i = MemoryStringLength(*MyBuffer, #PB_Ascii)
				While P < i
					Length = SendNetworkData(NetID, *MyBuffer + P, i - P)
					If Length = -1
						CloseNetworkConnection(NetID)
						NetID = 0
						Break
					EndIf
					P + Length
				Wend
				If P = i
					Break
				EndIf
			EndIf
			*Start + _MemoryStringLength(*Start) + SizeOf(CHARACTER)
		Wend
		If NetID
			Dim Values.l(3)
			Values(0) = -1
			TimeOUT   = ElapsedMilliseconds() + 3000 ;3 Seconds
			Length    = 0
			Repeat
				Select NetworkClientEvent(NetID)
					Case 0
						Delay(5)
					Case #PB_NetworkEvent_Data
						P = ReceiveNetworkData(NetID, *MyBuffer + Length, 8192 - Length)
						If P > 0
							Length + P
							*Pointer = *MyBuffer + Length
							Factor   = 1
							i        = 3
							Repeat
								If *Pointer\b >= '0' And *Pointer\b <= '9'
									Values(i) + Factor * (*Pointer\b - '0')
									Factor * 10
								ElseIf *Pointer\b = '.'
									Factor = 1
									i - 1
									Values(i) = 0
								ElseIf i = 0
									Break
								Else
									i         = 3
									Factor    = 1
									Values(0) = -1
									Values(3) = 0
								EndIf
								*Pointer - 1
							Until *Pointer < *MyBuffer
							If Values(0) <> -1
								*IP\l = MakeIPAddress(Values(0), Values(1), Values(2), Values(3))
								Break
							EndIf
						EndIf
				EndSelect
				If TimeOUT < ElapsedMilliseconds()
					Break
				EndIf
			ForEver
			CloseNetworkConnection(NetID)
		EndIf
		FreeMemory(*MyBuffer)
	EndIf
EndProcedure

DataSection
	GetMyExtIPData:
	Data.s "/getip.php"     ;path
	Data.s "www.ts-soft.eu" ;url
	;
	Data.s "/ip.php"        ;path
	Data.s "www.eimex.de"   ;url
	;
	;Add more if whished
	Data.c 0
EndDataSection
;>>>>>End Of Include<<<<<



;-------------------------------------------------
;Example
Define.l MyIP

InitNetwork()
If OpenWindow(0, 227, 117, 169, 37, "GetMyExtIP",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
	If CreateGadgetList(WindowID(0))
		TextGadget(0, 10, 10, 20, 20, "IP:")
		IPAddressGadget(1, 40, 10, 120, 20)
		If CreateThread(@GetMyExternIP(), @MyIP)
			Repeat
				Select WaitWindowEvent(100)
					Case #PB_Event_CloseWindow
						Break
					Case 0
						If MyIP <> 0 And GetGadgetState(1) <> MyIP
							SetGadgetState(1, MyIP)
						EndIf
				EndSelect
			ForEver
		EndIf
	EndIf
EndIf
[Edit]
Unicode sollte nun auch gehn...
Zuletzt geändert von HeX0R am 16.11.2006 01:26, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Sehr brauchbar :allright:
PS: Haste mal unter Unicode getestet :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Ist es so besser ?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

HeX0R hat geschrieben:Ist es so besser ?
Wunderbar, ich danke Dir :D

PS: Hab langsam das Gefühl ich bin der einzige der Unicode nutzt
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Das ist schon gut so, dank dir fange ich wenigstens endlich an mich auch damit zu beschäftigen.

Nörgel ruhig immer fleissig weiter :allright:
Antworten