Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

WAKE ON LAN


Information sur la source

Catégorie :Réseau & Internet Classé sous : wol, wakeonlan, reseau, wakeup, reveiller Niveau : Initié Date de création : 28/08/2006 Date de mise à jour : 30/08/2006 10:09:33 Vu / téléchargé: 13 155 / 1 922

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (26)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Reveillez les machines éteinte de votre réseau ?
C'est possible avec le Wake On LAN.

Toutes les cartes réseaux actuelles supporte normalement ce protocol qu'est le WOL. Il suffit d'activer dans le bios de votre machine la fonction "Wake On LAN" et d'exporter le paquet magique, ce paquet est de la forme 6 x "FF" suivi de 16 x l'adresse MAC de la machine à reveiller.

ex : (sniffé sur mon réseau)
-----------------------------
ff ff ff ff ff ff 00 40 e3 e9 c8 62 00 40 e3 e9 c8 62 00 40 e3 e9
c8 62 00 40 e3 e9 c8 62 00 40 e3 e9 c8 62 00 40 e3 e9 c8 62 00 40
e3 e9 c8 62 00 40 e3 e9 c8 62 00 40 e3 e9 c8 62 00 40 e3 e9 c8 62
00 40 e3 e9 c8 62 00 40 e3 e9 c8 62 00 40 e3 e9 c8 62 00 40 e3 e9
c8 62 00 40 e3 e9 c8 62 00 40 e3 e9 c8 62

Les cartes réseaux WOL, sont en permanantes écoutent, même quand votre pc est éteind.
Dès qu'une carte voit un paquet avec 16 fois son adresse MAC elle donne l'ordre à la carte mère de se réveiller tout comme si vous appuyez sur Power.

C'est un protocole de couche 2, et oui une carte reseau n'a pas d'IP, on travail ici uniquement avec les adresses MAC.
 

Conclusion

Veillez à bien activer le Wake On LAN dans le BIOS et d'avoir des cartes reseaux supportant ce protocole.

Notes et commentaires sont les bienvenues.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

28 août 2006 21:16:40 :
petite correction :-)
29 août 2006 09:16:23 :
Correction depassement de capacité sur un tableau
30 août 2006 10:09:33 :
Corrections apportées par fOxy <br> Ajout par adresse IP

Commentaires et avis

signaler à un administrateur
Commentaire de Also know as le 28/08/2006 21:12:25

Super ta source,

J'en avais déjà entendu parlais mais malehureusement je n'ai pas cette capacité à pouvoir réveiller mon PC par le WOL.

Mais sinon c'est assez utile pour réveiller un PC depuis n'importe quel PC et pas seulement de son réseau !

@+

signaler à un administrateur
Commentaire de elguevel le 28/08/2006 21:35:47

Je suis désolé mais j'vient de faire çà cet aprème, et j'mapperçoie que par rapport à ce que je fait d'habitude c'est un peu caca. Mais promis demain je remet çà d'aplomb et je corrigerai certaines erreurs qui plante le programme au bout d'un certain temps.

Also know as > Merci pour le com :-)

A+

signaler à un administrateur
Commentaire de f0xi le 28/08/2006 22:07:51 administrateur CS

@Elguevel : Trés interressant! mais je dois quand meme faire une mise en garde que je te suggere de mettre en entete de ta presentation.

En gros, activer les evenements PME dans le bios diminue enorment la securitée de la machine et du reseaux. Il est donc recommendé de ne les activer que si on est réellement sur de sa securité et qu'on dispose de tout le materiel et competences necessaires pour l'utilisation de ces evenements.

En effet, il n'est pas rare que les modems/routeurs/switchs balances ces evenements de temps en temps ce qui reveille tout les ordis du reseaux qui sont donc impossible a arreter (sauf power off de l'alim).
de plus il n'y a aucun control d'identitée de la machine qui tente de reveiller l'ordinateur, donc un pirate/virus peu utiliser ces evenements pour penetrer dans le systeme.

signaler à un administrateur
Commentaire de elguevel le 28/08/2006 22:14:32

