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