Seite 1 von 2
GetClientIP() falsch?
Verfasst: 14.04.2020 13:05
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)
Re: GetClientIP() falsch?
Verfasst: 14.04.2020 13:10
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.
Re: GetClientIP() falsch?
Verfasst: 15.04.2020 07:24
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?
Re: GetClientIP() falsch?
Verfasst: 15.04.2020 13:56
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
Re: GetClientIP() falsch?
Verfasst: 15.04.2020 17:03
von mhs
Vielleicht wird eine IPv6 ausgegeben oder durch IPString falsch konvertiert?
Re: GetClientIP() falsch?
Verfasst: 16.04.2020 07:00
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?
Re: GetClientIP() falsch?
Verfasst: 16.04.2020 09:55
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 ?
Re: GetClientIP() falsch?
Verfasst: 16.04.2020 10:06
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.
Re: GetClientIP() falsch?
Verfasst: 16.04.2020 15:24
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?
Re: GetClientIP() falsch?
Verfasst: 16.04.2020 15:43
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.