J'en suis tout à fait conscient, et je ne parle pas ici des problèmes de sécurité. Car pour moi le Wake On Lan se limite à démarrer la machine, ce qui ne veut pas dire qu'on y aura necessairement accès par la suite.

Par contre un tel programme peut augmenter votre factures EDF :-)

Sinon demain je regarderai ce qui ne va pas dans mon code, mais à prioris plusieurs appels à Winsock plante mon application.

signaler à un administrateur
Commentaire de elguevel le 29/08/2006 11:55:16

Voila j'ai corrigé les problèmes existant, et après test çà fonctionne bien. Par contre si on réteind la machine tout de suite derrière, quand on relance un "Wake Up" celle-ci ne se rallume pas... a voir !

Dite moi si çà fonctionne chez vous !

signaler à un administrateur
Commentaire de Also know as le 29/08/2006 13:57:04

Par contre un tel programme peut augmenter votre factures EDF :-) ==> Je pense que tu sais très bien qu'un PC ne consomme pratiquement rien. Cela ne participe (mais participe quand même) que peu à la facture EDF de ta maison. Ton frigo utilise plus de ressource que lui ;-)

Mais bon celà n'a rien à voir avec la source, vraiment dommage que je puisse pas la tester cette source, et puis je pourrait même pas regrader la source si c'est poru hallucinner 3h devant sans rien comprendre :-D

signaler à un administrateur
Commentaire de elguevel le 29/08/2006 14:19:31

L'histoire de la facture EDF, c'est de l'humour .. mais tu sait la consomation dépend aussi de ta configuration, donc çà dépend (y'en à qui sont mieux équipé que des réfrigirateur) !

Sinon pourquoi ne peux tu pas tésté le WakeOnLAN chez toi ? Matos trop obsolète ?

signaler à un administrateur
Commentaire de Also know as le 29/08/2006 15:05:28

Exact !

Mon bios ne me permet pas de faire un WOL donc je ne peux pas tester cela correctement.

Et je n'ai pas d'autre PC à l'horizon pour tester cela.

Désolé

signaler à un administrateur
Commentaire de elguevel le 29/08/2006 15:12:54

Dommage, personne pourra me tester mon appli alors :-)

signaler à un administrateur
Commentaire de Also know as le 29/08/2006 15:32:25

Mais simais si ^^
Le problème c'est que les autres personnes ne se rendent pas compte de l'utilité de cet executable.
Moi j'enaurais bien l'utilité mais tant pis pour moi.

signaler à un administrateur
Commentaire de elguevel le 29/08/2006 15:51:48

Je sais pas si c'est vraiment utile, au pire je peux y coupler avec un serveur Web afin de pouvoir démarrer son PC de n'importe où sur internet ...

Mais ce qui est frustrant avec ce genre de source, c'est que çà peux très bien fonctionner chez moi et pas chez certains, et afin de voir ce qui va ou ne va pas... j'ai besoin de la communauté :-)

signaler à un administrateur
Commentaire de f0xi le 29/08/2006 18:03:39 administrateur CS

bah y'a un truc aussi, est-ce que ça fontionne sur reseaux routé ?

car le routeur a sa propre adresse mac et peu egalement offrir des services WOL parametrable (routeur qui coute cher).

le truc etant de savoir si le routeur ne contient pas un IDS agressif qui bloque les messages WOL, ou si il n'est pas paramétrés pour les bloquer.

Ensuite, toutes les CM ne fournisse pas les PME et certaines config n'ont pas été prevus pour, CAD le cable WOL n'est pas relié a la CM.

Mais ça reste toujours trés interressant d'un point de vus analyse de paquets et recuperation de la MAC.

Ensuite pour faire les tests, il faut deux machine reliées en reseaux et tester les fonctionnement avec diverse config (connexion par simple cable, switch, routeur ect...)

de plus, je crois qu'il y a un delai a respecter entre l'envois de deux evenements.
voir egalement les interractions entre les PME et la config BIOS en cas de coupure de courant (Stay off).

bref ... pas mal de tests et de boulot en perspectives.

