Advertisement
Guest User

Untitled

a guest
Jun 25th, 2012
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.71 KB | None | 0 0
  1. /* $Id$ */
  2. /* public domain */
  3.  
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <errno.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12.  
  13. void
  14. usage()
  15. {
  16.         extern char *__progname;
  17.  
  18.         (void)fprintf(stderr, "usage: %s addr\n", __progname);
  19.         exit(1);
  20. }
  21.  
  22. int
  23. main(int argc, char **argv)
  24. {
  25.         struct in_addr in4;
  26.         struct in6_addr in6;
  27.  
  28.         char addr4[INET_ADDRSTRLEN];
  29.         char addr6[INET6_ADDRSTRLEN];
  30.  
  31.         void *in;
  32.         char *addr;
  33.         int af;
  34.         socklen_t len;
  35.         int valid;
  36.  
  37.         if (argc != 2)
  38.                 usage();
  39.                 /* NOTREACHED */
  40.  
  41.  
  42.         if (strchr(argv[1], ':')) {
  43.                 /* IPv6 */
  44.                 in = &in6;
  45.                 addr = addr6;
  46.                 af = AF_INET6;
  47.                 len = INET6_ADDRSTRLEN;
  48.         } else {
  49.                 /* IPv4 */
  50.                 in = &in4;
  51.                 addr = addr4;
  52.                 af = AF_INET;
  53.                 len = INET_ADDRSTRLEN;
  54.         }
  55.  
  56.         valid = inet_pton(af, argv[1], in);
  57.  
  58.         switch (valid) {
  59.         case 1:         /* ok, pretty print */
  60.                 if (!inet_ntop(af, in, addr, len))
  61.                         addr = strerror(errno);
  62.                 break;
  63.         case 0:         /* not ok, just echo */
  64.                 addr = argv[1];
  65.                 break;
  66.         default:        /* error */
  67.                 addr = strerror(errno);
  68.                 break;
  69.         }
  70.  
  71.         printf("%svalid IPv%d address: %s\n",
  72.                 valid ? "" : "in",
  73.                 af == AF_INET ? 4 : 6,
  74.                 addr);
  75.  
  76.         return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement