(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 , ðernet_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