#include #include #include #include #include #include #define MSGLENTGH 256 int main(int argc, char *argv[]) { int socketfd, counter = 1; char *message; const time_t sectime = time(NULL); size_t length = 0; struct sockaddr_in packet; struct hostent *remotehost; struct servent *service; if (argc < 2) { printf("Usage: %s \n", argv[0]); exit(1); } while (counter < argc) { length += (strlen(argv[counter++]) + 2); } length += 30; /* Add 30 (29 for time string, 1 for the null) */ if ((message = (char *)malloc(length)) == NULL) { perror("Malloc failed"); exit(1); } cftime(message, "<13>%b %d %T sysannoy:", §ime); counter = 2; while (counter < argc) { strcat(message, " "); strcat(message, argv[counter++]); } bzero(&packet, sizeof(struct sockaddr_in)); if ((remotehost = gethostbyname(argv[1])) == NULL) { perror("Host name lookup failed"); exit(1); } if ((service = getservbyname("syslog", "udp")) == NULL) { perror("Unable to obtain syslog info"); exit(1); } packet.sin_family = AF_INET; packet.sin_port = service->s_port; bcopy(remotehost->h_addr, &packet.sin_addr, remotehost->h_length); if ((socketfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("Unable to open socket"); exit(1); } if ((sendto(socketfd, message, (length - 1), 0, (struct sockaddr *) &packet, sizeof(packet))) < 0) { perror("Unable to send message"); exit(1); } printf("Sufficiently annoyed.\n"); }