home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / XINE-1.ZIP / INJECTOR.ZIP / SRC / NETOOL.C < prev    next >
C/C++ Source or Header  |  1996-10-16  |  3KB  |  122 lines

  1.  
  2.  
  3. #include "netool.h"
  4.  
  5. #include <string.h>
  6. #include <ctype.h>
  7. #include <conio.h>
  8. #include <stdio.h>
  9.  
  10.  
  11. #define getw(X) (( (unsigned char) *(X) << 8) + (unsigned char) *(X+1) )
  12.  
  13. void analyze (char * buffer, struct netpacket * pkt)
  14. {
  15.     unsigned int off,tlen,hlen,tcphlen,i;
  16.     char *p;
  17.  
  18.     strcpy(pkt->textdata,"\0");
  19.     memcpy(pkt->ethfrom,buffer,6);
  20.     memcpy(pkt->ethto,buffer+6,6);
  21.     /* only for ethenret, NOT for IEEE 802.3 */
  22.     off=14;
  23.     pkt->issyn=0;
  24.     pkt->isfin=0;
  25.     if ( (*(buffer+12) != 0x08 ) || (*(buffer+13) != 0 ) )
  26.     {
  27.         if ( (*(buffer+12) == 0x08 ) && (*(buffer+13) == 0x06 ) )
  28.         {
  29.             pkt->type=ARP;
  30.             pkt->proto=*(buffer+off+7);
  31.             if (pkt->proto==1)
  32.                 memcpy(pkt->ipto,buffer+off+24,4);
  33.             else
  34.                 memcpy(pkt->ipto,buffer+off+14,4);
  35.             memcpy(pkt->etharp,buffer+off+8,6);
  36.             return;
  37.         }
  38.         pkt->type=UNKNOWN;
  39.         return;
  40.     }
  41.     /* */
  42.     memcpy(pkt->ipfrom,buffer+off+12,4);
  43.     memcpy(pkt->ipto,buffer+off+16,4);
  44.     tlen= getw(buffer+off+2) ;
  45.     if (tlen>3000)
  46.      {
  47.         tlen=3000;
  48.         cputs("TRASHING!!!\n\r");
  49.      }
  50.     hlen= ( *(buffer+off) & 0x0f ) * 4;
  51.     pkt->fragoff=( getw(buffer+off+6) & 0x1fff ) * 8;
  52.     pkt->ismorefrag= *(buffer+off+6) & 0x20;
  53.     if ( (!pkt->ismorefrag) && (pkt->fragoff==0) )
  54.         pkt->isfrag=0;
  55.     else
  56.         pkt->isfrag=1;
  57.     pkt->id=getw(buffer+off+4);
  58.     pkt->proto=*(buffer+off+9);
  59.     if (pkt->proto==1)
  60.     {
  61.         pkt->type=ICMP;
  62.         return;
  63.     }
  64.     if (pkt->proto==6)
  65.     {
  66.         pkt->type=TCPIP;
  67.         pkt->portfrom=getw(buffer+off+hlen);
  68.         pkt->portto=getw(buffer+off+hlen+2);
  69.         tcphlen=(( *(buffer+off+hlen+12) & 0xf0 ) >> 2);
  70.             /* & 0xf0 shouldn't be neccessary just to be sure */
  71.         for (i=(off+hlen+tcphlen),p=(pkt->textdata);
  72.              i<(off+tlen); i++,p++)
  73.         {
  74.             if ( isprint(*(buffer+i)) )
  75.                 *p=*(buffer+i);
  76.             else
  77.                 *p='.';
  78.         }
  79.         *p='\0';
  80.         if (*(buffer+off+hlen+13) & 0x02)
  81.             pkt->issyn=1;
  82.         if (*(buffer+off+hlen+13) & 0x05)
  83.             pkt->isack=1;
  84.         if (*(buffer+off+hlen+13) & 0x01)
  85.             pkt->isfin=1;
  86.         return;
  87.     }
  88.     if (pkt->proto==17)
  89.     {
  90.         pkt->type=UDPIP;
  91.         pkt->portfrom=getw(buffer+off+hlen);
  92.         pkt->portto=getw(buffer+off+hlen+2);
  93.         tcphlen=8;
  94.         for (i=(off+hlen+tcphlen),p=(pkt->textdata);
  95.              i<(off+tlen); i++,p++)
  96.         {
  97.             if ( isprint(*(buffer+i)) )
  98.                 *p=*(buffer+i);
  99.             else
  100.                 *p='.';
  101.         }
  102.         *p='\0';
  103.  
  104.         return;
  105.     }
  106.     pkt->type=IPUNKNOWN;
  107.  
  108. }
  109.  
  110. int atoip(char * s, char * ip)
  111. {
  112.     int ip0,ip1,ip2,ip3;
  113.     if (sscanf(s,"%u.%u.%u.%u",&ip0,&ip1,&ip2,&ip3)==4)
  114.     {
  115.         ip[0]=ip0;
  116.         ip[1]=ip1;
  117.         ip[2]=ip2;
  118.         ip[4]=ip3;
  119.         return 1;
  120.     }
  121.     else return 0;
  122. }