Annotation of embedaddon/hping2/ip_opt_build.c, revision 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>