Annotation of embedaddon/dhcdrop/src/dhcdrop.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  *     Copyright (C) 2009 by Chebotarev Roman <roma@ultranet.ru>
        !             3:  *
        !             4:  *     This program is free software; you can redistribute it and/or modify
        !             5:  *     it under the terms of the GNU General Public License as published by
        !             6:  *     the Free Software Foundation; either version 2 of the License.
        !             7:  *
        !             8:  *     This program is distributed in the hope that it will be useful,
        !             9:  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            10:  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            11:  *     GNU General Public License for more details.
        !            12:  *
        !            13:  *     You should have received a copy of the GNU General Public License
        !            14:  *     along with this program; if not, write to the Free Software
        !            15:  *     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
        !            16:  */
        !            17: 
        !            18: #ifndef DHCDROP_H
        !            19: #define DHCDROP_H
        !            20: 
        !            21: #define RELEASE_DATE        "05.08.2009"
        !            22: #define PROG_NAME                      "DHCP-dropper"
        !            23: #define BASE_VERSION        PROG_NAME" v0.5"
        !            24: #define VERSION             BASE_VERSION
        !            25: 
        !            26: #define COPYRIGHT           VERSION" was written by Chebotarev Roman at "RELEASE_DATE"\n"
        !            27: #define        HOMEPAGE                        "Home page: http://www.netpatch.ru/en/dhcdrop.html"
        !            28: 
        !            29: 
        !            30: /* Function for filling configuration structure 'params' from command line arguments */
        !            31: void configure(const int argc, char **argv, struct config_params * params);
        !            32: 
        !            33: /* Execute all programm actions */
        !            34: int exec_action(const struct config_params * config);
        !            35: 
        !            36: /* Discover available network interfaces.
        !            37:  * If 'num' not zero - return name of interface with index 'num' if success, 0 otherwise. */
        !            38: char * interfaces_discover(const int num);
        !            39: 
        !            40: /* Creating and launch children for generate DHCP flood. */
        !            41: void send_flood(const struct config_params * params);
        !            42: 
        !            43: /* Get ethernet address of illegal DHCP server in network.
        !            44:  * Retrun: 0 if server not found, ILLEGAL_SERV_FOUND if illegal server found. Error code otherwise. */
        !            45: int get_dhcp_server(const struct config_params * config,       /* Configuration parametrs. Can't be NULL */
        !            46:                pcap_t * pcap_socket,                                           /* Pointer to pcap device. Can't be NULL */
        !            47:                struct dhcp_packet_net_header * net_header,     /* Can't be NULL */
        !            48:                struct dhcp_packet * server_response,           /* Function store DHCP response server here, */
        !            49:                                                                                                        /* can't be NULL */
        !            50:                uint16_t * response_length);
        !            51: 
        !            52: /* Drop DHCP server specified in 'srv_etheraddr'. Return number of address recieved. */
        !            53: int drop_dhcp_server(const struct config_params * config,      /* Can't be NULL */
        !            54:                pcap_t * pcap_socket,                   /* Pointer to pcap device. Can't be NULL */
        !            55:                const char * srv_etheraddr);    /* Ethrenet addres of DHCP server to dropping */
        !            56: 
        !            57: /* Scanning network for search hosts with invalid  IP configuration and send
        !            58:  * DHCPRELEASE for each found hosts to illegal DHCP server. Return zero if success, -1 otherwise */
        !            59: int agressive_clean_leases(pcap_t * pcap_socket,       /* Pointer to pcap device. Can't be NULL */
        !            60:                const struct config_params * config,            /* Can't be NULL */
        !            61:                struct dhcp_packet_net_header * net_header, /* Network header from DHCP server response */
        !            62:                const struct dhcp_packet * srv_resp,            /* Pointer to structure contain server DHCPOFFER response */
        !            63:                uint16_t resp_len);                                                     /* Length DHCPOFFER */
        !            64: 
        !            65: /* ARP scan network on interface 'pcap_socket' in range specified by network/netmask. */
        !            66: void scan_subnet(pcap_t * pcap_socket,         /* Pointer to pcap device. Can't be NULL */
        !            67:                uint32_t from_ip,                               /* Source IP address. If == 0 - using random value */
        !            68:                const uint8_t * from_eth,               /* Source ethernet address. */
        !            69:                const uint32_t network,                 /* Destination network */
        !            70:                const uint32_t netmask);                /* Network mask */
        !            71: 
        !            72: /* ARP scan network on interface 'pcap_socket' in IP range 'start_range' - 'end_range'
        !            73:  * Return zero if success, error code otherwise. */
        !            74: int arp_scan(pcap_t * pcap_socket,             /* Pointer to pcap device. Can't be NULL */
        !            75:                const uint32_t start_range,             /* Start IP range. Host byte order! */
        !            76:                const uint32_t end_range,               /* End IP range. Host byte order! */
        !            77:                uint32_t from_ip,                               /* Source IP address */
        !            78:                const uint8_t * from_ether);    /* Source ethernet address */
        !            79: 
        !            80: /* Return 0 if success, or error code otherwise. */
        !            81: int send_arpreq(pcap_t * pcap_socket,  /* Pointer to pcap device. Can't be NULL */
        !            82:                const uint32_t to_ip,                   /* Destination of ARP request */
        !            83:                const uint32_t from_ip,                 /* Source IP address */
        !            84:                const uint8_t * from_ether);    /* Source ethernet address */
        !            85: 
        !            86: /* Waiting ARP responses on interface 'pcap_socket' */
        !            87: int get_arpresps(pcap_t * pcap_socket, /* Pointer to pcap device. Can't be NULL */
        !            88:                int timeout);                                   /* Timeout in seconds */
        !            89: 
        !            90: #ifdef  _WIN32
        !            91: /* Keyboard interrupt handler */
        !            92: BOOL WINAPI int_sign(DWORD signal);
        !            93: 
        !            94: /* Generate DHCP flood - one thread. Windows version. */
        !            95: unsigned __stdcall start_flood( void* arg );
        !            96: 
        !            97: #else
        !            98: /* Keyboard interrupt handler */
        !            99: int int_sign(int32_t signal);
        !           100: /* Generate DHCP flood - one child. UNIX-like version. */
        !           101: int start_flood( void* arg );
        !           102: #endif
        !           103: 
        !           104: /* Create new child process (for UNIX) or new thread (for Windows) for generate DHCP flood. */
        !           105: void new_child(const struct flood_params * p, const int child_num);
        !           106: 
        !           107: /* Wait unless all child DHCP flood processes (in UNIX)/ threads (in Windows) finished. */
        !           108: void wait_children(const struct flood_params * p);
        !           109: 
        !           110: /* Make filter expression for pcap_setfilter() function for discover
        !           111:  * DHCP servers in network. Return 0 if success, or error code otherwise. */
        !           112: int make_serverdiscover_filter(char * out_filter, const int max_filter_len,
        !           113:                const struct config_params * config, const char * src_etheraddr);
        !           114: 
        !           115: /* Make filter expression for pcap_setfilter() function for ARP scanning
        !           116:  * network. Return 0 if success, or error code otherwise. */
        !           117: int make_arp_filter(char * out_filter, const int max_filter_len, const char * src_etheraddr);
        !           118: 
        !           119: /* Make filter expression for pcap_setfilter() function to drop
        !           120:  * DHCP servers specified in 'server_ethaddr'. Using client Ethernet address
        !           121:  * specified in 'src_etheraddr'. Return 0 if success, or error code otherwise. */
        !           122: int make_serverdrop_filter(char * out_filter, const int max_filter_len,
        !           123:                const struct config_params * config,
        !           124:                const char * src_etheraddr, const char * server_ethaddr);
        !           125: 
        !           126: /* Set filter specified in 'filter_expression' to interface 'pcap_socket'.
        !           127:  * Return 0 if success, or error code otherwise. */
        !           128: int set_pcap_filter(pcap_t * pcap_socket, char * filter_expression);
        !           129: 
        !           130: /* Create and send DHCPDISCOVER from pseudo-client 'ether_src'.
        !           131:  * Return 0 if success, or error code otherwise. */
        !           132: int send_dhcp_discover(pcap_t * pcap_socket,   /* Can't be NULL */
        !           133:                const struct config_params * config,    /* Can't be NULL */
        !           134:                uint8_t * ether_src,                                    /* May be NULL */
        !           135:                const uint32_t xid);
        !           136: 
        !           137: /* Create and send DHCPDISCOVER from pseudo-client 'ether_src' to DHCP server.
        !           138:  * Return 0 if success, or error code otherwise. */
        !           139: int send_dhcp_request(pcap_t * pcap_socket, const struct config_params * config,
        !           140:        uint8_t * src_ether,    /* Pseudo-client source ethernet address. Can't be NULL */
        !           141:     const uint32_t server_ip_address,  /* DHCP server IP address. Can't be NULL */
        !           142:     const uint32_t req_ip_addr,                        /* Required client IP address. Can't be NULL */
        !           143:     const int32_t xid);                                                        /* DHCP transcaction XID */
        !           144: 
        !           145: int send_dhcp_release(pcap_t * pcap_socket, const struct config_params * config,
        !           146:        const uint8_t * src_ether,      /* Pseudo-client source ethernet address. Can't be NULL */
        !           147:     const uint32_t server_ip_address,  /* DHCP server IP address. Can't be NULL */
        !           148:     const uint32_t cl_ip_addr,                 /* Released client IP address. Can't be NULL */
        !           149:     const int32_t xid
        !           150: );
        !           151: 
        !           152: /* Waiting DHCP response of type specified in 'resp_type' from server.
        !           153:  * Return: -1 if timeout; 0 if DHCP server responded or error code otherwise. */
        !           154: int get_dhcp_response(pcap_t * pcap_socket,                    /* Can't be NULL */
        !           155:                const int timeout, const uint8_t resp_type,     /* Timeout in seconds */
        !           156:                const uint32_t xid,                                             /* DHCP transcaction XID */
        !           157:                struct dhcp_packet_net_header * net_header,             /* Function store network header (Ethernet, IP, UDP)
        !           158:                                                                                                                here. Can't be NULL */
        !           159:                struct dhcp_packet * response,                          /* Function store DHCP response here. Can't be NULL */
        !           160:                int * dhcp_data_len);                                           /* Function store DHCP data length here. Can't be NULL*/
        !           161: 
        !           162: /* Function that implements a list of legal DHCP server list. */
        !           163: struct ignored_mac_node * ignor_servers_list(
        !           164:                enum list_operations operation, /* Operation type. See enum 'list_operations'
        !           165:                                                                                        in dhcdrop_types.h */
        !           166:                char * ether_addr);                                     /* Ethernet address of DHCP server */
        !           167: 
        !           168: /* Function that implements a list of legal IP networks on interface */
        !           169: uint32_t legal_nets_list(enum list_operations operation, /* Operation type. See enum 'list_operations'
        !           170:                                                                                                                        in dhcdrop_types.h */
        !           171:                const uint32_t * value);                                                /* Network IP address */
        !           172: /* Function that implements a list of hosts */
        !           173: int    hosts_list(enum list_operations operation,  /* Operation type. See enum 'list_operations'
        !           174:                                                                                                                        in dhcdrop_types.h */
        !           175:                uint32_t ip_addr,                                               /* Host IP address */
        !           176:                uint8_t * ether_addr);                                  /* Host ethernet address */
        !           177: 
        !           178: /* Executed on programm finished. */
        !           179: void cleanup(void);
        !           180: 
        !           181: /* Misc functions */
        !           182: 
        !           183: /* Decode and print DHCP message. Return DHCP message type is success, 0 otherwise. */
        !           184: int decode_dhcp(const struct dhcp_packet * packet, const uint16_t dhcp_data_len);
        !           185: 
        !           186: /* Print usage message. Print help message if 'help' != 0 */
        !           187: void usage(const char help);
        !           188: 
        !           189: /* Convert network mask to CIDR notation */
        !           190: uint32_t to_cidr(uint32_t mask);
        !           191: 
        !           192: /* Convert a numeric IP address to a string */
        !           193: char *iptos(const uint32_t in);
        !           194: 
        !           195: /* Print information about network interface */
        !           196: void ifprint(const pcap_if_t *dev);
        !           197: 
        !           198: /* Convert ethernet address specified in 'str_addr' to binary format and store to 'bin_addr'.
        !           199:  * Return >0 if success. */
        !           200: int etheraddr_str_to_bin(const char * str_addr, uint8_t * bin_addr);
        !           201: 
        !           202: /* Convert ethernet address specified in 'bin_addr' to string format and store to 'str_addr'.
        !           203:  * Return >0 if success. */
        !           204: inline int etheraddr_bin_to_str(const uint8_t * bin_addr, char * str_addr);
        !           205: 
        !           206: /* Replase all '-' symbols in string 'str_ether' to ':' */
        !           207: inline void replace_semicolons(char * str_ether);
        !           208: 
        !           209: /* Print ethernet address as hex-digits string */
        !           210: inline void print_ether(const uint8_t * ether_addr);
        !           211: 
        !           212: /* Create random ethernet address and store to string 'str_mac_addr' */
        !           213: inline void rand_ether_addr(char * str_mac_addr);
        !           214: 
        !           215: #endif /* ifdef DHCDROP_H*/

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