signaler à un administrateur
Commentaire de f0xi le 29/08/2006 19:57:49 administrateur CS

tiens je t'ai refait quelques methodes performantes et clean pour manipuler les adresses mac et pour ameliorer celles de l'unitée Elg-WOL



type
  TMacAddress = array[0..5] of byte;
  TMagicPack  = array[0..101] of byte;

// Adresse mac vers chaine
function MacToStr(const MacAddress : TMacAddress; const Delimiter : char = '-') : string;
var   PResult : PChar;
      i : integer;
const Digits: array[0..15] of Char = '0123456789abcdef';
begin
  // une adresse MAC fait 17 caracteres de long
  SetLength(Result, 17);
  PResult := PChar(Result);

  for I := 0 to 5 do begin
      // on convertis l'octet en texte
      PResult[0] := Digits[MacAddress[I] shr 4];
      PResult[1] := Digits[MacAddress[I] and $F];
      // on ajoute un delimiteur ou non
      if i < 5 then begin
         PResult[2] := Delimiter;
         Inc(PResult,3);
      end else
         Inc(PResult,2);
  end;
end;

// Interne, supprime le caractere 'chartoremove' de la chaine 's'
function DeleteChar(const S : string; const CharToRemove : char) : string;
var  pR  : PChar;
     L,I : integer;
begin
  SetLength(Result, length(S));
  pR := PChar(Result);
  L  := 0;
  for i := 1 to Length(S) do
    if s[i] <> CharToRemove then begin
       pR[0] := s[i];
       Inc(pR);
       Inc(L);
    end;
  SetLength(Result,L);
end;

// transforme une chaine representant une adresse MAC (ff-aa-cc-dd-ee-56) vers un TMacAddress
procedure StrToMac(var MacAddress : TMacAddress; const MacStr : string; const Delimiter : char = '-');
var i : integer;
    s : string;
    b1,b2 : byte;
begin
  // on supprime le delimiteur
  s := DeleteChar(MacStr,Delimiter);
  // si la longeur est differente de 12 c'est qu'il y a un probleme
  if Length(S) <> 12 then
     exit;
  for i := 0 to 5 do begin
      // on recupere la valeur ordinal du caractere et on decremente pour obtenir une valeur
      // entre 0 et 15
      // shl 1 = *2 , un decalage est plus rapide qu'une multiplication
      b1 := Ord(s[(i shl 1) + 1]) - 48;
      b2 := Ord(s[(i shl 1) + 2]) - 48;
      if b1 > 15 then dec(b1,39);
      if b2 > 15 then dec(b2,39);

      MacAddress[i] := (b1 shl 4) + (b2 and $F);
  end;
end;


// convertis un MagicPack vers une liste de chaines
procedure MagicPackToStrings(const MagicPack : TMagicPack; Strings : TStrings);
var i  : integer;
    MA : TMacAddress;
begin
  Strings.BeginUpdate;
  for i := 0 to 16 do begin
      // on copie directement 6 octets de la memoire a partir de l'index i*6 dans MA
      Move(MagicPack[i*6],MA,6);
      // puis on utilise MacToStr pour convertir la chaine
      Strings.Add(MacToStr(MA,' '));
  end;
  Strings.EndUpdate;
end;


// cree un MagicPack a partir d'une adresse MAC (TMacAddress)
procedure CreateMagicPack(const MacAddress : TMacAddress; var MagicPack : TMagicPack);
var i : integer;
begin
  // on remplis les 6 premier octets avec $FF
  for i := 0 to 5 do
      MagicPack[i] := $FF;

  // on copie 16 fois les 6 octets de MacAddress dans MagicPack a l'index i*6
  for i := 1 to 16 do
      Move(MacAddress, MagicPack[i*6],6);
end;

signaler à un administrateur
Commentaire de f0xi le 29/08/2006 20:11:43 administrateur CS

ce qui reduit la procedure GoWOL


procedure GoWOL(const sAdresseMac : string );
var
  StructWSA : WSAData;
  Sckt      : Integer;
