Pages : 1
#1 Le 02/07/2010, à 11:43
- Vermouth
Broadcast UDP sur le réseau
Bonjour.
Je suis en train de faire un petit programme dont le but est de localisé (IP) un hote sur le réseau. Ça marche avec un système client-serveur chaque hote voulant être localisé devant faire tourner le serveur.
Les programmes client (nommé flh) et serveur (flhd) fonctionne très bien en local. Mais dès que j'essaie de localisé un autre hote de mon réseau ça ne fonctionne pas .
Donc voici les sources:
flh.c:
/*########################
# Client FLH (Find Local Host) simple #
#########################*/
#include "flh.h"
char* option_h = "-h";
char* help = "Usage: flh [OPTION]\nRecherche un hote sur le réseaux local suivant le protocole FLH.\n\nOption:\n\t-h\tAffiche cette aide.\n\nCode d'erreur:\n\t1\tErreur de création de la socjet.\n\t2\tErreur de nommage de la soccket.\n\t3\tErreur de réception de packet.\n\t4\tErreur de fork.\n\t5\tErreur de récupération du nom d'hote.\n\t6\tErreur d'envoie de message.\n";
int main(int argc, char* argv[]){
int h = 0;
if(argc > 1){
if(strcmp(argv[1], option_h) == 0) h = 1;
}
else{
h = 1;
}
if(h){
printf("%s", help);
exit(0);
}
else{
struct sockaddr_in addr;
if(searchHost(argv[1], &addr)){
printf("%s\n", inet_ntoa(addr.sin_addr));
}
else{
printf("0.0.0.0\n");
}
}
}
flhd.c:
/*####################
# Démon FLH (Find Local Host) #
#####################*/
#include "flh.h"
char* option_n = "-n";
char* option_h = "-h";
char* help = "Usage: flhd [OPTION]\nLance le démon FLH.\nNe passer qu'une option à la fois.\n\nOption:\n\t-h\tAffiche cette aide.\n\t-n\tNe fork pas.\n\nCode d'erreur:\n\t1\tErreur de création de la socjet.\n\t2\tErreur de nommage de la soccket.\n\t3\tErreur de réception de packet.\n\t4\tErreur de fork.\n\t5\tErreur de récupération du nom d'hote.\n\t6\tErreur d'envoie de message.\n";
int main(int argc, char* argv[]){
int n = 0;
if(argc > 1){
if(strcmp(argv[1], option_n) == 0) n = 1;
else if(strcmp(argv[1], option_h) == 0){
printf("%s", help);
exit(0);
}
}
if(!n){
pid_t pid = fork();
if(pid == -1){
perror("fork()");
exit(ERR_FORK);
}
else if(pid > 0){
printf("PID fork: %d\n", pid);
exit(0);
}
}
char hostname[FLH_MAX_HOSTLEN];
if(gethostname(hostname, FLH_MAX_HOSTLEN) == -1){
perror("gethostname()");
exit(ERR_HOSTNAME);
}
int sock;
struct sockaddr_in s_addr;//Server infos
/* ### */
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("socket()");
exit(ERR_SOCK);
}
s_addr.sin_family = AF_INET;
s_addr.sin_addr.s_addr = INADDR_ANY;
s_addr.sin_port = htons(FLH_SERVER_PORT);
memset(&(s_addr.sin_zero), '\0', 8);
if (bind(sock, (struct sockaddr *)&s_addr,
sizeof(struct sockaddr)) == -1) {
perror("bind()");
exit(ERR_BIND);
}
socklen_t addr_len = sizeof(struct sockaddr);
struct sockaddr_in c_addr;//Client infos
char* ip = NULL;
char buffer[FLH_MAX_MSGLEN];
int nob = 0;
printf("flhd running on %s...\n", hostname);
while(1){
if ((nob = recvfrom(sock, buffer, FLH_MAX_MSGLEN-1 , 0, (struct sockaddr *)&c_addr, &addr_len)) == -1) {
perror("recvfrom()");
exit(ERR_RECV);
}
else if(strncmp(buffer, WHERE_ARE, WHERE_ARE_LEN) == 0 || nob < FLH_MAX_MSGLEN+2){
ip = inet_ntoa(c_addr.sin_addr);
char tmp[FLH_MAX_MSGLEN+1];
int offset = WHERE_ARE_LEN+1;
strncpy(tmp, buffer+offset, nob-offset);
tmp[nob-offset] = '\0';
printf("%s is searching %s", ip, tmp);
sprintf(tmp, "%s",IM_HERE);
if(sendMessage(FLH_CLIENT_PORT, c_addr.sin_addr.s_addr, tmp)) printf(", response sent\n");
else printf(", error sendin response\n");
}
else{
char tmp[FLH_MAX_MSGLEN+1];
strncpy(tmp, buffer, nob);
tmp[nob] = '\0';
printf("Receive unknow message: %s\n", tmp);
}
}
close(sock);//Pour la forme
return 0;
}
et flh.h:
/*############################
# Fonction utile pour FLH (Find Local Host) #
#############################
# Définition du protocole FLH
# (Find Local Host)
#
# Le démon écoute en UDP le port 8862
# (sur l'adresse de broadcast) et attend la
# réception d'un packet contenant:
# "WHERE ARE YOU X"
# où X est l'hote dont on cherche l'IP.
# Une fois ce message reçut, il répond
# à l'expéditeur avec le message (UDP):
# "IM HERE"
# il envoie se message sur le port 8864 que
# le client doit écouté à ce moment là.
#
# Un client doit donc envoyer le message
# attendu par le serveur (en broadcast) en y
# insérant le nom de l'hote qu'il recherche.
# Puis il écoute en UDP le port 8864 et attend
# une réponse.
#
# Le serveur ne répond qu'une seul fois.
# Donc si le client ne reçoit pas de message,
# il doit refaire une demande.
############################*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
//###
#define ERR_SOCK 1
#define ERR_BIND 2
#define ERR_RECV 3
#define ERR_FORK 4
#define ERR_HOSTNAME 5
#define ERR_SENDTO 6
#define FLH_SERVER_PORT 8862
#define FLH_CLIENT_PORT 8864
#define FLH_MAX_MSGLEN 256
#define FLH_MAX_HOSTLEN 200
const char* WHERE_ARE = "WHERE ARE YOU";
const int WHERE_ARE_LEN = 13;
const char* IM_HERE = "I AM HERE";
const int IM_HERE_LEN = 9;
// /!\ Peu bloqué indéfiniment si aucun message reçu /!\
//Reçoit un message UDP
char* receiveMessage(int port, int usec, struct sockaddr_in* addr){
int sock;
struct sockaddr_in s_addr;
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("socket()");
return NULL;
}
s_addr.sin_family = AF_INET;
s_addr.sin_addr.s_addr = INADDR_ANY;
s_addr.sin_port = htons(port);
memset(&(s_addr.sin_zero), '\0', 8);
if (bind(sock, (struct sockaddr *)&s_addr,
sizeof(struct sockaddr)) == -1) {
perror("bind()");
return NULL;
}
socklen_t addr_len = sizeof(struct sockaddr);
struct sockaddr_in c_addr;
char* ip = NULL;
char buffer[FLH_MAX_MSGLEN];
int nob = 0;
if ((nob = recvfrom(sock, buffer, FLH_MAX_MSGLEN-1 , 0, (struct sockaddr *)&c_addr, &addr_len)) == -1) {
perror("recvfrom()");
return NULL;
}
close(sock);
*addr = c_addr;
char* tmp = malloc(nob+sizeof(char));
strncpy(tmp, buffer, nob);
tmp[nob+1] = '\0';
return tmp;
}
//Envoie un message en UDP
int sendMessage(int port, in_addr_t addr, char* message){
int sock;
struct sockaddr_in s_addr;
if ((sock=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1){
perror("socket()");
return 0;
}
memset((char *) &s_addr, 0, sizeof(s_addr));
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(port);
s_addr.sin_addr.s_addr = addr;
int nob = strlen(message);
if(nob > FLH_MAX_MSGLEN){
return 0;
}
if (sendto(sock, message, nob, 0, (struct sockaddr *)&s_addr, sizeof(s_addr)) == -1){
return 0;
}
else{
return 1;
}
close(sock);
}
struct sockaddr_in* G_addr;
int G_found= 0;
//Thread de recherche
void* searchThread(void *data){
char* tmp = receiveMessage(FLH_CLIENT_PORT, 2000000, G_addr);
if(tmp != NULL && strcmp(tmp, IM_HERE) == 0){
G_found = 1;
}
return NULL;
}
//Cherhche un hote, 3 tentatives max, 6 secondes max
int searchHost(char* hostname, struct sockaddr_in* addr){
G_addr = addr;
char buffer[FLH_MAX_MSGLEN];
int nob = sprintf(buffer, "%s %s", WHERE_ARE, hostname);
pthread_t st;
pthread_create(&st, NULL, searchThread, NULL);
sendMessage(FLH_SERVER_PORT, INADDR_ANY, buffer);
sleep(1);
if(G_found){
*addr = *G_addr;
return 1;
}
sendMessage(FLH_SERVER_PORT, INADDR_ANY, buffer);
sleep(2);
if(G_found){
*addr = *G_addr;
return 1;
}
sendMessage(FLH_SERVER_PORT, INADDR_ANY, buffer);
sleep(3);
pthread_kill(st, 0);
if(G_found){
*addr = *G_addr;
return 1;
}
else{
return 0;
}
}
Pour le fonctionnement, tout est expliqué au début du fichier flh.h.
Le problème est que je n'arrive pas à envoyé les packets sur l'adresse de broadcast.
Pour envoyé un message j'utilise sendMessage:
sendMessage(FLH_SERVER_PORT, INADDR_ANY, buffer);
Mais que je mette INADDR_ANY, INADDR_BROADCAST ou inet_addr("192.168.1.255") je ne voit rien transité sur mon interface réseau (je sniff mon trafic avec Wireshark).
Si j'utilise une adresse précise cela fonctionne.
Une idée du problème ?
J'ai join une archive contenant les sources et un makefile.
Merci à vous !
PS:faite pas attention au warning, ça passe !
Android !
\_/°<
coin coin...
Hors ligne
#2 Le 02/07/2010, à 15:42
- telliam
Re : Broadcast UDP sur le réseau
as tu le meme probleme si tu le lances en root?
as tu des iptables de configurer ?
as tu testé le code retour de sendMessage?
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#3 Le 02/07/2010, à 16:42
- Vermouth
Re : Broadcast UDP sur le réseau
Alors !
En root ça ne change rien .
Pour le détail de iptable:
:~$ sudo iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ufw-before-logging-input all -- anywhere anywhere
ufw-before-input all -- anywhere anywhere
ufw-after-input all -- anywhere anywhere
ufw-after-logging-input all -- anywhere anywhere
ufw-reject-input all -- anywhere anywhere
ufw-track-input all -- anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
ufw-before-logging-forward all -- anywhere anywhere
ufw-before-forward all -- anywhere anywhere
ufw-after-forward all -- anywhere anywhere
ufw-after-logging-forward all -- anywhere anywhere
ufw-reject-forward all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ufw-before-logging-output all -- anywhere anywhere
ufw-before-output all -- anywhere anywhere
ufw-after-output all -- anywhere anywhere
ufw-after-logging-output all -- anywhere anywhere
ufw-reject-output all -- anywhere anywhere
ufw-track-output all -- anywhere anywhere
Chain ufw-after-forward (1 references)
target prot opt source destination
Chain ufw-after-input (1 references)
target prot opt source destination
ufw-skip-to-policy-input udp -- anywhere anywhere udp dpt:netbios-ns
ufw-skip-to-policy-input udp -- anywhere anywhere udp dpt:netbios-dgm
ufw-skip-to-policy-input tcp -- anywhere anywhere tcp dpt:netbios-ssn
ufw-skip-to-policy-input tcp -- anywhere anywhere tcp dpt:microsoft-ds
ufw-skip-to-policy-input udp -- anywhere anywhere udp dpt:bootps
ufw-skip-to-policy-input udp -- anywhere anywhere udp dpt:bootpc
ufw-skip-to-policy-input all -- anywhere anywhere ADDRTYPE match dst-type BROADCAST
Chain ufw-after-logging-forward (1 references)
target prot opt source destination
LOG all -- anywhere anywhere limit: avg 3/min burst 10 LOG level warning prefix `[UFW BLOCK] '
Chain ufw-after-logging-input (1 references)
target prot opt source destination
LOG all -- anywhere anywhere limit: avg 3/min burst 10 LOG level warning prefix `[UFW BLOCK] '
Chain ufw-after-logging-output (1 references)
target prot opt source destination
Chain ufw-after-output (1 references)
target prot opt source destination
Chain ufw-before-forward (1 references)
target prot opt source destination
ufw-user-forward all -- anywhere anywhere
Chain ufw-before-input (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ufw-logging-deny all -- anywhere anywhere state INVALID
DROP all -- anywhere anywhere state INVALID
ACCEPT icmp -- anywhere anywhere icmp destination-unreachable
ACCEPT icmp -- anywhere anywhere icmp source-quench
ACCEPT icmp -- anywhere anywhere icmp time-exceeded
ACCEPT icmp -- anywhere anywhere icmp parameter-problem
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT udp -- anywhere anywhere udp spt:bootps dpt:bootpc
ufw-not-local all -- anywhere anywhere
ACCEPT all -- BASE-ADDRESS.MCAST.NET/4 anywhere
ACCEPT all -- anywhere BASE-ADDRESS.MCAST.NET/4
ufw-user-input all -- anywhere anywhere
Chain ufw-before-logging-forward (1 references)
target prot opt source destination
Chain ufw-before-logging-input (1 references)
target prot opt source destination
Chain ufw-before-logging-output (1 references)
target prot opt source destination
Chain ufw-before-output (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ufw-user-output all -- anywhere anywhere
Chain ufw-logging-allow (0 references)
target prot opt source destination
LOG all -- anywhere anywhere limit: avg 3/min burst 10 LOG level warning prefix `[UFW ALLOW] '
Chain ufw-logging-deny (2 references)
target prot opt source destination
RETURN all -- anywhere anywhere state INVALID limit: avg 3/min burst 10
LOG all -- anywhere anywhere limit: avg 3/min burst 10 LOG level warning prefix `[UFW BLOCK] '
Chain ufw-not-local (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere ADDRTYPE match dst-type LOCAL
RETURN all -- anywhere anywhere ADDRTYPE match dst-type MULTICAST
RETURN all -- anywhere anywhere ADDRTYPE match dst-type BROADCAST
ufw-logging-deny all -- anywhere anywhere limit: avg 3/min burst 10
DROP all -- anywhere anywhere
Chain ufw-reject-forward (1 references)
target prot opt source destination
Chain ufw-reject-input (1 references)
target prot opt source destination
Chain ufw-reject-output (1 references)
target prot opt source destination
Chain ufw-skip-to-policy-forward (0 references)
target prot opt source destination
DROP all -- anywhere anywhere
Chain ufw-skip-to-policy-input (7 references)
target prot opt source destination
DROP all -- anywhere anywhere
Chain ufw-skip-to-policy-output (0 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain ufw-track-input (1 references)
target prot opt source destination
Chain ufw-track-output (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere state NEW
ACCEPT udp -- anywhere anywhere state NEW
Chain ufw-user-forward (1 references)
target prot opt source destination
Chain ufw-user-input (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:rsync
ACCEPT udp -- anywhere anywhere udp dpt:8862
ACCEPT udp -- anywhere anywhere udp dpt:8864
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Chain ufw-user-limit (0 references)
target prot opt source destination
LOG all -- anywhere anywhere limit: avg 3/min burst 5 LOG level warning prefix `[UFW LIMIT BLOCK] '
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain ufw-user-limit-accept (0 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain ufw-user-logging-forward (0 references)
target prot opt source destination
Chain ufw-user-logging-input (0 references)
target prot opt source destination
Chain ufw-user-logging-output (0 references)
target prot opt source destination
Chain ufw-user-output (1 references)
target prot opt source destination
On y voit bien les deux règle que j'ai ajouté:
ACCEPT udp -- anywhere anywhere udp dpt:8862
ACCEPT udp -- anywhere anywhere udp dpt:8864
anywhere/anywhere donc il ne devrais pas avoir de problème.
C'est sûrement la même sur mon autre PC où j'ai inséré les règles de la même manière (gufw).
Quand au sendMessage, je n'ai pas fait le teste dans mon code (pas utile, si un packet échoue on en renvoie un) mais dans tout les cas le packet est bien envoyé.
Merci de de te pencher sur mon cas.
Dernière modification par Vermouth (Le 02/07/2010, à 16:43)
Android !
\_/°<
coin coin...
Hors ligne
#4 Le 02/07/2010, à 16:48
- telliam
Re : Broadcast UDP sur le réseau
je suis pas un expert en iptables mais je serais toi, je ferai le meme test sans IPtable pour être sur que ca vient de la ou pas.
si ca vient de la, remonte tes regles au debut de IPtables et fais par dicotomie en descendant les regles pas a pas pour voir laquelle bloque tes UPD broadcast.
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#5 Le 02/07/2010, à 17:12
- Vermouth
Re : Broadcast UDP sur le réseau
je suis pas un expert en iptables mais je serais toi, je ferai le meme test sans IPtable pour être sur que ca vient de la ou pas.
si ca vient de la, remonte tes regles au debut de IPtables et fais par dicotomie en descendant les regles pas a pas pour voir laquelle bloque tes UPD broadcast.
Il est où le fichier contenant les règles ?
J'ai chercher dans la doc et le man mais j'ai pas trouvé .
Android !
\_/°<
coin coin...
Hors ligne
#6 Le 02/07/2010, à 17:31
- telliam
Re : Broadcast UDP sur le réseau
pas essayé mais tu px faire
iptables-save > sauv.txt pour sauvegarder ta table
iptables -F pour la vider
...
tu fais tes tests
et tu fais
iptables-restore < sauv.txt
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#7 Le 02/07/2010, à 18:05
- Vermouth
Re : Broadcast UDP sur le réseau
J'ai essayé quelque chose comme ça:
# Generated by iptables-save v1.4.4 on Fri Jul 2 17:39:37 2010
*filter
:OUTPUT ACCEPT [36:1914]
:INPUT ACCEPT [36:9914]
COMMIT
# Completed on Fri Jul 2 17:39:37 2010
Mais ça ne marche pas non plus.
De toute façon ça m'étonnerai que par défaut il bloque le trafic sortant.
Je vient d'essayer d'utilisé un avec le port 138 (protocole nommé BROWSER dans wireshar mais je crois que c'est le partage windows/netbiosname truc du genre) sur lequel je voit fréquemment des packets envoyer sur l'adresse de broadcast. Mais ça ne fonctionne toujours pas (en utilisant INADDR_ANY.
Mais par contre je vient de remarqué grâce à une modif du code que les packets ne veulent pas s'envoyer sur 192.168.1.255 (adresse de broadcast de mon réseau).
Donc je pense que le problème ne vient pas du filtrage.
Mais je vais tater un peu quelque combinaison mais là je commence à manquer d'imagination !
Android !
\_/°<
coin coin...
Hors ligne
#8 Le 02/07/2010, à 18:12
- Vermouth
Re : Broadcast UDP sur le réseau
Bein après quelque teste j'en conclut que INADDR_ANY ne semble pas correspondre à l'adresse de broadcast et que par contre je ne peut pas envoyé de packet sur l'adresse de broadcast (INADDR_BROADCAST ou inet_addr("192.168.1.255") ).
Donc pas un problème de filtrage mais... un autre !
Une autre idée ?
Android !
\_/°<
coin coin...
Hors ligne
#9 Le 02/07/2010, à 19:22
- telliam
Re : Broadcast UDP sur le réseau
il te manque pas un setsockopt avec l'option SO_BROADCAST ??
"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard
Hors ligne
#10 Le 02/07/2010, à 20:52
- Vermouth
Re : Broadcast UDP sur le réseau
il te manque pas un setsockopt avec l'option SO_BROADCAST ??
Youhou !! Victoire !
Le plaisir que j'ai eu quand j'ai vue mes packets dans Wireshark !
A appliquer sur la socket servant à émettre en broadcast:
int optval = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(int));
memset((char *) &s_addr, 0, sizeof(s_addr));
Merci !!
Me reste à peaufiner un programme avec fichier de configuration pour synchroniser une liste de dossier (unison marche impec).
Je repasserai quand j'aurai avancé.
Je n'ai pas encore avancé sur wine (je l'ai juste installer) et pour synchroniser les programmes (entre mes installs d'Ubuntu), je synchroniserai un fichier listant les applications à installé.
Dernière modification par Vermouth (Le 02/07/2010, à 21:06)
Android !
\_/°<
coin coin...
Hors ligne
#11 Le 02/07/2010, à 21:01
- Link31
Re : Broadcast UDP sur le réseau
Un bon moyen de trouver ce genre d'erreur est de faire un strace sur un outil réseau fiable, du type hping2, pour déterminer l'enchaînement des opérations et les options utilisées.
Hors ligne
#12 Le 02/07/2010, à 21:15
- Vermouth
Re : Broadcast UDP sur le réseau
Un bon moyen de trouver ce genre d'erreur est de faire un strace sur un outil réseau fiable, du type hping2, pour déterminer l'enchaînement des opérations et les options utilisées.
Dans mon cas je ne vois pas l'utilité de hping2 ? (tcp uniquement qui plus est).
De toute façon c'est ma faute, si j'avais pas oublié de mettre un affichage sur l'erreur d'envoi du packet, j'aurai situé le programme bien plus tôt. Ça m'apprendra !
Cela dit, pour setsockopt, je l'ai croisé une fois dans une source et je l'avais mis dans un coin de ma tête mais j'ai mis plein de chose dessus donc je l'ai oublié !
Par contre, je me pose une question.
Est-ce que mon petit "projet" intéresse du monde ?
Car si c'est le cas je fait un README etc... et je vous balance tout (à la fin, je pense que j'aurai un démon à lancé au démarrage et qui gérera tout avec un fichier de conf).
Dernière modification par Vermouth (Le 02/07/2010, à 21:15)
Android !
\_/°<
coin coin...
Hors ligne
#13 Le 02/07/2010, à 21:27
- Link31
Re : Broadcast UDP sur le réseau
hping2 permet de forger des paquets TCP, UDP et ICMP.
Sinon, au sujet de ton projet... pourquoi ne pas faire simplement un arping ? Il suffit de connaître l'adresse MAC de la machine qu'on cherche pour obtenir son adresse IP si elle est connectée. Bon, ça dépend aussi de la topologie du réseau...
Hors ligne
#14 Le 02/07/2010, à 21:34
- Vermouth
Re : Broadcast UDP sur le réseau
hping2 permet de forger des paquets TCP, UDP et ICMP.
Oui (ok pour UDP, j'ai regardé trop vite la page de man).
Mais moi s'était un problème de programmation.. enfin c'est vraie que ça aurai pue écarté la (mauvaise) piste du problème de filtrage (hein telliam ).
Sinon, au sujet de ton projet... pourquoi ne pas faire simplement un arping ? Il suffit de connaître l'adresse MAC de la machine qu'on cherche pour obtenir son adresse IP si elle est connectée. Bon, ça dépend aussi de la topologie du réseau...
Ouai c'est vraie qu'à la réflexion ça aurai pu le faire mais c'est plus propre avec le nom d'hote (surtout plus aisé).
Et puis s'était un petit défit personnel !
EDIT: plus haut j'ai parlé d'un petit projet, en faite je pensai à ce que je tente de faire sur ce topic et plus particulièrement la synchro entre deux PC sur mon réseaux local.
Dernière modification par Vermouth (Le 02/07/2010, à 22:46)
Android !
\_/°<
coin coin...
Hors ligne
Pages : 1