Avoir l'IP d'un client

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Avoir l'IP d'un client

Message 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.
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Et bien je voi que ça n'inspire personne...
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ben, si tu lances le serveur et le client sur le même PC, les deux adresses sont obligatoirement les mêmes.
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

GetRemoteIp.pb dans le dossier "CodeArchiv\Internet&Co\InternetConnect\"
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Merci bcp. Je vais pouvoir continuer à faire mumuse :-).
andrebernard
Messages : 58
Inscription : jeu. 22/déc./2005 11:23

Message 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
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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.
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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 :D

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 :P
Répondre