Blame view

Network/sender.c 2.76 KB
1f9d795a   Speedclocker   Sniffer et sender
1
2
3
4
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <stdio.h>
  #include <stdlib.h>
351d9caa   Speedclocker   Ajout de serveur/...
5
  #include <unistd.h>
1f9d795a   Speedclocker   Sniffer et sender
6
7
8
  #include <string.h>
  #include <netdb.h>
  #include <arpa/inet.h>
32c9271a   skhinach   modif
9
  #include <errno.h>
1f9d795a   Speedclocker   Sniffer et sender
10
11
  
  
1f9d795a   Speedclocker   Sniffer et sender
12
13
  int initializeSocketUDP(char* service)
  {
32c9271a   skhinach   modif
14
15
  	int sock_id;
  	struct addrinfo precisions, *resultat=NULL, *origine; // On stocke dans précisions nos besoins pour le socket, dans resultat l'adresse qui respectera les requêtes
1f9d795a   Speedclocker   Sniffer et sender
16
  
1f9d795a   Speedclocker   Sniffer et sender
17
18
19
20
  
  	memset(&precisions, 0, sizeof precisions);
  	precisions.ai_family = AF_UNSPEC;
  	precisions.ai_socktype = SOCK_DGRAM;
351d9caa   Speedclocker   Ajout de serveur/...
21
  	//precisions.ai_flags = AI_PASSIVE;
32c9271a   skhinach   modif
22
23
24
25
  
  
  	if(getaddrinfo("192.168.0.14", service, &precisions, &origine)<0) { fprintf(stderr, "Erreur getaddrinfo\n"); return(-1); }
  
1f9d795a   Speedclocker   Sniffer et sender
26
27
28
29
30
31
  	int n=0;
  	
  	for(struct addrinfo* i=origine; i!=NULL && resultat==NULL; i=i->ai_next)
  	{
  		printf("%d - ", n);
  		if(i->ai_family==AF_INET)
351d9caa   Speedclocker   Ajout de serveur/...
32
  		{
1f9d795a   Speedclocker   Sniffer et sender
33
  			resultat=i;
351d9caa   Speedclocker   Ajout de serveur/...
34
35
36
  			printf("Test : %d", origine->ai_addrlen);
  		}
  
1f9d795a   Speedclocker   Sniffer et sender
37
38
39
  		printf("\n");	
  		n++;
  	}
351d9caa   Speedclocker   Ajout de serveur/...
40
  
32c9271a   skhinach   modif
41
42
  	printf("Value : %d\n", n);
  
351d9caa   Speedclocker   Ajout de serveur/...
43
44
  	struct sockaddr_in* test=(struct sockaddr_in*)(resultat->ai_addr);
  	printf("Addr : %x\n", test->sin_addr.s_addr);
1f9d795a   Speedclocker   Sniffer et sender
45
46
47
48
  	if((sock_id=socket(resultat->ai_family, resultat->ai_socktype, resultat->ai_protocol))<0) { fprintf(stderr, "Erreur socket\n"); return(-1); }
  
  	int val=1;
  	
351d9caa   Speedclocker   Ajout de serveur/...
49
50
51
52
53
  	if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR|SO_BROADCAST, &val, sizeof(val))<0) { fprintf(stderr, "Erreur setsockopt\n"); return(-1); }
  
  	if(bind(sock_id, resultat->ai_addr, resultat->ai_addrlen)) { fprintf(stderr, "Erreur bind\n"); return(-1); }
  
  
1f9d795a   Speedclocker   Sniffer et sender
54
  	freeaddrinfo(origine);
32c9271a   skhinach   modif
55
  	return sock_id;
1f9d795a   Speedclocker   Sniffer et sender
56
57
58
  }
  
  
1f9d795a   Speedclocker   Sniffer et sender
59
60
  int sendUDPBroadcast(char* message, int port)
  {
351d9caa   Speedclocker   Ajout de serveur/...
61
62
  	static struct sockaddr_in addrUDP;
  	addrUDP.sin_family=AF_INET;
08f8ef8d   skhinach   modifs
63
  	addrUDP.sin_port=htons(port);
1f9d795a   Speedclocker   Sniffer et sender
64
65
  
  	struct in_addr tmpadd={0xffffffff};	
351d9caa   Speedclocker   Ajout de serveur/...
66
67
  	addrUDP.sin_addr=tmpadd;
  	
32c9271a   skhinach   modif
68
69
70
  	char tmp_str[15];
  	sprintf(tmp_str, "%d", port);
  	int sock_id=initializeSocketUDP( tmp_str );
1f9d795a   Speedclocker   Sniffer et sender
71
  
32c9271a   skhinach   modif
72
  	printf("Initialize via Broadcast %d\n", sock_id);
32c9271a   skhinach   modif
73
  	
08f8ef8d   skhinach   modifs
74
  	if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0) { fprintf(stderr, "Erreur sendto\n"); return(-1);}       
32c9271a   skhinach   modif
75
  
c35daaf6   Souheib Khinache   Organisation, cré...
76
  
32c9271a   skhinach   modif
77
78
  	close(sock_id);	
  	return 0;
1f9d795a   Speedclocker   Sniffer et sender
79
80
  }
  
32c9271a   skhinach   modif
81
82
  
  
1f9d795a   Speedclocker   Sniffer et sender
83
84
  int sendUDPUnicast(char* address, char* message, int port)
  {
351d9caa   Speedclocker   Ajout de serveur/...
85
86
  	static struct sockaddr_in addrUDP;
  	addrUDP.sin_family=AF_INET;
08f8ef8d   skhinach   modifs
87
  	addrUDP.sin_port=htons(port);
1f9d795a   Speedclocker   Sniffer et sender
88
  
351d9caa   Speedclocker   Ajout de serveur/...
89
  	inet_aton(address, &(addrUDP.sin_addr)); // Converti lcriture string de format a.b.c.d en format Internet
1f9d795a   Speedclocker   Sniffer et sender
90
  
32c9271a   skhinach   modif
91
92
93
94
  	char tmp_str[15];
  	sprintf(tmp_str, "%d", port);
  	int sock_id=initializeSocketUDP( tmp_str );
  	printf("Initialize via Unicast %d\n", sock_id);
1f9d795a   Speedclocker   Sniffer et sender
95
  
32c9271a   skhinach   modif
96
  	if(sendto(sock_id, message, sizeof(message), 0, (struct sockaddr*) &addrUDP, sizeof(addrUDP)) < 0 ) { fprintf(stderr, "Error sendto %d\n", errno); return(-1); }
1f9d795a   Speedclocker   Sniffer et sender
97
  
32c9271a   skhinach   modif
98
  	close(sock_id);
08f8ef8d   skhinach   modifs
99
  	
32c9271a   skhinach   modif
100
101
  	return 0;
  }
1f9d795a   Speedclocker   Sniffer et sender
102
  
32c9271a   skhinach   modif
103
  /*
1f9d795a   Speedclocker   Sniffer et sender
104
105
106
  
  int main(void)
  {
351d9caa   Speedclocker   Ajout de serveur/...
107
  	sendUDPBroadcast("Broadwesh", 2020);
32c9271a   skhinach   modif
108
  	sendUDPUnicast("192.168.43.174", "Uniwesh", 2020);
1f9d795a   Speedclocker   Sniffer et sender
109
  	return(1);
1f9d795a   Speedclocker   Sniffer et sender
110
  }
32c9271a   skhinach   modif
111
112
  
  */