/* ** boot.c for boot in /u/bocal/folays/inet ** ** Made by Eric Gouyer ** Login ** ** Started on Tue Sep 21 00:56:43 2004 Eric Gouyer ** Last update Wed Nov 10 09:36:33 2004 Eric Gouyer */ #include #include #include #include #include #include #include #include //#include #include static int in_ether (char *bufp, unsigned char *addr) { char c, *orig; int i; unsigned char *ptr = addr; unsigned val; i = 0; orig = bufp; while ((*bufp != '\0') && (i < ETHER_ADDR_LEN)) { val = 0; c = *bufp++; if (isdigit(c)) val = c - '0'; else if (c >= 'a' && c <= 'f') val = c - 'a' + 10; else if (c >= 'A' && c <= 'F') val = c - 'A' + 10; else { errno = EINVAL; return (-1); } val <<= 4; c = *bufp; if (isdigit(c)) val |= c - '0'; else if (c >= 'a' && c <= 'f') val |= c - 'a' + 10; else if (c >= 'A' && c <= 'F') val |= c - 'A' + 10; else if (c == ':' || c == 0) val >>= 4; else { errno = EINVAL; return (-1); } if (c != 0) bufp++; *ptr++ = (unsigned char) (val & 0377); i++; if (*bufp == ':' && i != ETHER_ADDR_LEN) bufp++; } return (0); } int main (int argc, char **argv) { int a,b,c,d,e,f; int m,n,o,p,q,r; int i, j; int packet; struct sockaddr_in sap; unsigned char ethaddr[8]; unsigned char *ptr; unsigned char buf [128]; int optval = 1; in_ether (argv[1], ethaddr); { if ((packet = socket (PF_INET, SOCK_DGRAM, 0)) < 0) { fprintf (stderr, "%s: socket failed\n", argv[0]); return (-1); } if (setsockopt (packet, SOL_SOCKET, SO_BROADCAST, (caddr_t) &optval, sizeof (optval)) < 0) { fprintf (stderr, "%s: setsocket failed %s\n", argv[0], strerror (errno)); close (packet); return (-1); } sap.sin_family = AF_INET; /* sap.sin_addr.s_addr = htonl(0xffffffff); */ sap.sin_addr.s_addr = inet_addr("192.168.1.255"); sap.sin_port = htons(60000); ptr = buf; for (i = 0; i < 6; i++) *ptr++ = 0xff; for (j = 0; j < 16; j++) for (i = 0; i < ETHER_ADDR_LEN; i++) *ptr++ = ethaddr [i]; if (sendto (packet, buf, 102, 0, (void *)&sap, sizeof (sap)) < 0) { fprintf (stderr, "%s: sendto failed, %s\n", argv[0], strerror(errno)); close (packet); return (-1); } return (0); a = b = c = d = e = f = 0; for (e = 0x00; e <= 0xff; ++e) { for (q = 0; q < 16; q++) buf[6 + 6 * q + 4] = e; printf("send: %d %d %d %x:%x:%x:%x:%x:%x.\n", d, e, f, buf[6 + 6 * 15 + 0], buf[6 + 6 * 15 + 1], buf[6 + 6 * 15 + 2], buf[6 + 6 * 15 + 3], buf[6 + 6 * 15 + 4], buf[6 + 6 * 15 + 5] ); for (f = 0x00; f <= 0xff; ++f) { for (r = 0; r < 16; r++) buf[6 + 6 * r + 5] = f; sendto (packet, buf, 102, 0, (void *)&sap, sizeof (sap)); } } for (d = 0x00; d <= 0xff; ++d) { for (p = 0; p < 16; p++) buf[6 + 6 * p + 3] = d; printf("send: %d %d %d %x:%x:%x:%x:%x:%x.\n", d, e, f, buf[6 + 6 * 15 + 0], buf[6 + 6 * 15 + 1], buf[6 + 6 * 15 + 2], buf[6 + 6 * 15 + 3], buf[6 + 6 * 15 + 4], buf[6 + 6 * 15 + 5] ); for (e = 0x00; e <= 0xff; ++e) { for (q = 0; q < 16; q++) buf[6 + 6 * q + 4] = e; for (f = 0x00; f <= 0xff; ++f) { for (r = 0; r < 16; r++) buf[6 + 6 * r + 5] = f; sendto (packet, buf, 102, 0, (void *)&sap, sizeof (sap)); } } } close (packet); return (0); } }