Sckaddrin : sockaddr_in;
  MagicPack : TMagicPack;
  MagicLen  : integer;
  ArrayMac  : TMacAddress;
  OptionVal : Integer;
begin
  OptionVal := 1;
  FillChar( sckaddrin, SizeOf( sckaddrin ), #0 );

  StrToMac(ArrayMac,sAdresseMac);
  CreateMagicPack(ArrayMac,MagicPack);
  MagicLen := 102;

  try
   if ( WSAStartup( MAKEWORD(2, 2), StructWSA ) = 0 ) then begin

      Sckt := Socket( AF_INET, SOCK_DGRAM, IPPROTO_IP );

   if ( Sckt <> INVALID_SOCKET ) then begin

   Sckaddrin.sin_family      := AF_INET;
   Sckaddrin.sin_addr.s_addr := Longint( INADDR_BROADCAST );
        Sckaddrin.sin_port        := htons( 666 );

        setsockopt( Sckt, SOL_SOCKET, SO_BROADCAST, PChar(@OptionVal), SizeOf(OptionVal) );

   if ( connect( Sckt, Sckaddrin, 16 ) < 0 ) then begin
           MessageBoxA( 0, PChar('Impossible de se connecter'), PChar('Stop'), MB_ICONWARNING );
           Exit;
   end;

   sendto( Sckt, MagicPack, MagicLen, 0, Sckaddrin, SizeOf(Sckaddrin) );

   closesocket( Sckt );
   end else
        MessageBoxA( 0, PChar('Impossible de créer la socket'), PChar('Stop'), MB_ICONWARNING );
    end else
        MessageBoxA( 0, PChar('Impossible d''initialiser la socket'), PChar('Stop'), MB_ICONWARNING );
  finally
    WSACleanup;
  end;
end;

signaler à un administrateur
Commentaire de f0xi le 29/08/2006 20:34:52 administrateur CS

passont a ElgRegistre

quelques corrections a faire, il faut toujours penser a la souplesse et ne jamais utiliser la classe qui contient l'objet visé par une methode (Listbox > TStrings)

on declare donc ElgRegistre de cette façon :

// renvois true sir l'action c'est bien deroulée sinon false
function EcritListe(Strings : TStrings) : boolean;
function LireListe (Strings : TStrings) : boolean;

implementation

const
  MORPHEE_LIST_KEY    = 'Software\Elguevel\Morphee\';

function EcritListe(Strings : TStrings) : boolean;
var
    I : Integer;
begin
  result := false;
  with TRegistry.Create do begin
    try
       RootKey := HKEY_CURRENT_USER;

       // plus rapide, on efface directement la clef
       if KeyExists(MORPHEE_LIST_KEY) then
          DeleteKey(MORPHEE_LIST_KEY);

       // on precise bien True pour CanCreate
       // on verifie toujours que la clef est bien ouverte pour faire les manips.
       if OpenKey(MORPHEE_LIST_KEY, True) then begin
          for I := 0 to Strings.Count-1 do
              WriteString(IntToStr(I), Strings.Strings[I]);
          // on declare CloseKey ici bien qu'il n'y ai pas d'erreur de le mettre
          // dans le finally, mais c'est inutile en cas d'erreur.
          CloseKey;
          result := true;
       end;
    finally
      Free;
    end;
  end;
end;

function LireListe(Strings : TStrings) : boolean;
var
    I : Integer;
begin
  result := false;
  with TRegistry.Create do begin
    try
       RootKey := HKEY_CURRENT_USER;
       // on ne crée pas la clef ici, si elle est vide ça ne sert a rien d'aller plus loin.
       if OpenKey(MORPHEE_LIST_KEY, false) then begin
          Strings.BeginUpdate;
          Strings.Clear;
          // on utilise directement Strings, pas besoin d'une liste temporaire
          GetValueNames( Strings );
          Strings.EndUpdate;
          CloseKey;
          result := true;
       end;
    finally
      Free;
    end;
  end;
end;



on modifie en consequence dans l'unité Main :

LireListe( ListMAC.Items );
EcritListe( ListMAC.Items );

on peu bien sur utiliser le retour des fonctions pour transmettre des messages de succés/echec a l'utilisateur.

signaler à un administrateur
Commentaire de 365tib le 29/08/2006 23:55:21

Vous allez dire que je suis nul...

mais qu'est qui alimente la carte réseau???
Et est-que sa marche aussi avec les dongles wifi??
Tu dit qu'il faut modifier le BIOS??

si tu peut m'éclairé...

merci

signaler à un administrateur
Commentaire de elguevel le 30/08/2006 08:07:40

Un grand MERCI à fOxy : Tu as transformé mes fonctions toutes pourris en quelque chose de potable, je vais allé mettre çà a jour (et faire quelques modif au passage pour rendre le programme plus pratique).

365tib > Pour ce qui est du WiFi j'en sait rien, c'est une technologie à laquel je ne suis pas encore passé et qui ne m'interesse pas plus que çà. Et la carte réseau est normalement alimenté par la carte mère, mais là aussi coté HardWare je ne peux pas te répondre avec certitude ...  

signaler à un administrateur
Commentaire de elguevel le 30/08/2006 08:12:04

Ah oui et puis pour le BIOS, si ta carte mère supporte biensure, il faut activer le Wake On LAN. Dans le BIOS il y à un menu alimentation,  tu doit avoir en toute lette Wake On LAN, ba tu y active (Enabled).

signaler à un administrateur
Commentaire de elguevel le 30/08/2006 10:12:38

Voila fOxy j'ai mis en place les modifications que tu m'as faite, vraiment sympa :-)

