📄 addrule.c
字号:
#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h> #include <stdlib.h>#include <string.h>#include <unistd.h>#include <firewall.h>void error(char *msg){ perror(msg); exit(0);}int main(int argc, char *argv[]){ int sockfd, n; struct sockaddr_in serv_addr; struct hostent *server; char *position; int count, tmp; int portno; char *endptr; if (argc < 3) { fprintf (stderr, "usage: %s hostname port configuration line \n", argv[0]); exit (1); } portno = strtol (argv[2], &endptr, 10); if ((portno == 0 ) || (endptr == NULL) || (*endptr != '\0')) { fprintf (stderr, "%s: invalid port number!\n", argv[0]); exit (1); } char buffer[BUFFERLENGTH]; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); server = gethostbyname(argv[1]); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting"); /* Now fill the buffer with the arguments */ bzero(buffer,BUFFERLENGTH); position = buffer; /* skip program name */ argc = argc - 3; argv += 3; /* put command in first character */ buffer[0] = ADD_RULE; count = BUFFERLENGTH - 2; position = buffer + 1; while (argc) { tmp = strlen (*argv); if (tmp > count) { fprintf (stderr, "Maximal string length exceeded!\n"); exit (1); } position = memcpy (position, *argv, tmp); position += tmp; argc --; argv ++; count = count - tmp; } /* add the final null character */ *position = '\0'; position++; printf ("Writing data to socket: %s\n", buffer); n = write (sockfd, buffer, position - buffer); if (n < 0) error("ERROR writing to socket"); bzero (buffer, BUFFERLENGTH); /* wait for reply */ n = read (sockfd, buffer, BUFFERLENGTH -1); if (n < 0) error("ERROR reading from socket"); switch (buffer[0]) { case ILLEGAL_IP_ADDRESS: printf ("Illegal IP-address \n"); exit (1); case ILLEGAL_UID: printf ("Illegal user name \n"); exit (1); case ILLEGAL_PORT: printf ("Illegal port name \n"); exit (1); case ILLEGAL_PROGRAM: printf ("Illegal program \n"); exit (1); case OK: break; default: error ("Illegal return value from server!"); } /* printf ("Rule successfully added \n");*/ return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -