4 #include <sys/socket.h>
10 #include <netinet/in.h>
13 #include <sys/select.h>
17 struct sockaddr_in sockAddr;
19 unsigned char * get_mac(const char *intf) {
20 unsigned char * mac = (unsigned char *) malloc(sizeof(unsigned char *) * 6);
24 int tmpSock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
27 //How to get the MAC of the Interface: http://www.geekpage.jp/en/programming/linux-network/get-macaddr.php
28 iface.ifr_addr.sa_family = AF_INET;
29 strncpy(iface.ifr_name, intf, IFNAMSIZ-1);
30 ioctl(tmpSock, SIOCGIFHWADDR, &iface);
33 for (i = 0; i < 6; i++)
34 mac[i] = (unsigned char)iface.ifr_hwaddr.sa_data[i];
40 sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
43 printf("Could not create Socket\n");
49 memset(&sockAddr, 0, sizeof(sockAddr));
50 sockAddr.sin_family = AF_INET;
51 sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
52 sockAddr.sin_port = htons(63321);
54 if (bind(sock, (struct sockaddr *) &sockAddr, sizeof(sockAddr)) < 0) {
55 printf("Could not bind to socket\n");
63 int sendBroadcast(char * data, unsigned int len) {
66 if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &bcp, sizeof(bcp)) < 0) {
67 printf("Could not broadcast data\n");
71 struct sockaddr_in bcAddr;
73 bcAddr.sin_family = AF_INET;
74 bcAddr.sin_addr.s_addr = inet_addr("255.255.255.255");
75 bcAddr.sin_port = htons(63322);
77 return sendto(sock, data, len, 0, (struct sockaddr *) &bcAddr, sizeof(bcAddr));
82 int recvBroadcast(char * data) {
84 struct sockaddr sa_in;
85 socklen_t sa_len = sizeof(sa_in);
88 tout.tv_usec = 500000;
92 int s = select(sock + 1, &fds, NULL, NULL, &tout);
95 return recvfrom(sock, data, PACKET_BUFFER, 0, &sa_in, &sa_len);
100 int recvBroadcast_tout(char * data) {
102 struct sockaddr_in sa_in;
103 socklen_t sa_len = sizeof(sa_in);
110 int s = select(sock + 1, &fds, NULL, NULL, &tout);
113 return recvfrom(sock, data, PACKET_BUFFER, 0,(struct sockaddr * )&sa_in, &sa_len);