Page 1 sur 1
Avoir l'IP d'un client
Publié : sam. 23/oct./2004 12:10
par gansta93
Bonjour,
Je voudrais savoir comment par le networkclientevent() lorsqu'un client se connecte, je peux afficher son adresse IP réelle. J'ai fouillé dans le serveur BirdChat pour avoir ça, mais sois je prand pas ce qu'il faut, sois ben... je comprand pas

.
Je l'ai mis en procedure
Code : Tout sélectionner
Procedure ClientIP(ID)
ip.SOCKADDR_IN
len = SizeOf(SOCKADDR_IN)
resultat = getpeername_(ID,@ip,@len)
If resultat = 0
TheClientIP = ip\sin_addr
EndIf
ProcedureReturn TheClientIP
EndProcedure
Bon les variable c bauf comme nom mais bon... je veux juste savoir comment avoir la vraie IP... ce que je dois modifier là, ou alors n'importe quelle autre chose qui marcherait.
Merci d'avance.
Publié : sam. 23/oct./2004 13:38
par gansta93
Et bien je voi que ça n'inspire personne...
Publié : sam. 23/oct./2004 14:40
par Chris
Je t'ai trouvé ça sur CodeArchiv.
Tu le lances, et tu lances ensuite l'exemple NetworkClient livré avec PureBasic. Pense à modifier le n° de port de l'exemple. (port 8181)
Je sais pas si c'est ce que tu cherches, mais pour le moment, j'ai rien d'autre.
Code : Tout sélectionner
; English forum: http://purebasic.myforums.net/viewtopic.php?t=7197&highlight=
; Author: AngelSoul
; Date: 13. August 2003
; GetpeerName_ will get the remote IP.
; GetsockName_ will get the local IP it was connected on.
;-----------------------------------------
If InitNetwork()=0:MessageRequester("Error","Can't initialize the network",0):EndIf
If CreateNetworkServer(8181)=0:MessageRequester("Error","can't bind to port 8181",0):End:EndIf
Repeat
nn=NetworkServerEvent()
If nn=1 ;someone connected to your computer
cnid=NetworkClientID() ;get connection ID
Structure IPType
Reserved.w
Port.w
StructureUnion
IPLong.l
IP.b[4]
EndStructureUnion
Zeros.l[2]
EndStructure
Length.l = SizeOf(IPType)
result.l = GetpeerName_(cnid, @IP.IPType, @Length)
If result=0
remoteip$ = StrU(IP\IP[0],#Byte)+"."+StrU(IP\IP[1], #Byte)+"."
remoteip$ + StrU(IP\IP[2],#Byte)+"."+StrU(IP\IP[3], #Byte) ;+":"+StrU(IP\Port,#Word) ;remote port
Else
result = WSAGetLastError_()
EndIf
result.l = GetsockName_(cnid, @IP.IPType, @Length)
If result=0
localip$ = StrU(IP\IP[0],#Byte)+"."+StrU(IP\IP[1], #Byte)+"."
localip$ + StrU(IP\IP[2],#Byte)+"."+StrU(IP\IP[3], #Byte) ;+":"+StrU(IP\Port,#Word) ;local port
Else
result = WSAGetLastError_()
EndIf
Debug remoteip$+" connected to your computer ("+localip$+")"
EndIf
ForEver
Publié : sam. 23/oct./2004 14:50
par gansta93
Oui c'est ça qu'il me fallait merci...
Mais les deux adresses sont les mêmes. C'est quoi la différence entre les deux IP?
Publié : sam. 23/oct./2004 14:53
par Chris
Ben, si tu lances le serveur et le client sur le même PC, les deux adresses sont obligatoirement les mêmes.
Publié : sam. 23/oct./2004 14:59
par gansta93
Arf je vien de voir... quelle stupidité... l'IP locale... y a plus simple pour l'avoir celle-là

sinon j'ai compris c bon... merci encore.
Il s'appel comment le code? j'essais de le trouver dans CodeArchive. Maintenant j'irais fouiller là-bas avant de pauser des questions... j'y pense jamais.
En tt cas encore merci.
Publié : sam. 23/oct./2004 15:04
par Chris
GetRemoteIp.pb dans le dossier "CodeArchiv\Internet&Co\InternetConnect\"
Publié : sam. 23/oct./2004 15:19
par gansta93
Merci bcp. Je vais pouvoir continuer à faire mumuse

.
Publié : lun. 04/sept./2006 12:33
par andrebernard
Bonjour
Je viens d'essayer sur une machine du travail et rien ne remonte....
Est ce a cause du parefeu ou proxy ?????
Merci de m'expliquer si quelqu'un sait
Publié : lun. 04/sept./2006 12:51
par gansta93
andrebernard a écrit :Bonjour
Je viens d'essayer sur une machine du travail et rien ne remonte....
Est ce a cause du parefeu ou proxy ?????
Merci de m'expliquer si quelqu'un sait
Peut-être oui. Mais en tout cas maintenant cette fonction est supportée en natif.
Publié : lun. 11/sept./2006 18:08
par Fortix
Prends cet exemple! en fait ça va ouvrir une page en PHP et prélever ensuite l'adresse qui se trouve entre deux Balises
Code : Tout sélectionner
Procedure.s OpenURL(Url.s, OpenType.b)
isLoop.b=1
INET_RELOAD.l=$80000000
hInet.l=0: hURL.l=0: Bytes.l=0
Buffer.s= Space (2048 )
hInet = InternetOpen_ ( "PB@INET" , OpenType, #Null , #Null , 0)
hURL = InternetOpenUrl_ (hInet, Url, #Null , 0, INET_RELOAD, 0)
Repeat
Delay (1)
InternetReadFile_ (hURL, @Buffer, Len (Buffer), @Bytes)
If Bytes = 0
isLoop=0
Else
res.s = res + Left (Buffer, Bytes)
EndIf
Until isLoop=0
InternetCloseHandle_ (hURL)
InternetCloseHandle_ (hInet)
ProcedureReturn res
EndProcedure
URL$ = "http://www.hebergeur-allopass.com/ip.php"
HTML$ = OpenURL(URL$, 1)
debut = FindString (HTML$, "<body>IP:" ,1) + 9
fin = FindString (HTML$, "<br>NAV" ,1)
ip.s = Mid (HTML$,debut,(fin - debut))
Bonne chance
