2 #include <sys/socket.h>
8 #include <netinet/in.h>
11 #include <sys/select.h>
15 struct sockaddr_in sockAddr;
17 unsigned char * get_mac(const char *intf) {
18 unsigned char * mac = (unsigned char *) malloc(sizeof(unsigned char *) * 6);
22 int tmpSock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
25 //How to get the MAC of the Interface: http://www.geekpage.jp/en/programming/linux-network/get-macaddr.php
26 iface.ifr_addr.sa_family = AF_INET;
27 strncpy(iface.ifr_name, intf, IFNAMSIZ-1);
28 ioctl(tmpSock, SIOCGIFHWADDR, &iface);
31 for (i = 0; i < 6; i++)
32 mac[i] = (unsigned char)iface.ifr_hwaddr.sa_data[i];
38 sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
41 printf("Could not create Socket\n");
47 memset(&sockAddr, 0, sizeof(sockAddr));
48 sockAddr.sin_family = AF_INET;
49 sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
50 sockAddr.sin_port = htons(63321);
52 if (bind(sock, (struct sockaddr *) &sockAddr, sizeof(sockAddr)) < 0) {
53 printf("Could not bind to socket\n");
61 int sendBroadcast(char * data, unsigned int len) {
64 if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (void *) &bcp, sizeof(bcp)) < 0) {
65 printf("Could not broadcast data\n");
69 struct sockaddr_in bcAddr;
71 bcAddr.sin_family = AF_INET;
72 bcAddr.sin_addr.s_addr = inet_addr("255.255.255.255");
73 bcAddr.sin_port = htons(63322);
75 return sendto(sock, data, len, 0, (struct sockaddr *) &bcAddr, sizeof(bcAddr));
80 int recvBroadcast(char * data) {
82 struct sockaddr_in sa_in;
83 int sa_len = sizeof(sa_in);
86 tout.tv_usec = 500000;
90 int s = select(sock + 1, &fds, NULL, NULL, &tout);
93 return recvfrom(sock, data, PACKET_BUFFER, 0,(struct sockaddr * )&sa_in, &sa_len);
98 int recvBroadcast_tout(char * data) {
100 struct sockaddr_in sa_in;
101 int sa_len = sizeof(sa_in);
108 int s = select(sock + 1, &fds, NULL, NULL, &tout);
111 return recvfrom(sock, data, PACKET_BUFFER, 0,(struct sockaddr * )&sa_in, &sa_len);