GetClientIP() falsch?

Für allgemeine Fragen zur Programmierung mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

GetClientIP() falsch?

Beitrag von stevie1401 »

Ich habe gerade festgestell, dass GetClientIP() bei mir vollkommen falsche IPs ermittelt (oder anzeigt)

i=GetClientIP(aid)
debug=IPString(i)

Ist das bei euch auch so?

// Edit: Bis auf Weiteres aus dem Bug-Forum in das Allgemein-Forum verschoben. @stevie1401: Bitte die Forumsregeln beachten. (Kiffi)
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: GetClientIP() falsch?

Beitrag von mk-soft »

Wann rufst du den GetClientIP auf?
Ist nur gültig wenn sich sich ein Client mit dem Server verbindet oder der Server Daten empfangen hat.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: GetClientIP() falsch?

Beitrag von stevie1401 »

Ganz genau dann. Ich speichere sogar die ID, da ich ja ständig an die Clients sende. Aber IPString(eineiD)) gibt einfach nur Unsinn aus.
Bei dir nicht?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: GetClientIP() falsch?

Beitrag von mk-soft »

Funktioniert so wie es soll...

Code: Alles auswählen

If InitNetwork() = 0
  Debug "Error: Can't initialize the network !"
  End
EndIf

Port = 6832
*Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port)
  
  Debug "PureBasic - Server: Server created (Port "+Str(Port)+")."
  
  Repeat
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      
      ClientID = EventClient()
      
      Select SEvent
          
        Case #PB_NetworkEvent_Connect
          ip = GetClientIP(ClientID)
          Debug "Connected: IP " + IPString(ip)
        Case #PB_NetworkEvent_Data
          ip = GetClientIP(ClientID)
          Debug "Data: IP " + IPString(ip)
          len = ReceiveNetworkData(ClientID, *Buffer, 1000)
          If Len > 0
            Debug PeekS(*buffer, -1, #PB_UTF8)
            ;SendNetworkData(ClientID, *Buffer, len)
          EndIf
          
        Case #PB_NetworkEvent_Disconnect
          Debug "Disconnected: CLientID " + ClientID
          Quit = 1
          
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  Debug "PureBasic - Server: Click To quit the server."
  
  CloseNetworkServer(0)
Else
  Debug "Error: Can't create the server (port in use ?)."
EndIf

End
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: GetClientIP() falsch?

Beitrag von mhs »

Vielleicht wird eine IPv6 ausgegeben oder durch IPString falsch konvertiert?
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: GetClientIP() falsch?

Beitrag von stevie1401 »

Ich benutze einen Websocketserver auf Basis von Dadido3.
https://www.purebasic.fr/german/viewto ... 8#p355088

Egal wo ich da GetClientIP() und IPString() einsetze, ich bekomme immer nur Fakeadressen.
Vielleicht weil die Netzwerkabfragen in Threads sind?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: GetClientIP() falsch?

Beitrag von Bisonte »

stevie1401 hat geschrieben:ich bekomme immer nur Fakeadressen.
Beispiele der Adressen ?
Sind die Adressen so, das ein bestimmter Client immer die gleiche "FakeAdresse" hat ?
Kannst du den Client mit der "FakeAdresse" anpingen ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
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:

Re: GetClientIP() falsch?

Beitrag von HeX0R »

Oh Mann...
Hast Du den Code von Dadido3 einfach nur übernommen, oder auch verstanden?
Der *Client, den Du per CallBack bekommst, ist NICHT die ClientID!
Mit PeekI(*Client) solltest Du die ID bekommen.

Unglaublich eigentlich, dass man nicht mal erwähnt was man nutzt, aber gleich mal auf einen Bug in PB schliesst.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: GetClientIP() falsch?

Beitrag von stevie1401 »

ich habe den Code nicht einmal im Ansatz verstanden. Bin halt kein gelernter Programmierer, sondern nur Hobby-Basic-Progger.
Geht es bitte etwas freundlicher, HeXOR?
Wenn dich meine (naiven) Fragen stören, dann ignoriere sie doch einfach.
Aber wo wir schon einmal dabei sind:
Wenn *Client NICHT die ClientID ist, warum kann ich dann dennoch an *Client erfolgreich senden?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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: GetClientIP() falsch?

Beitrag von NicTheQuick »

Ich kenne Dadido3s Code nicht nicht, aber nutzt du bei dem überhaupt das PB-eigene SendNetworkData()? Ich glaube nicht. Das funktioniert doch mit Frames und sowas, wenn ich da kurz drüber schaue. Wenn er Daten sendet, macht er das so:

Code: Alles auswählen

        Result = SendNetworkData(*Client\ID, *Client\TX_Frame()\Data + *Client\TX_Frame()\RxTx_Pos, Transmit_Size)
Das heißt *Client\ID ist die ClientID, mit der PB etwas anfangen kann. Die musst du dann nutzen.
Antworten