Par contre tu t'es planté sur un truc, c'est pour recharger la liste via le registre.
Tu m'as corrigé en me donnant çà :

// on utilise directement Strings, pas besoin d'une liste temporaire
GetValueNames( Strings );

Mais en faite non, car dans ce cas je récupère les clés (0, 1, 2..) et non les valeurs (adresse MAC).

J'ai donc laissé mon système de liste temporaire (TStringList).

Aller Merci Bcp !!!

signaler à un administrateur
Commentaire de f0xi le 30/08/2006 22:14:37 administrateur CS

Ah oui, au temps pour moi pour le registre, la fatigue et le pas de tests surrement ^^

par contre un truc qui n'a rien a voir, tu ecrit :

Par :
LEVEUGLE Damien
fOxy [ http://www.delphifr.com/auteurdetail.aspx?ID=360948 ]

on vas croire que c'est toi f0xi :)

faut ecrire :

auteur principal : Leveugle Damien - Elguevel - www.delphifr.com
Co-auteur & code additionnel : f0xi - www.delphifr.com

signaler à un administrateur
Commentaire de elguevel le 30/08/2006 23:02:10

Arf merde... j'enchaine les boulettes en ce moment, mais j'ai mis ton nom en remerciement dans la fenetre de Crédit. Je corrigerai çà demain.

Sinon merci pour avoir pris le temps d'optimiser mes fonctions, je les trouvent nettement plus jolie (surtout tout tes algos mathématiques auquelles je n'accorde jamais assez d'importance). Et tu es mille fois excusé quant au "GetValueNames".

A chaque nouveau developpement je retiens néanmoins tes conseil ; par exemple ici tu remarquera que j'ai utilisé "Close" et non "Application.Terminate" comme tu me l'avais suggéré.

Sinon comme d'habitude je m'apperçois que les sources réseaux n'interesse pas grand monde, pourtant c'est passionant le réseau non :-) ?

Allé hop, je vais commencer à me pencher sur un autre code ...

signaler à un administrateur
Commentaire de Francky23012301 le 31/08/2006 00:29:23

Salut Elguevel,

"Sinon comme d'habitude je m'apperçois que les sources réseaux n'interesse pas grand monde, pourtant c'est passionant le réseau non :-) ?" si si mais on en reste bouche bez

Je n'ai pas testé ton code : Arfff mon pc ne le permet pas.

Par contre ca m'a permis de m'interesser à un truc que je connaissais tres peu : Merci Elguevel.

