ReceiveNetworkData Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

ReceiveNetworkData Problem

Beitrag von _JON_ »

Hallo Leute,
ich bin neulich auf der suche einer Möglichkeit zum raus finden der öffentlichen IP auf etwas gestoßen.

your-public-ip-stun-protocol und wollt das mal in PB schreiben.
Allerdings hapert es schon bei ReceiveNetworkData :?

Code: Alles auswählen

Structure tSTUN
  Header.b[8]
  Header_ID.b[12]
  Type.b[2]
  Length.b[2]
  Attrib.b
  Family.b
  Port.b[2]
  IP.b[4]
EndStructure

Define iConnect, sServer.s, lPort.l, iLen
Define x
Define *bToSend, *bToRecv.tSTUN

*bToSend = AllocateMemory(20)
*bToRecv.tSTUN = AllocateMemory(1280)
PokeQ(*bToSend, $0001000000000000)


RandomData(*bToSend + 8, 12)

sServer = "stun.l.google.com"
lPort   = 19302
iLen    = 1280

InitNetwork()

iConnect = OpenNetworkConnection(sServer, lPort, #PB_Network_UDP)
If iConnect
  
  If SendNetworkData(iConnect, *bToSend, 20) = 20
    
    For x = 1 To 3
      Debug ReceiveNetworkData(iConnect, *bToRecv, 20)
      Delay(10)
    Next
  EndIf
  CloseNetworkConnection(iConnect)

EndIf

Zuletzt geändert von _JON_ am 01.12.2014 16:30, insgesamt 1-mal geändert.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ReceiveNetworkData Problem

Beitrag von Kiffi »

Hallo _JON_,

geht es Dir jetzt um das Ermitteln der IP oder um das Problem mit ReceiveNetworkData()?

Falls ersteres: Da gibt es einfachere Methoden. Beispielsweise mit einem simplen PHP-Script in Verbindung mit ReceiveHTTPFile():

PB:

Code: Alles auswählen

InitNetwork()
If ReceiveHTTPFile("http://tuebbentools.bplaced.net", GetTemporaryDirectory() + "ip.txt")
	If ReadFile(0, GetTemporaryDirectory() + "ip.txt")
		Debug "Deine IP: " + ReadString(0, #PB_File_IgnoreEOL)
		CloseFile(0)
		DeleteFile(GetTemporaryDirectory() + "ip.txt")
	Else
		Debug "!ReadFile()"
	EndIf
Else
	Debug "!ReceiveHTTPFile()"
EndIf
PHP (habe ich irgendwo geklaut):

Code: Alles auswählen

<?

function get_ip() { 
    $ip = "UNBEKANNT"; 
    if ($_SERVER["HTTP_CLIENT_IP"])  
        $ip = $_SERVER["HTTP_CLIENT_IP"]; 
    else if($_SERVER["HTTP_X_FORWARDED_FOR"])  
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
    else if($_SERVER["REMOTE_ADDR"])  
        $ip = $_SERVER["REMOTE_ADDR"]; 
    return $ip; 
}

echo get_ip();

?>
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: ReceiveNetworkData Problem

Beitrag von _JON_ »

Danke Peter,

aber ja Problem ist mehr das Ich nicht raffe warum ReceiveNetworkData keine Antwort gibt.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: ReceiveNetworkData Problem

Beitrag von NicTheQuick »

Vielleicht solltest du auch darauf warten, dass du ein Event bekommst, dass dir explizit sagt, dass Daten da sind, anstatt einfach drauf los zu empfangen. :wink:
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: ReceiveNetworkData Problem

Beitrag von _JON_ »

Naja, weder NetworkServerEvent() noch NetworkClientEvent() geben irgendein event zurück.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: ReceiveNetworkData Problem

Beitrag von NicTheQuick »

Na dann kommt wohl auch nichts zurück. :wink:
Benutzeravatar
HeX0R
Beiträge: 3042
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:

Re: ReceiveNetworkData Problem

Beitrag von HeX0R »

Wenn Du nur die öffentliche IP brauchst, reicht eigentlich dieser Einzeiler:

Code: Alles auswählen

Debug StringField(GetHTTPHeader("http://hex0rs.coderbu.de/Sonstiges/ShowMyIp12.php"), 2, Chr(34))
(o.k. InitNetwork() brauchst Du natürlich auch)
Antworten