Annotation of embedaddon/hping2/ip_opt_build.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * $smu-mark$
                      3:  * $name: memunlock.c$
                      4:  * $other_author: Mika <mika@qualys.com>
                      5:  * $other_copyright: Copyright (C) 1999 Mika <mika@qualys.com>
                      6:  * $license: This software is under GPL version 2 of license$
                      7:  * $date: Fri Nov  5 11:55:48 MET 1999$
                      8:  * $rev: 2$
                      9:  */
                     10: 
                     11: #include <stdio.h>
                     12: #include <string.h>
                     13: #include <sys/types.h>
                     14: #include <netinet/in.h>
                     15: #include <sys/socket.h>
                     16: #include <arpa/inet.h>
                     17:                      
                     18: #include "hping2.h"
                     19: #include "globals.h"
                     20: 
                     21: unsigned char ip_opt_build(char* ip_opt)
                     22: {
                     23:        unsigned char optlen = 0;
                     24:        unsigned long ip;
                     25: 
                     26:     memset(ip_opt, 1, sizeof(ip_opt));
                     27: 
                     28:     if (opt_lsrr)
                     29:     {
                     30:         if (lsr_length<=39)
                     31:         {
                     32:             memcpy(ip_opt, &lsr, lsr_length);
                     33:             optlen += lsr_length;
                     34:         }
                     35:         else
                     36:         {
                     37:             printf("Warning: loose source route is too long, discarding it");
                     38:             opt_lsrr=0;
                     39:         }
                     40:     }
                     41: 
                     42:     if (opt_ssrr)
                     43:     {
                     44:         if (ssr_length+optlen<=39)
                     45:         {
                     46:             memcpy(ip_opt + optlen, &ssr, ssr_length);
                     47:             optlen += ssr_length;
                     48:         }
                     49:         else
                     50:         {
                     51:             printf("Warning: strict source route is too long, discarding it");
                     52:             opt_ssrr=0;
                     53:         }
                     54:     }
                     55: 
                     56:        if (opt_rroute)
                     57:        {
                     58:         if (optlen<=33)
                     59:         {
                     60:                ip_opt[optlen]=IPOPT_RR;
                     61:                ip_opt[optlen+1]=39-optlen;
                     62:                ip_opt[optlen+2]=8;
                     63:                ip=inet_addr("1.2.3.4");
                     64:                memcpy(ip_opt+optlen+3,&ip,4);
                     65:             optlen=39;
                     66:         }
                     67:         else
                     68:         {
                     69:             printf("Warning: no room for record route, discarding option\n");
                     70:             opt_rroute=0;
                     71:         }
                     72:        }
                     73: 
                     74:     if (optlen)
                     75:     {
                     76:         optlen = (optlen + 3) & ~3;
                     77:         ip_opt[optlen-1] = 0;
                     78:         return optlen;
                     79:     }
                     80:     else
                     81:         return 0;
                     82: }
                     83: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>