Coté code : Nickel sauf un petit truc : il y a des fonctions assez spéciales (car c'est du réseau ^^) qui mériteraient peut etre d'etre commentées.

Allez un bon 9/10 pour ton taff ;).

signaler à un administrateur
Commentaire de elguevel le 31/08/2006 08:14:31

Merci Francky23012301, toujours là pour me soutenir :-)

Sinon je reposterai un nouveau code, je sais pas quand mais j'améliorerai la lisibilité.

Par contre je suis surpris que tout le monde me dise "mon pc ne le permet pas"... c'est pourtant pas si récent que çà ?

signaler à un administrateur
Commentaire de Pierre42 le 07/11/2006 14:48:18

Bonjour,

J'ai testé le systeme sur mon reseaux de 20 machines, ca marche nickel a une exeption pres lorsque je fait un copié coller de la procedure SendARP dans mon programme j'ai un message d'erreur lors de la recompilation

Felicitation

signaler à un administrateur
Commentaire de elguevel le 07/11/2006 15:23:56

La fonction est la suivante :

function  SendARP( const DestIP: DWORD; const SrcIP: DWORD; const pMacAddr: PULONG; const PhyAddrLen: PULONG ) : DWORD; stdcall; external 'IPHLPAPI.DLL';

Elle permet de remonter des informations (adresse IP) en fonction de l'adresse MAC, en envoyant tout simplement une requete ARP.

La fonction déconne effectivement si l'adresse MAC n'existe pas sur le reseau, sinon comme çà je ne pourrai pas vous dire. Quel erreur avez vous exactement ?

PS : Sinon ce programme est la démo CodeSource, l'application complète se trouve sur Telecharger.com - Logiciel : "Morphee"

Merci

signaler à un administrateur
Commentaire de botelec le 07/03/2009 19:15:29 9/10

Bonjour,

Un an et demi plus tard, je peux confirmer que le réveil d'une machine marche très bien et ce, même derrière un routeur.

Merci donc à tous pour cette source bien utile !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Windows XP et acces simultané en reseau (DELPHI et PARADOX) [ par Jaco ] Salut tout le mondeVoila, j'ai une application (Dephi , paradox) qui tourne en reseau sans pb avec win98 et MEen installant le windows XP sur une mach HELP MY:Echangeur de fichier par reseau [ par g0belin ] Ben voila j'aimerai faire un progs qui me permette de transfere un executable vers un autres pc tous en utilisant un port que l'ont peu definir.Pour u transfert de fichier par le reseau [ par redfaction ] bon jaimerai faire passer plusieurs fichier par reseau. j'ai essaye avec sendbuf mais je suis oblige de mettre des sleep entre (sinon ca plante) ce qu [Stream][Reseau] Transmettre une image par stream [ par Cyrille2 ] Bonjour, dans le cadre d'un chat un peu avancé, je souhaite envoyer une image par TWinSocketStream (TServerSocket en Thread Bloquants), plutot simple Savoir quand un poste d'un reseau local ouvre une session [ par shaoran ] BonjourJe voudrais savoir si lorsque qqn ouvre une session sur un poste d'un reseau local NT, un message windows est il envoyé sur le reseau ?Mon but detection ouverture session NT sur reseau local [ par shaoran ] BonjourJe voudrais savoir si lorsque qqn ouvre une session sur un poste d'un reseau local NT, un message windows est il envoyé sur le reseau ?Mon but protection de repertoir (dossier) pas en reseau [ par skiso ] sq en peut proteger un repertoir si oui comment? BASE DE DONNEE SOUS RESEAU [ par borhane ] JE VEUX FAIRE UN PROGRAMME DE GESTION D'un cybercafe en utilisant une base de donné cleint serveur désactiver et activer la connexion reseau [ par oranais ] Comment faire pour désactiver et activer la connexion au reseau local sous windows 2000. Lister les ordinateurs en reseau... [ par thesnakeplisken ] Bonjour. J'aimerai savoir comment fait on pour obtenir la liste des ordinateurs qui sont connectes au reseau sous windows Xp afin de pourvoir acceder


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.