I. Protocole TBX
- I.1 Connection du serveur de chat au tracker
- I.1.1 script Perl
#!/usr/bin/perl $ip = $ENV{'REMOTE_ADDR'}; $fichier = "/local/home/truc/CBX/id"; &add_ip; #ouvre fichier, convertit et écrit sub add_ip { open (SERVER,">$fichier") || die "Can't Open $fichier: $!\n"; print SERVER "ip2long($ip)"; close (SERVER); #envoie response au serveur chat #print "Content-type: text/plain\n\n"; print "Your IP was written as current"; }
- I.1.2 script PHP
<?php // obtient REMOTE_ADDR $REMOTE_ADDR = "1.1.128.54"; //echo $_ENV["REMOTE_ADDR"]; // écrase le fichier. $fic = 'id'; if (is_writable($fic)) { if ($!handle = fopen($fic, 'w')) { echo "Impossible d'ouvrir le fichier!\n"; exit; } if (fwrite($handle, ip2long ($REMOTE_ADDR)) === FALSE) { echo "Impossible d'écrire dans le fichier!\n"; exit; } echo "Your IP was written as current\n"; fclose($handle); } else {echo "Le fichier n'est pas accessible en écriture!\n";} ?>
- I.1.3 CGI compilé en C
unsigned int ip2long(char *s) { struct sockaddr_in n; #ifndef WIN32 inet_aton(s,&n.sin_addr); return ntohl(n.sin_addr.s_addr); #else return ntohl(inet_addr(s)); #endif } int main() { FILE *f; fprintf (f, "%u",ip2long (getenv("REMOTE_ADDR"))); //signale au serveur chat si l' écriture a réussi printf("Your IP was written as current"); return 0; }
- I.1.4 CGI compilé en VB6
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Function ip2long(ByVal IPAddr As String) As Long Dim V As Variant V = Split(IPAddr, ".") Dim I As Long, B As Byte B = V(0): CopyMemory ByVal VarPtr(I) + 3, ByVal VarPtr(B), 1 B = V(1): CopyMemory ByVal VarPtr(I) + 2, ByVal VarPtr(B), 1 B = V(2): CopyMemory ByVal VarPtr(I) + 1, ByVal VarPtr(B), 1 B = V(3): CopyMemory ByVal VarPtr(I) + 0, ByVal VarPtr(B), 1 ip2long = I End Function Sub Main() Open App.Path & "\test.txt" for Output As #1 print #1, ip2long(remote_addr) Close #1 End Sub
-
Lorsque le serveur de chat est lancé, il doit signaler au tracker son IP
pour que celui-ci puisse plus tard l' indiquer aux clients afin que les
clients obtiennent l' IP du serveur de chat pour s'y connecter.
fig.1 Le serveur de chat indique au Tracker son IP
Pour celà le tracker met à sa disposition une ressource CGI:
/CBX/addcurrent
Où addcurrent est une ressource CGI qui obtient l' IP publique du serveur de chat, et la stocke. Il peut la stocker dans une variable d' environnement, ou dans un fichier.
L' IP publique du serveur est stockée dans la variable d' environnement REMOTE_ADDR. Après récupération elle peut être convertie au format long.
Important: stocker dans le fichier l' IP et rien que l' IP, pas de retour charriot.
Après stockage de la variable, le tracker doit envoyer un string de confirmation de la forme suivante:
Your IP was written as current
L' IP est ensuite redistribuée à tout client se connectant au tracker comme indiqué dans la partie 2.