logcvt-ip2n.c
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:2k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** logcvt-ip2n.c
  3. **
  4. ** This program will try to look up all IP addresses in a log file and
  5. ** convert them into FQDNs (fully qualified domain names).
  6. **
  7. ** Copyright (c) 1995 Peter Eriksson <pen@signum.se>
  8. **
  9. ** This program is free software; you can redistribute it and/or modify
  10. ** it under the terms of the GNU General Public License as published by
  11. ** the Free Software Foundation; either version 2 of the License, or
  12. ** (at your option) any later version.
  13. **
  14. ** This program is distributed in the hope that it will be useful,
  15. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. ** GNU General Public License for more details.
  18. ** You should have received a copy of the GNU General Public License
  19. ** along with this program; if not, write to the Free Software
  20. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21. */
  22. #include <stdio.h>
  23. #include <ctype.h>
  24. #include <netdb.h>
  25. #include <sys/types.h>
  26. #include <sys/socket.h>
  27. #include <netinet/in.h>
  28. #include <arpa/inet.h>
  29.  
  30. int main(int argc,
  31.          char *argv[])
  32. {
  33.     FILE *fp_in, *fp_out;
  34.     char buf[8192];
  35.     char *cp;
  36.     long ia;
  37.     struct hostent *hp;
  38.     
  39.     
  40.     if (argc > 1)
  41.         fp_in = fopen(argv[1], "r");
  42.     else
  43.         fp_in = stdin;
  44.     
  45.     if (argc > 2)
  46.         fp_out = fopen(argv[2], "w");
  47.     else
  48.         fp_out = stdout;
  49.  
  50.  
  51.     while (fgets(buf, sizeof(buf), fp_in))
  52.     {
  53.         cp = buf;
  54.         while (*cp && !isspace(*cp))
  55.             ++cp;
  56.  
  57.         if (!*cp)
  58.             continue;
  59.  
  60.         *cp++ = '';
  61.         while (*cp && isspace(*cp))
  62.             ++cp;
  63.  
  64.         ia = inet_addr(buf);
  65.         hp = gethostbyaddr((const char *) &ia, sizeof(ia), AF_INET);
  66.  
  67.         if (hp == NULL)
  68.             fprintf(fp_out, "%s %s", buf, cp);
  69.         else
  70.             fprintf(fp_out, "%s %s", hp->h_name, cp);
  71.     }
  72.  
  73.     fclose(fp_out);
  74.     fclose(fp_in);
  75.  
  76.     return 0;
  77. }