(Courriels de diversion: <arlequins@consignions-vivoteriez.com> <deparent@desactive-siegerions.com> <adjugerent@nom-desservit.com> <chenal@furtivement-reveree.com> <vouais@flambante-rebâtiraient.com> <bêcherent@ecrie-debattirent.com> <monnayerons@tranquilliseraient-exhumes.com> <demangeaisons@relaxe-disperseraient.com> <admettront@pressentions-ajustant.com> <deplafonneront@dimensionnee-fragmenterais.com> )


Pascal Hambourg a écrit :

> jeanmichel.123@free.fr a écrit :>   
>> Comment faire pour détecter si un logiciel est connecté à une machine réseau
>> dont le numéro IPv4 ou ethernet est connu?
>>     
>
> netstat
>   
Merci. Sous debian, netstat se contente d'aller lire divers fichiers
dont /proc/net/tcp et /proc/net/tcp6.
Je tenterai donc de suivre une méthode similaire.

Pour l'envoi du paquet magique servant à la fonctionnalité wake on lan,
j'ai réussi à le faire fonctionner en C, mais seulement en unicast.
sendto me renvoi -1, lorsque je tente le broadcast! Quelques subtilités
liées aux socket en C...! Dommage.

includes non fournis, car non triés:

int buffalo_my_wake(char*ethernet, char*ipv4_addr)
{
  int s = socket(AF_INET, SOCK_DGRAM, 0);
  if (!s)
  {
    printf ("Cannot open socket\n");

  }
  typedef char ethernet_address[6] ;
  ethernet_address trame[17];
  char * string_dest_ipv4 = ipv4_addr; //"192.168.1.1";

  int len = 17*6;
  int i;
  //construction de la trame
  ethernet_address * ptr = &(trame[0]);
  ethernet_address ethernet_broadcast = {  0xff, 0xff, 0xff, 0xff, 0xff,
0xff};
  memcpy (ptr , &ethernet_broadcast, 6);
  ptr++;
  ethernet_address cible;
  get_dest_addr( ethernet, & cible);
  for (i=0; i<16; i++)
  {
    memcpy ( ptr , cible, 6);
    ptr++;
  }

  struct sockaddr_in broadcast_to ;
  bzero(&broadcast_to ,sizeof(broadcast_to ));
  broadcast_to .sin_family = AF_INET;
  broadcast_to .sin_port = htons(9);

  broadcast_to .sin_addr.s_addr = inet_addr(string_dest_ipv4);
  //broadcast_to .sin_addr.s_addr = htonl(INADDR_BROADCAST);

  int x = sendto (s, trame, len, 0, (struct sockaddr*) &broadcast_to,
sizeof ( broadcast_to) );
  printf ( "sendto returned: %d\n", x);
  close(s);
}

int main (int argc, char *argv[])
{
  char * ethernet = argv[1];
  char * ipv4_addr = argv[2];

  printf ("my broadcast wake\n");
  buffalo_my_wake( ethernet, ipv4_addr );
  sleep(15);
  buffalo_my_wake( ethernet, ipv4_addr );
}



-----------------------------------------------------------------
Les listes de diffusion du CULTe - Pour une informatique libre
http://www.CULTe.org/listes/
Pour se desabonner:
mailto:linux-31-unsubscribe@CULTe.org?subject=Cliquez_sur_ENVOYER