Laurent Constantin's network library (lcrzo) ---------------------------------------------- | LCRZO 's CHANGELOG | ---------------------------------------------- --------------------------------------------------------------------- Version 4.16.0 - 13-oct-2002 ++ bugs fixed ++ none in this version ++ major evolutions ++ - Creation of module lcrzo_kbd dealing with keyboard and pipe redirection (for example 'printf "2\n" | ./lcrzoex 7'). It is also used for RzoBox. ++ minor evolutions ++ - Modification of disposition in functions lcrzo_conf_xyz_fprint. ++ internal evolutions (not seen by end users) ++ none in this version --------------------------------------------------------------------- Version 4.15 - 29-sep-2002 ++ bugs fixed ++ none in this version ++ major evolutions ++ none in this version ++ minor evolutions ++ none in this version ++ internal evolutions (not seen by end users) ++ - A fflush is added at the end of every yyy_fprint function. --------------------------------------------------------------------- Version 4.14 - 03-sep-2002 ++ bugs fixed ++ - In virtual tcp clients/servers a variable named "sniff..." was used instead of "spoof...". So at the end of an unsuccessful handshake, an incorrect error code could be returned. This bug was introduced in version 4.00, when virtual functions were rewritten. Thanks to Eric Sommer for reporting it. - In virtual tcp clients, if the server sent fin+ack+data, the client didn't detect the data. So, the last part of the tcp session was never provided to user. Thanks to Eric Sommer for reporting it. This bug exists since version 1.09, even if virtual functions were rewritten, because this case was never treated. - The function lcrzo_list_loop_range incorrectly returned LCRZO_ERR_OKSEARCHNOTFOUND at the end instead of LCRZO_ERR_OK. This bug was introduced in version 4.13, when lcrzo_list was rewritten. - Function lcrzo_sock_close for a virtual tcp client/server closed an unopened process. Under Windows, this caused an error. This bug was introduced in version 4.00, when virtual functions were rewritten. - When lcrzo_spoof_set_useethforip asked to use eth, lcrzo_spoof_ip set the source Ethernet address to the local computer address instead of address in the packet. This bug existed since version 3.04 (creation of function lcrzo_spoof_set_useethforip). - Under Windows, when Winsock 2.2 is available to spoof at IP level, it was not used. This bug was introduced since version 4.06. ++ major evolutions ++ - Creation of functions lcrzo_path_xxx to deal with pathnames. Corresponding functions lcrzo_filename_xxx are now obsolete. ++ minor evolutions ++ - Lcrzo now compile with g++ as an external C library without having to modify the headers. - Creation of function lcrzo_ipc_close_notneeded to close an lcrzo_ipc in a process where it is not needed. This is useful when we have 3 processes or more, which are not dealing with the same IPCs. - When a reset is received in the virtual client/server return an error instead of ok. This helps to diagnose problems. ++ internal evolutions (not seen by end users) ++ - Function lcrzo_ipc_close_notneeded is used in lcrzo_sock in order to simplify the communications. - Creation of lcrzo_debug_err_ok_activate to replace use of lcrzo_priv_err_ctx_int_save. --------------------------------------------------------------------- Version 4.13 - 13-aug-2002 ++ bugs fixed ++ - lcrzo_xxx_fprint_infos displayed twice the text before the information (thanks to vincent at hamon dot info for reporting it). - Under Windows, when unicode device name is greater than 64 bytes, configuration cannot be obtained (thanks to Christophe Morel for reporting it). ++ major evolutions ++ - Creation of functions lcrzo_ptr_alloc, lcrzo_ptr_realloc and lcrzo_ptr_free2. - Functions in lcrzo_list are faster. - Functions lcrzo_data_init_int (and similar) are now obsolete. They are replaced by lcrzo_data_init_int32/uint32/int16/etc. ++ minor evolutions ++ - Function lcrzo_list_searchelem_range is obsolete. Use lcrzo_list_searchitem_range instead. - Format used in lcrzo_xintxx_fprint is now more strict : "%[0. +-]{0,1}[1-9]{0,2}d" (signed) "%[0. -]{0,1}[1-9]{0,2}[ouxX]" (unsigned) Before, user could use for example "%u" for a signed integer. ++ internal evolutions (not seen by end users) ++ - Rewrite of lcrzo_list module, in order to improve speed. There are now two internal pointers storing previously accessed items. --------------------------------------------------------------------- Version 4.12 - 14-jul-2002 ++ bugs fixed ++ - Windows : when entering a passwd, the backspace was interpreted as a new character, instead of removing the previous character. ++ major evolutions ++ none in this version ++ minor evolutions ++ - Input parameter for lcrzo_hdrlxx_init_hdrpxx2 functions is now a constant pointer. ++ internal evolutions (not seen by end users) ++ - Gdb is now supported to obtain a debugging backtrace. --------------------------------------------------------------------- Version 4.11 - 30-jun-2002 ++ bugs fixed ++ - Windows : memory leak in lcrzo_ipa_init_hs, lcrzo_hs_init_ipa and lcrzo_multiprocess_process_wait_end because of a missing lcrzo_process_close which frees memory under Windows. ++ major evolutions ++ - New functions are available : lcrzo_device_equal2 lcrzo_device_cmp2 lcrzo_hs_equal2 lcrzo_hs_cmp2 lcrzo_ips_equal2 lcrzo_ips_cmp2 lcrzo_ipa_equal2 lcrzo_ipa_cmp2 lcrzo_ipl_equal2 lcrzo_ipl_cmp2 lcrzo_eths_equal2 lcrzo_eths_cmp2 lcrzo_etha_equal2 lcrzo_etha_cmp2 lcrzo_list_remove_duplicate_range2 lcrzo_list_remove_duplicate_all2 lcrzo_list_remove_criteria_range2 lcrzo_list_remove_criteria_all2 lcrzo_list_sort_range2 lcrzo_list_sort_all2 lcrzo_list_search_range2 lcrzo_list_search_all2 They obsolete previous functions which were easy to use but without error detection. They are now located in lcrzo_obso module. - New module lcrzo_fd2 to mix lcrzo functions with external file descriptors. - New module lcrzo_winhandle to mix lcrzo functions with external Windows' HANDLE. - A new kind of LCRZODEF_SYS is provided : Unsupported_0_xxx. It permits to compile lcrzo on unsupported systems. However, in this case, lcrzo will lack a lot of functionalities (configuration, spoof, etc.). - Unix : user can now set its own signal handlers for SIGINT and SIGTERM using lcrzo_unix_signalhandler_set. ++ minor evolutions ++ - Functions xxx_readm_fixed now immediately return if requested size is zero. - System errors (errno, h_errno, GetLastError) are now set in a more logical way (detected with LCRZO_DEBUG_ERROR_OK). - New types lcrzo_ptr and lcrzo_constptr are provided. They are defined as pointers (void* and const void*). They are needed mainly for unaligned processors where lcrzo_data cannot by used (it creates a cast alignment error). ++ internal evolutions (not seen by end users) ++ - Creation of lcrzo_debug module containing functions used in debugging mode. - Creation of lcrzo_debugdefs.h containing debugging defines. End users should not need to use it. - Complete error checking is now done inside every function. - Windows : memory management checking functions (to detect memory leaks and corruptions) are now fully implemented. - Windows : cleaning of private SNMP functions. - Windows configuration : lcrzo_stringlist in now used instead of lcrzo_datalist for string lists (it only exists since 4.08, this is why it was not used before). - Windows in debugging mode only : when lcrzo_ipa_init_hs or lcrzo_hs_init_ipa resolved the addresses, the "child" thread was terminated but it was not useful. So, debugging messages were not displayed at the end of the thread. - Check for file descriptors leaks. --------------------------------------------------------------------- Version 4.10 - 21-may-2002 ++ bugs fixed ++ - Memory leak in lcrzo_data_replacem_regexp when data_replacing contained an invalid $x. - Memory leak in lcrzo_priv_ipl_init_hsrange. - Memory leak in lcrzo_filename_lastfile when filename was not clean. - Memory leak in lcrzo_filename_parentdir when filename could not be cleaned. - Windows : when user wanted to create a file or directory on an inexistant drive letter (for example "w:"), there was an infinite loop. - Windows : "c:/" was not recognized as "c:\" by lcrzo_filename_clean. - Windows : lcrzo_dir_exist didn't recognized "x:" as a valid directory (well, really it is a bug in Windows's _stat function). - In functions lcrzo_packet_initm_icmpxxx, ippacketsize used was too small. ++ major evolutions ++ - Rewrite of memory management in order to detect memory leaks and corruptions. - lcrzo_data_free and lcrzo_string_free are now considered as obsolete. Functions lcrzo_data_free2 and lcrzo_string_free2 should be used instead. - Define lcrzo_bool_verifbof is now considered as obsolete (because it did not allow complemented parameters). - Define lcrzo_efr is now considered as obsolete (because it created complicated code). ++ minor evolutions ++ - Add a message when filename length reaches 240 characters (limitation of Windows). --------------------------------------------------------------------- Version 4.09 - 28-april-2002 ++ bugs fixed ++ - Memory leak in lcrzo_filename_clean when the filename to clean returned the error LCRZO_ERR_SPPATHROOTDOTDOT. ++ major evolutions ++ none in this version ++ minor evolutions ++ - A new type of device is provided : LCRZO_DEVICE_TYPE_BEST. It orders interfaces for default choice. --------------------------------------------------------------------- Version 4.08 - 07-april-2002 ++ bugs fixed ++ none in this version ++ major evolutions ++ - Creation of lcrzo_stringlist functions to store lists of string. - It's now possible to compile the shared version liblcrzo.so, as explained in the file INSTALLUNIX_EN.TXT. ++ minor evolutions ++ - Several modifications in order to suppress g++ warnings. --------------------------------------------------------------------- Version 4.07 - 25-march-2002 ++ bugs fixed ++ none in this version ++ major evolutions ++ - Functions lcrzo_sock_udpmulser_virt and lcrzo_sock_udpmulser_real now support writing to the client. ++ minor evolutions ++ - When displaying a mixed string, characters '"' and '\\' are now printed in hexadecimal. It's easier to import such strings in third part programs. --------------------------------------------------------------------- Version 4.06 - 12-march-2002 ++ bugs fixed ++ none in this version ++ major evolutions ++ - Support for serial line modems. Please note that PPP is not Ethernet, so several functionalities aren't available on this device type. Read lcrzoex-4.06-doc_html for a complete description of supported functionalities on each operating system. - Rewrite of several lcrzo_conf functions in order to support modems. - Windows 2K/XP : raw ip sockets are now used to send at IP level, instead of using Ethernet. ++ minor evolutions ++ - Update of following functions to support all types of devices : lcrzo_conf_devices_add_user lcrzo_conf_devices_del_system lcrzo_conf_devices_del_user lcrzo_conf_devices_value_pos - Creation of obsolete functions, keeping compatible parameters : lcrzo_conf_devices_add_user_406 lcrzo_conf_devices_del_system_406 lcrzo_conf_devices_del_user_406 lcrzo_conf_devices_value_pos_406 - In functions lcrzo_filename_copy and lcrzo_filename_rename, do not enforce the output filename to be inexistant. --------------------------------------------------------------------- Version 4.05 - 17-february-2002 ++ bugs fixed ++ none in this version ++ major evolutions ++ - Port to Linux under Alpha processor. - Port to FreeBSD under Alpha processor. - Port to MacOS X (thanks to snikt at cyberspace dot org). The port of spoofing functions has to be terminated. - Creation of module lcrzo_obso containing obsolete functions. - Creation of lcrzo_hdrpxxx2 containing physical headers. Types lcrzo_hdrpxxx are now considered as obsolete. - Reorganization of text documentation. ++ minor evolutions ++ - In lcrzo_time_pause_usec, change priority only if we are root user. - Filenames in the archive are shorter than 30 characters. --------------------------------------------------------------------- Version 4.04 - 3-february-2002 ++ bugs fixed ++ - Function lcrzo_hs_init_etha was not converting to lcrzo_hs. - Under Windows, function lcrzo_dir_exist was not returning a correct value if the directory name finished with "/". ++ major evolutions ++ - Port to Linux under ia64 (Intel Itanium 64 bits). - Type lcrzo_bool is defined as unsigned char. - Every function having an integer as parameter now have a lcrzo_int16. Exceptions : file descriptor and error numbers. ++ minor evolutions ++ - Creation of lcrzo_ipa_init_ipa, lcrzo_etha_init_etha. - Function lcrzo_ipl_init_iprange now accepts a range of hostnames. - In functions lcrzo_file_open_write and lcrzo_dir_create, parent directories are created if they do not exists. - Several hundred spelling corrections. - When TCP packets are printed in synthetic printtype, bits are now displayed : 's'==syn, 'a'==ack, etc. - Creation of functions lcrzo_bool_init_text, lcrzo_bool_init_rand and lcrzo_bool_init_stdin. - Creation or rewrite of several lcrzo_xxx_init_stdin functions. - Rewrite of lcrzo_ipa_init_ips, lcrzo_ipl_init_ips and lcrzo_etha_init_eths. They used strtok function which is not thread safe. --------------------------------------------------------------------- Version 4.03 - 13-january-2002 ++ bugs corrected ++ - Detection of end of flow for lcrzo_ipc and lcrzo_sock was incorrect. When we were waiting for one event only (ie using lcrzo_ipc_readm_line, and not lcrzo_wait_wait2(&waitipc, &waitfile, etc.), the ending message was not recognized, and the function continued to loop. ++ major evolutions ++ none in this version ++ minor evolutions ++ - Under Unix, child processes are now killed when the father exits. - In functions lcrzo_file_offset_get, lcrzo_file_size, lcrzo_filename_size and lcrzo_filename_read, we return error LCRZO_ERR_SPFILE2G when file size is greater than 2 Giga bytes. --------------------------------------------------------------------- Version 4.02 - 26-december-2001 ++ bugs corrected ++ - Windows 9x : simultaneous access to the network adapter could crash the system. Every call to PacketOpenAdapter is now enclosed between exclusives locks : simultaneous calls by different threads are now forbidden. ++ major evolutions ++ - Algorithm retrieving Windows' configuration was rewritten in order to use several methods, and to combine them to choose the best solution. - Port to Windows 2000. - Port to Windows Me. ++ minor evolutions ++ - Creation of lcrzo_conf_debug_fprint to display configuration information for debugging purposes. - Creation of the following types : lcrzo_consths, lcrzo_constips lcrzo_constipa, lcrzo_consteths, lcrzo_constetha, lcrzo_constdevice, lcrzo_consthexa, lcrzo_constmixed, lcrzo_constbase64, lcrzo_consttime, lcrzo_hexa, lcrzo_mixed, lcrzo_base64. - The configuration update period is now 60 seconds (before, it was 5 seconds, which was too frequent). --------------------------------------------------------------------- Version 4.01 - 25-november-2001 ++ bugs corrected ++ - Memory leak in lcrzo_priv_storeddata_extract_fixed. This function is used by lcrzo_ipc_read_line, lcrzo_file_read_line, etc. - In virtual clients and servers, a warning was incorrectly printed when a child process terminated with the error LCRZO_ERR_OKPROCESSABRUPTTERM. - In lcrzo_dir_exist, a debugging message was printed. - Memory leak in TCP virtual socket during transition from FINWAIT1 to FINWAIT2 state. - Under Windows, if user entered a newline in lcrzo_stdin_char, only the \r (go back to the beginning) was printed. So the next line overwrote the current line. - Under Windows, the backspace character was incorrectly added in data stream, instead of removing previous character. ++ major evolutions ++ - Port to Windows 95 - Port to Windows 98 ++ minor evolutions ++ - It is now possible to call lcrzo_init or lcrzo_close several times. - Creation of two defines LCRZODEF_SYSTEMVERS and LCRZODEF_SYSTEMARCH. - Creation of function lcrzo_windows_getsystemversion. --------------------------------------------------------------------- Version 4.00 - 12-november-2001 ++ bugs corrected ++ - In lcrzo_string_initm_ethlist, lcrzo_iprange was used instead of lcrzo_ethrange. ++ major evolutions ++ - This version is a major rewrite. - Windows NT 4.0 is now supported. - New modules : lcrzo_process : to create and deal with processes lcrzo_wait : to wait for events (data available, process end, etc.) - Major rewrite of modules : lcrzo_conf : system and user conf are now separated lcrzo_file : a new type is available lcrzo_global : processes and threads are supported - Functions dealing with example presentation are moved in lcrzoex. - Functions initializing data with a fixed size array are removed. ++ minor evolutions ++ - Several hundreds. --------------------------------------------------------------------- Version 3.15 - 28-july-2001 <> ++ bugs in lcrzo ++ none in this version ++ major evolutions of liblcrzo ++ - Creation of lcrzo_portlist, lcrzo_iplist and lcrzo_ethlist. They allow to use lists of port, ip addresses and Ethernet addresses. For example "1-20,22-79,!50", "1.2.3.4,2.2.2/24,!2.2.2.45", "aa:bb:cc:dd:ee:ff-aa:bb:cc:ff:ff:ff,11:11:11:11:11". - Rewrite of the module lcrzo_time. - Creation of functions lcrzo_process_xxx to deal with processes. - Creation of functions lcrzo_xx_get_fd to obtain file descriptors for lcrzo_fd, lcrzo_stream, lcrzo_ipc, lcrzo_sniff, lcrzo_spoof and lcrzo_sock. - Creation of lcrzo_device_init_noalias to convert "eth0:2" to "eth0" for example. - In lcrzo_sniff_init and lcrzo_spoof_eth, if an aliased device is used (eth0:2), it is converted to an unaliased device (eth0). - Creation of functions lcrzo_fd_select_readx to wait for data ready to be read from file descriptors. ++ minor evolutions of liblcrzo ++ - In lcrzo_portrange_init_port, upper port is now printed, because the range of port "5-65535" is easier to understand than "5-". - Doesn't print a newline after the synthetic display of an ARP packet. - The printtype LCRZO_PRINTTYPE_PTEXT displays characters upper than 127 (ascii-8 bits) (before they were printed as '.'). - Under FreeBSD and OpenBSD, use of BIOCIMMEDIATE on pcap file descriptor to have sniffed data immediately. - Under Solaris, use of SBIOCSTIME and SBIOCSCHUNK on pcap file descriptor to have sniffed data immediately. <> ++ bugs in lcrzoex ++ - In tools 202 and 203 (http brute force), user and password were reverted : Basic authentication was never sent. ++ major evolutions of lcrzoex ++ - Creation of module shared_telnet to implement telnet protocol. - Tool 268 : brute force FTP. - Tool 269 : simulate open TCP ports (nmap finds everything open). - Tools 270..273 : telnet client (execute commands, interactive, and brute force) ++ minor evolutions of lcrzoex ++ none in this version --------------------------------------------------------------------- Version 3.14 - 01-july-2001 ++ bugs ++ - In lcrzo_err_print, stdout wasn't flushed after error displaying. In some cases (immediat exit of child process), error message wasn't displayed. - Under Solaris 2.8, in lcrzo_spoof_ip, the field totlen of IP headers had to be recomputed if the packet contains IP options. - In lcrzo_data_initm_int, the check for correct format was too strict : a '0' wasn't allowed ("%9d" and "%11d" were allowed, but not "%10d"). ++ major evolutions of liblcrzo ++ - Port to OpenBSD (2.9) by Jean Philippe Luiggi. - Creation of functions lcrzo_record_recfile_init_pcapfile and lcrzo_record_pcapfile_init_recfile to convert a libpcap/tcpdump packet file to a record file. - Creation of functions lcrzo_filename_clean, lcrzo_filename_parentdir and lcrzo_filename_lastfile, to clean a path, obtain the parent directory and obtain the file name. ++ minor evolutions of liblcrzo ++ - Creation of lcrzo_global_[sg]et_data_regexp_casesensitive to select if regular expressions have to be treated as case sensitive. - Creation of lcrzo_string_initm_icmptypecode to create a string containing the explanation of an icmp type and code. ++ major evolutions of lcrzoex ++ - Creation of tool 260 : backdoor web server to execute commands remotely - Creation of shared functions for nntp. - Tool 261, 262 : send mail with attachment. - Tool 263 : send news with attachment. - Tool 264 : verify if a mail server allows relaying. - Tool 265 : list all newsgroups on a news server - Tool 266 : download one newsgroup message - Tool 267 : download messages of a newsgroup ++ minor evolutions of lcrzoex ++ - Update of web client tools (96..99, 190..203) : basic proxy authorization is now supported. - Update of shared functions for smtp. - Update of smtp and nntp clients (162, 163 and 165) to support subjects containing accents (special characters). --------------------------------------------------------------------- Version 3.13 - 13-june-2001 ++ bugs ++ - In functions lcrzo_packet_decodem_xxx, negative sizes weren't forbidden : they were converted to big positive numbers. So, a segmentation fault appeared when a negative parameter was used. ++ major evolutions of liblcrzo ++ - Creation of lcrzo_icmp module. This module can create and decode various kinds of ICMP packets (rfc 792). - When converting ip addresses to Ethernet addresses, default spoofed addresses are the addresses of the local computer (a new type is created : LCRZO_INTSPOOF_TYPE_CONF). This can be reverted to old behavior using : lcrzo_global_set_intspoof_ip_type(LCRZO_INTSPOOF_TYPE_COMP); With the old behavior, problems appeared because some systems keep in mind the false adresses used in ARP requests ; then communicating with these systems were temporarily not possible for other computers (the spoofed one). ++ minor evolutions of liblcrzo ++ - Type of ICMP packets is displayed by lcrzo_hdrlicmp_fprint. - The libpcap package modified by RedHat is detected by genemake, and the variable LCRZODEF_LIBPCAPFROMREDHAT is defined. In the module lcrzo_sniff, this special package is now treated separately. - The special device "any" is supported in lcrzo_mtu_init_device and lcrzo_ipl_init_device. It allows to sniff on all devices of the computer. - Update of sniff functions to sniff on all devices with "any". - Installation on RedHat is easier because pcap.h is searched in /usr/include/pcap/. - Creation of lcrzo-config which permits to compile easily : gcc -o fich fich.c `lcrzo-config -cl` - The function pcap_freecode is now called (this function wasn't available in versions of libpcap previous to 0.6). ++ major evolutions of lcrzoex ++ - Rewrite of tools 138 and 172 : tcp traceroute. - Tools 244..247 : udp and icmp traceroute. - Tools 248 and 249 : icmp ping. - Tools 250 and 251 : tcp ping. - Tools 252 and 253 : tcp port scanner. - Tools 254 and 255 : udp port scanner. - Tools 256 and 257 : icmp scanner. ++ minor evolutions of lcrzoex ++ - Creation of lcrzoex__0000i.c to separate lcrzoex.c in smaller and faster to compile files. --------------------------------------------------------------------- Version 3.12 - 27-may-2001 ++ bugs ++ none in this version ++ major evolutions of liblcrzo ++ - Creation of functions lcrzo_hdrlxxx_update, to easily modify an header. - The pinfos parameter used in loop and search function is no more a const pointer : a subfunction can update its state. ++ minor evolutions of liblcrzo ++ - Creation of functions lcrzo_list_searchelem_range and lcrzo_list_searchelem_all to search through a chained list when data is entirely stored in the saved element. - Addition of device types : LCRZO_DEVICE_TYPE_LOOPBACK which match only loopback device LCRZO_DEVICE_TYPE_UP which match up devices LCRZO_DEVICE_TYPE_ALIAS which match aliases - Sniff functions now contain an header for data sniffed on loopback. ++ major evolutions of lcrzoex ++ - Tool 208 : ARP ping using ARP request/reply. - Tools 209 and 210 : sniff network and deduce the Ethernet addresses associated to an IP address. - Tool 211 : sniff and print listening TCP/UDP servers on the LAN. - Tool 212 : sniff and print statistics about network usage. - Toosl 213 and 214 : routers forwarding and masquerading packets. Data is fragmented as 16 bytes packets when sent on the external interface. - Tool 215 : flood a switch with ARP replies. - Tools 216..220 : tcp backdoor to exec, get and put files. - Tools 221..243 : replay data saved in records. ++ minor evolutions of lcrzoex ++ - Tools 23, 28, 36 47 and 64 were rewritten. --------------------------------------------------------------------- Version 3.11 - 13-may-2001 ++ bugs ++ none in this version ++ major evolutions of liblcrzo ++ - Parameters for lcrzo_ipc, lcrzo_list, lcrzo_sock, lcrzo_spoof and lcrzo_time are now pointers. Like this, it's homogeneous for users, and it allows me to update functions which may need to save their state. - Virtual servers and clients were totally rewritten, in order to improve their performances and to be closer RFC 768&793. - Simplification of several functions of lcrzo_address module, because parameters' verification was sometimes done twice (in the current function, and in its subfunctions). - Error diagnostic between reading and writing functions is now more homogeneous for 'file descriptor', 'FILE *', lcrzo_ipc and lcrzo_sock : - writing on a closed device : LCRZO_ERR_BUWRITECLOSED Exception : for 'FILE *', it's not possible because there is a seg fault in (g)libc. Warning : for lcrzo_ipc, we must use lcrzo_ipc_close_read previously (in the same process). - reading on a closed device : LCRZO_ERR_OKDATAEND Warning : for lcrzo_ipc, we must use lcrzo_ipc_close_write previously (in the same process). - reading without been blocking (O_NONBLOCK), and temporarily no data : LCRZO_ERR_OKTEMPDATAEND - reading, and end of data reached : LCRZO_ERR_OKDATAEND Warning : for lcrzo_ipc, we must use lcrzo_ipc_close_write previously (in the same process). ++ minor evolutions of liblcrzo ++ - Creation of functions lcrzo_ipc_close_read and lcrzo_ipc_close_write to close an ending point of a lcrzo_ipc (for example, a child process may close writing, and its father may close reading). - Module lcrzo_cliser is renamed to lcrzo_sock. - In lcrzo_data_print and lcrzo_data_fprint, stdout is flushed. Like this, data is printed as soon as it is available. - Creation of functions lcrzo_sock_ipopt_set and lcrzo_sock_ipopt_get to set and get ip options associated with a socket. - Functions lcrzo_spoofeasy_iptcp and lcrzo_spoofeasy_ethiptcp now contain a parameter for a fin bit. - Creation of functions lcrzo_xintxx_init_text to convert a string to an integer (equivalent to atoi, atol, strtoul, but errors are dealt by lcrzo). ++ major evolutions of lcrzoex ++ none in this version ++ minor evolutions of lcrzoex ++ - Creation of example 203 doing a brute force HTTP authentication using virtual tcp clients. - Creation of examples 204, 205, 206, and 207 to spoof TCP packets. --------------------------------------------------------------------- Version 3.10 - 29-april-2001 ++ bugs ++ none in this version ++ major evolutions of liblcrzo ++ none in this version ++ minor evolutions of liblcrzo ++ - In functions lcrzo_data_xx_hexa_stdin, lcrzo_data_xx_mixed_stdin and lcrzo_data_xx_base64_stdin, if the user enter something equivalent to an empty array, we do not ask to choose between Empty and Default. These functions are now easier to use. ++ major evolutions of lcrzoex ++ - Creation of several modules grouping examples by themes. - Creation of functions implementing http GET, HEAD, POST, PUT and DELETE. Moreover, basic authentification is supported. ++ minor evolutions of lcrzoex ++ - Improvement of clients using udp syslog (example 88, 89, 90 and 91). --------------------------------------------------------------------- Version 3.09 - 16-april-2001 ++ bugs ++ none in this version ++ major evolutions of liblcrzo ++ - Rewrite of most of the file/IPC/socket functions dealing with reading and writing data. These functions are now homogeneous. ++ minor evolutions of liblcrzo ++ - Creation of functions lcrzo_fd_write_msg and lcrzo_stream_write_msg. These functions write their data in one step only. ++ major evolutions of lcrzoex ++ none in this version ++ minor evolutions of lcrzoex ++ - Creation of examples 178 to 189 showing client and servers using stdin to communicate. --------------------------------------------------------------------- Version 3.08 - 08-april-2001 ++ bugs ++ - In virtual servers, the device was not set for socket information (lcrzo_sock_get_infos). ++ major evolutions of liblcrzo ++ none in this version ++ minor evolutions of liblcrzo ++ - In functions lcrzo_ips_init and lcrzo_eths_init, we now check for correct IP/Ethernet address before copying it. - In lcrzo_conf_route_to_host, we set the known values even if there is an error. - Creation of two functions to decide if we want virtual clients/servers to answer arp/rarp/ping requests : lcrzo_global_set_cliser_virt_answeralive lcrzo_global_get_cliser_virt_answeralive ++ major evolutions of lcrzoex ++ - In examples 2, 3, 4 and 5, conversion functions are now used, to show their usage. - Creation of examples 173, 174 and 175 displaying information about the local computer (devices, arp cache, and routing table). - Creation of example 176 showing header's values to use to reach a host. - Every example now shows parameters to use. This helps new users. ++ minor evolutions of lcrzoex ++ - An useless space was displayed in the function lcrzoex_title_print. - Example 161 (IP range computing) prints "..." and the end. --------------------------------------------------------------------- Version 3.07 - 25-march-2001 ++ bugs ++ - In examples 84, 108 and 168, we should _exit after sending an interruption request. Instead, we were continuing. ++ major evolutions of liblcrzo ++ - Creation of lcrzo_file module dealing with files, file descriptors streams and directories. Writing and reading large data chunks is now done by lcrzo (thanks Kerline Doucet). - Creation of functions reading a fixed size or a line from an ipc or a socket : lcrzo_ipc_read_flow_fixed lcrzo_ipc_readm_flow_fixed lcrzo_ipc_read_flow_line lcrzo_ipc_readm_flow_line lcrzo_sock_read_fixed lcrzo_sock_readm_fixed lcrzo_sock_read_line lcrzo_sock_readm_line ++ minor evolutions of liblcrzo ++ - The manual page is splitted in several small manpages. ++ major evolutions of lcrzoex ++ - Creation of categorie A containing simple examples. ++ minor evolutions of lcrzoex ++ - Creation of example 172, a simple tcp traceroute. - Use of lcrzo_file functions in examples 162 and 163. --------------------------------------------------------------------- Version 3.06 - 11-march-2001 ++ bugs ++ none in this version ++ major evolutions of liblcrzo ++ - Creation of functions to allocate and reallocate memory data. ++ minor evolutions of liblcrzo ++ none in this version ++ major evolutions of lcrzoex ++ none in this version ++ minor evolutions of lcrzoex ++ - Example 162(send email) can now deal with server answers on several lines. - Creation of example 166 sending a spoofed mail. - Creation of example 167 : tcp client with loose source routing. - In examples 44 and 72 (fragmented spoof) data size is now greater than 100 bytes. - Creation of examples 168, 169, 170 and 171, which are other clients using stdin. --------------------------------------------------------------------- Version 3.05 - 04-march-2001 ++ bugs ++ - In example 162, a SMTP helo was done with '@domain.fr' instead of 'domain.fr'. - Help for examples 74 (icmp with lsrr option) and 75 (icmp with ssrr option) was switched. ++ major evolutions of liblcrzo ++ none in this version ++ minor evolutions of liblcrzo ++ - Sometimes, hostnames resolution takes longer than 30 seconds to return "unknown host". Functions lcrzo_global_set_resolver_timeout and lcrzo_global_get_resolver_timeout help users to select a shorter timeout value (by default, it is 4 seconds). ++ major evolutions of lcrzoex ++ - Creation of example 165 recursively putting files on a ftp server. - The example 161 (IP/ranges computing) prints all surrounding ranges. ++ minor evolutions of lcrzoex ++ - In example 133 (tcp prediction), the difference was printed as unsigned (%lu) instead of signed (%ld). - Various improvements of examples 162(send email) and 163(send news). --------------------------------------------------------------------- Version 3.04 - 25-february-2001 ++ bugs ++ - In lcrzo_uint32_stdin, memory was freed too soon. As a consequence, correct user's values were rejected. - The functions lcrzo_int32_stdin, lcrzo_int16_stdin and lcrzo_int8_stdin were not conceived for negative integers. - The function lcrzo_uint32_rand didn't verify if the minimum value was inferior to the maximum value. ++ major evolutions of liblcrzo ++ - Creation of lcrzo_conf_route_to_host, which determines the router and the Ethernet addresses to use to send an IP packet. This function looks at the routing table to obtain this information. - If the user wants to spoof an IP packet at Ethernet level, but doesn't want to bother with Ethernet addresses and device, the new function lcrzo_spoof_set_useethforip can help him. This is very useful on systems like Solaris which modify IP header values. ++ minor evolutions of liblcrzo ++ - Functions lcrzo_uint32_rand, lcrzo_int32_rand, lcrzo_uint16_rand, lcrzo_int16_rand, lcrzo_uint8_rand and lcrzo_int8_rand initialize the random generator only once. ++ major evolutions of lcrzoex ++ - In examples 37, 40, 48, and 51, allow user to specify a port number equal to zero(0). The minimal value was 1. - In examples 65 and 68, allow user to specify icmp types and icmp codes of zero(0). The minimal value was 1. - Creation of example 162 sending an email using SMTP. - Creation of example 163 sending a news message using NNTP. - Creation of example 164 sending an IP packet and showing how to use lcrzo_spoof_set_useethforip. ++ minor evolutions of lcrzoex ++ none in this version --------------------------------------------------------------------- Version 3.03 - 18-february-2001 ++ bugs ++ - In example 144, the help printed "octal_number" instead of "IP_address". ++ major evolutions of liblcrzo ++ - Creation of the module lcrzo_sysdep containing all the system dependant functions. - Creation of the module lcrzo_conf to obtain and change network configuration : device configuration, arp cache and ip routes. The changes are not made on the computer, but on a virtual layer allowing users to dynamically configure network functionalities. All network functions of lcrzo now use this configuration module. ++ minor evolutions of liblcrzo ++ none in this version ++ major evolutions of lcrzoex ++ - Creation of examples 157, ... 160 printing the configuration of the local computer. These examples uses new functionalities provided by lcrzo_conf. - Creation of example 161 converting IP ranges. This is useful to compute network masks. ++ minor evolutions of lcrzoex ++ - In example 133 (tcp prediction), there is a now a pause to ensure the destination host is not synflooded. Furthermore, the difference is printed. - The example number 158 supersedes example 6. --------------------------------------------------------------------- Version 3.02 - 04-february-2001 ++ bugs ++ none in this version ++ major evolutions of liblcrzo ++ none in this version ++ minor evolutions of liblcrzo ++ - Update of the document presenting lcrzo. - Addition of configuration functions allowing to specify Ethernet and IP addresses for internal spoofing. These addresses can also be computed to match the local network. These functions are now used for internal arp and rarp spoofing, in addresses conversion functions. ++ major evolutions of lcrzoex ++ none in this version ++ minor evolutions of lcrzoex ++ - Creation of a manual page for lcrzoex. - Creation of exemple 156, obtaining information about a hostname with random ARP spoofing. --------------------------------------------------------------------- Version 3.01 - 28-january-2001 ++ bugs ++ - In lcrzo_etha_stdin, lcrzo_etha_init_hs was used instead of lcrzo_etha_init_eths, so it was not possible to enter a valid Ethernet address. - In lcrzo_uint32_stdin, the default value was printed in signed integer ("%ld"), instead of unsigned integer ("%lu"). ++ major evolutions of liblcrzo ++ none in this version ++ minor evolutions of liblcrzo ++ - In order to be able to use the libpcap package of RedHat, I had to circumvent its usage in lcrzo_sniff.c. So, it's now possible to use the libpcap package modified by RedHat. - Several low level functions of lcrzo 3.x are not implemented in libnet. So, using libnet doesn't help a lot on unsupported systems. In the configuration file, I removed the choice to compile with libnet. The use of libnet is still possible, but from now on it's not proposed as a solution for unsupported systems. ++ major evolutions of lcrzoex ++ none in this version ++ minor evolutions of lcrzoex ++ - The example 22 (Ethernet packet printing) is added in the sniff category. - In examples 48 to 53 (TCP spoof), the seqnum and acknum parameters are added. --------------------------------------------------------------------- Version 3.00 - 21-january-2001 - Translation of most of the library from French to English. - Most of the functions were remade, so the changelog for this version is far from being complete : I put only the major changes. - Standardization of error codes. An error string is now also available to explain error to users. - Creation of a private module containing all the private function which may be used by several functions in the library, but which are not sufficiently interesting to be proposed as public functions. - Add a boolean type (lcrzo_bool), and use it in all the functions - Creation of private functions allowing to open files securely (no symlink race, no privilege escalation, etc.). Use of theses functions in lcrzo_record module. - In lcrzo_sniff module, the number of function has been decreased because they were redondant. - The function doing the checksum returns now the checksum as an argument. - Optimization of all functions in lcrzo_list module. Creation of new functions in this module. For example it's now possible to directly insert a packet in a list, without using an intermediary structure. - Creation of new functions to deal with device, and to access them specifying which device type we want. - Homogenization of functions dealing with lcrzo_printtype and lcrzo_printprofile. - All the functions dealing with access of data within a range of possible values have now the following names : xx_count : count the number of elements xx_value_pos : get value at a position xx_value_first : get value at first position xx_value_last : get value at last position xx_loop_range : call a function for each value in the range xx_loop_all : call a function for every value - In the function decoding ARP packets, the arp header was set even if it was a NULL pointer. - In all the functions, in all the modules, a NULL pointer can now be used for all the optional parameters. - In few functions, input pointers were not const pointers. - Creation of global parameters allowing users to specify some internal functionalities for the library : for "real" hackers only. - All the function parameters are verified before been used. - Creation of the type lcrzo_spoof allowing an easy configuration of spoof functions : printprofile, fragment size, etc. - Creation of new print types and reorganization of lcrzo_print.c. - New module : lcrzo_data to perform all the data manipulation. The module lcrzo_string is now based on lcrzo_data. A lot of functions, working on data, was remade. - All the return values of close() or fclose() are tested. - All the examples were remade. --------------------------------------------------------------------- Below, lcrzo was in French, so the changelog is in French. Version 2.08 - 01/10/2000 - Ajout d'un exemple de synflood spoofant au niveau ethernet. - Ajout d'exemples permettant de compter les paquets. - Lorsque l'on spoofe au niveau IP, sur une machine puissante, le systeme se met a saturer (cf. bug_connus.txt). Ajout d'une parade temporaire dans lcrzo_sendraw_ip. - Creation du module lcrzo_temps comportant toutes les fonctions de gestion de temps. - Ajout du message d'erreur fourni par libpcap lorsqu'une erreur de pcap est affichee. - Creation du module lcrzo_string comportant les fonctions de traitement de chaines de caracteres : creation, recherche, expressions regulieres, etc. - Ajout d'un module lcrzo_global. Pour le moment, ce module n'a pas a etre employe par les utilisateurs. Ce module permettra de gerer la configuration de certaines fonctionnalites. - Ajout de fonctions permettant de creer des serveurs tcp multiclients : lcrzo_initsertcp_reelmulti lcrzo_initsertcp_reeloipmulti lcrzo_initsertcp_reelmultiinfos lcrzo_initsertcp_reeloipmultiinfos - Ajout d'un exemple analysant succinctement, a l'aide d'expressions regulieres, les bannieres des serveurs. --------------------------------------------------------------------- Version 2.07 - 17/09/2000 - Ajout d'un fichier vide dans le repertoire d'exemple afin de faciliter la creation du premier exemple par l'utilisateur (ex1.c). Complement du Makefile du repertoire d'exemple afin de pouvoir compiler rapidement n'importe quel fichier c : par exemple, pour compiler toto.c, il faut taper "make toto". - Ajout de trois types de plages : lcrzo_plageeth : plage d'adresses ethernet lcrzo_plageip : plage d'adresses ip lcrzo_plageport : plage d'adresses de ports Ces plages ont la syntaxe : lcrzo_plageeth : a:b:c:d:e:f 1:2:3:4:5:6-a:b:c:d:e:f 1:2:3:4:5:0/FF:FF:FF:FF:FF:0 1:2:3:4:5:0/40 1:2:3:4:5/FF:FF:FF:FF:FF:0 1:2:3:4:5/40 1:2:3:4:5:0%FF:FF:FF:FF:FF:0 1:2:3:4:5:0%40 1:2:3:4:5%FF:FF:FF:FF:FF:0 1:2:3:4:5%40 lcrzo_plageip : 1.2.3.4 1.2.3.4-5.6.7.8 1.2.3.0/255.255.255.0 1.2.3.0/24 1.2.3/255.255.255.0 1.2.3/24 1.2.3.0%255.255.255.O 1.2.3.0%24 1.2.3%255.255.255.O 1.2.3%24 lcrzo_plageport : 23 23-25 23- 0-21 1-21 -21 - Ajout des fonctions de conversions correspondantes. - Complement de genemake afin que le test du bug de ether_hostton soit automatiquement mene. Un warning s'affiche alors a l'utilisateur pour qu'il puisse, si il le desire, faire la modification de son fichier /etc/ethers. - Ajout des fonctions : - lcrzo_initcliudp_reelloc - lcrzo_initcliudp_reellocoip - lcrzo_initclitcp_reelloc - lcrzo_initclitcp_reellocoip Ces fonctions permettent de specifier un numero de port source pour les clients udp/tcp (il n'y a plus besoin d'utiliser les clients virtuels pour cela). - Reorganisation des noms des fonctions d'initialisation des clients et serveurs udp/tcp. --------------------------------------------------------------------- Version 2.06 - 10/09/2000 - Dans les fonctions de conversion d'adresse lcrzo_ipt2etht et lcrzo_etht2ipt, on interroge aussi : - le cache arp/rarp par le biais des procfs /proc/net/arp et /proc/net/rarp sous Linux. - "netstat -pn" sous Solaris. - Ajout des fonctions lcrzo_time_xxx gerant des mesures de temps, des pauses, etc. - Creation de lcrzo_optip et lcrzo_opttcp pour gerer les options. Mise a jour de toutes les fonctions et de tous les exemples utilisant des options. - Dans les fonctions lcrzo_get_etht et lcrzo_get_ipl, Solaris ne reconnaissait pas le device loopback "lo0", et l'adresse 127.0.0.1 ne lui etait pas associee. - Ajout d'un exemple de traceroute TCP. - Resolution d'un bug de libpcap. Ci-dessous, dans la modification de la "Version 1.12 - 01/05/2000", j'avais ecrit : "L'exemple 6 affichait "linux socket: Too many open files" apres avoir resolu plus de 240 adresses. Le probleme semble lie au processus fils de sniff des reponses arp. En utilisant _exit() au lieu de exit(), j'ai resolu le probleme, mais je sais pas pourquoi...". Apres avoir pris le temps d'analyser ce bug, il s'avere que la fonction "linux_restore_ifr" de "pcap-linux.c" (libpcap-0-5rel2) ne ferme pas le fd qu'elle ouvre : void linux_restore_ifr(void) { register int fd; fd = socket(PF_INET, SOCK_PACKET, htons(0x0003)); if (fd < 0) fprintf(stderr, "linux socket: %s", pcap_strerror(errno)); else if (ioctl(fd, SIOCSIFFLAGS, &saved_ifr) < 0) fprintf(stderr, "linux SIOCSIFFLAGS: %s", pcap_strerror(errno)); /*et ici, il n'y avait pas de close*/ close(fd); /*rajoute par Laurent dans libpcap.*/ } J'ai rajoute la section correspondante dans bugs_connus.txt, car ce bug ne peut etre corrige qu'en patchant libpcap. - L'affichage des bits reserves de l'entete TCP etait fait dans le sens inverse dans la fonction lcrzo_ecrit_hdrltcp. - Modification du module de liste afin de pouvoir passer des informations complementaires aux fonctions travaillant sur les elements. - Ajout des fonctions lcrzo_record_lit_boucleinfos, lcrzo_sniff_bouclefiltreinfos et lcrzo_sniff_boucleinfos permettant de passer des informations complementaires aux fonctions travaillant sur les elements. - Ajout de lcrzo_randinit permettant d'initialiser le generateur aleatoire avec /dev/random, /dev/urandom ou time^pids. Utilisation de lcrzo_randinit dans lcrzo_rand. - Dans lcrzo_sniff_init et lcrzo_sniff_initfiltre, la taille a passer a pcap_open_live devait aussi inclure la taille de l'entete ethernet. - Modification du module de sniff : - les fonctions peuvent etre bloquantes ou non - il y a trois type de sniff : LCRZO_TYPESNIFFNORMAL fournit tous les paquets sniffes, sans les modifier LCRZO_TYPESNIFFREASIP reassemble les fragments IP, et supprime les doublons IP LCRZO_TYPESNIFFREORTCP reassemble les fragments IP, supprime les doublons IP, et reordonne les paquets TCP - Utilisation des nouvelles fonctionnalites de sniff dans la gestion des clients/serveurs virtuels. --------------------------------------------------------------------- Version 2.05 - 20/08/2000 - Dans lcrzo_sendraw_ip, il y avait : retour=sendto(sock, paquet, nboctpaquet, 0, (struct sockaddr*)&soin, sizeof(soin)); au lieu de : (struct sockaddr*)&soin, sizeof(struct sockaddr)); Ca n'a jamais pose de souci, mais c'est plus logique. - Delocalisation de la parade contre le bug de Solaris 2.4, 2.5 et 2.5.1 de la fonction lcrzo_initpaquet_ipopttcpoptdata vers lcrzo_sendraw_ip. De plus, je me suis rendu compte que le probleme existe aussi pour le checksum des paquets udp. En resume, j'utilise maintenant : hdrltcp.check=hdrltcp.doff<<2; hdrludp.check=hdrludp.len; Si on met une valeur differente de celles calculees ci-dessus, le noyau Solaris envoie un checksum incorrect sur le reseau. Par contre, en lui envoyant la valeur ci-dessus, il calcule correctement le checksum. C'est un bug assez ennuyeux car il nous empeche d'envoyer un checksum falsifie : il faut utiliser pour cela lcrzo_sendraw_eth. - Ajout des fonctions lcrzo_sockoptip_xxx permettant de specifier des options IP pour des connexions udp ou tcp (client ou serveur). - Ajout d'exemples de clients tcp utilisant les fonctions lcrzo_sockoptip_xxx. - Renommage des fonctions : lcrzo_initoptip_time_time en lcrzo_initoptip_time lcrzo_initoptip_time_iptime en lcrzo_initoptip_timeip lcrzo_initoptip_time_ipptime en lcrzo_initoptip_timeipp lcrzo_decodeoptip_time_time en lcrzo_decodeoptip_time lcrzo_decodeoptip_time_iptime en lcrzo_decodeoptip_timeip lcrzo_decodeoptip_time_ipptime en lcrzo_decodeoptip_timeipp Cela permet de raccourcir et simplifier le nom des fonctions. - On peut maintenant utiliser lcrzo_initserveur_tcp pour ouvrir des ports identiques, sans avoir a attendre le "TIME_WAIT". - Dans l'exemple verifiant les checksum, on verifie aussi maintenant le checksum des fragments IP. - Ajout d'autres exemples permettant de construire des paquets en direct. - Lorsque des paquets tcp ou udp sont routes par la source (source routing), le calcul du checksum tcp/udp doit aussi se faire selon le contenu de l'option IP (et pas seulement selon l'adresse IP destination). C'est maintenant fait. - Dans les fonctions lcrzo_initpaquet_ipoptdata et lcrzo_initpaquet_ipopttcpoptdata, on verifie maintenant que la taille des options (ip et tcp) soit un multiple de 4. - Dans lcrzo_sendraw_ip, sous Solaris, les options ip ne passaient pas : il faut utiliser setsockopt. - Creation de structures contenant les entetes logiques. Toutes les fonctions de lcrzo utilisent ces entetes logiques. Il y a donc : - les entetes "logiques" : ce sont les entetes au format machine - les entetes "physiques" : ce sont les entetes au format reseau Par exemple, pour affecter le port source : - d'un entete UDP "logique", il faut faire hdrludp.sport=80; - d'un entete UDP "physique", il faut faire hdrpudp.sport=lcrzo_htons(80); Par exemple, pour lire le port source : - d'un entete UDP "logique", il faut faire valeur = hdrludp.sport; - d'un entete UDP "physique", il faut faire valeur = lcrzo_ntohs(hdrpudp.sport); Comme on peut le voir, les entetes logiques sont beaucoup plus simples a utiliser. D'un autre cote, les entetes physiques correspondent exactement a ce qui transite sur le reseau. Toutes les fonctions de lcrzo ont pour interface des entetes logiques, ce qui les rend simples d'emploi. Des entetes physiques sont aussi proposees, si vous desirez pouvoir acceder directement a des paquets reseau, sans utiliser des fonctions de lcrzo. - Suppression du parametre "data" dans toutes les fonctions traitant d'ARP. En effet, ce champ avait une utilisation "theorique", mais il ne sert a rien en pratique. Les fonctions : lcrzo_initpaquet_etharpdata lcrzo_decodepaquet_arpdata lcrzo_decodepaquet_etharpdata lcrzo_sendpaquet_etharpdata on donc ete renommees en : lcrzo_initpaquet_etharp lcrzo_decodepaquet_arp lcrzo_decodepaquet_etharp lcrzo_sendpaquet_etharp - Dans le programme contenant les exemples, le device par defaut correspond au systeme : eth0, le0, elx0, etc. - Ajout du module lcrzo_ipc. Les fonctions presentes dans ce module permettent de communiquer des donnees entre deux processus. Par exemple, on peut concevoir un programme ou un processus serait charge de sniffer le reseau, puis de passer les donnees interessantes a un autre processus, charge de spoofer des reponses. - Fusion des modules lcrzo_cliser et lcrzo_virtuel. Ces fonctions ont maintenant le meme interface. Ecriture/reecriture de nombreuses fonctions de ces modules. Reorganisation/reecriture des exemples correspondants. - Ajout de la fonction lcrzo_stdin_ipl permettant d'obtenir un ipl a partir de l'entree d'un utilisateur. - Ajout des informations demandees lors de l'affichage synthetique de requete/reponse arp/rarp. --------------------------------------------------------------------- Version 2.04 - 29/07/2000 - Creation des fonctions lcrzo_decodeoptip_xxx permettant de decoder des options IP. - Utilisation des fonctions lcrzo_decodeoptip_xxx dans la fonction d'affichage d'un entete IP. - Lorsque l'on fragmente des paquets IP contenant des options IP, ces options peuvent etre envoyees dans tous les paquets, ou seulement dans le premier paquet. Avant, dans les fonctions lcrzo_sendpaqfrag_xxx, j'utilisais une liste predeterminee pour savoir comment traiter les options. Maintenant, afin d'avoir un code generique, j'utilise la valeur du bit de poids fort du type d'option (rfc 791). - Ajout de fonctions traitant l'encodage base64 : Initialisation : lcrzo_initpaquet_base64("Ym9uam91cg==", donnees, &nboct); Affichage : lcrzo_affpaquet_data(donnees, nboct, LCRZO_TYPEAFF_BASE64); - Simplification de l'affichage des fonctions lcrzo_ecritinfos_xxx (ces fonctions avaient ete crees dans le but de deboguer lcrzo, mais maintenant elles ne servent plus a ca). - Ajout dans la fonction lcrzo_initclientvirtuel_tcp, du reset des connexions IDENT initiees par le serveur : on n'a plus a attendre le timeout de certains serveurs. - Ajout des fonctions lcrzo_sendpaqsimple_xxx. Ces fonctions envoient des paquets simples. En effet, dans la majorite des cas, on ne veut pas specifier l'id, la window, le type eth, etc. Ces fonctions permettent donc d'envoyer des paquets "classiques". - Utilisation des fonctions lcrzo_sendpaqsimple_xxx dans les exemples classiques. - Dans la fonction lcrzo_hs2ipt, on essaie d'abord d'utiliser lcrzo_ips2ipt avant de convertir de hs en ipt (car il y avait un timeout ennuyant sur certaines machines). - Modification de lcrzo_initpaquet_ipopttcpoptdata afin de contourner un bug du noyau Solaris 2.4, 2.5 et 2.5.1 qui apparait lorsque l'on envoie un paquet tcp avec un checksum different de 20 (c'est une erreur qui a ete corrigee a partir de la version 2.6 de Solaris). --------------------------------------------------------------------- Version 2.03 - 17/07/2000 - En utilisant des valeurs NULL pour les pointeurs de lcrzo_decodepaquet_xxx, les parametres correspondant ne sont pas affectes. Par exemple : lcrzo_decodepaquet_ipoptdata(paquet, nboctpaquet, &hdrip, NULL, NULL, data, &nboctdata); n'affecte pas les options IP (ainsi, si on ne s'en sert pas, on n'a plus besoin de les declarer). - Simplification de toutes les fonctions utilisant lcrzo_decodepaquet_xxx en passant "NULL" pour les parametres inutilises. - Erreur dans lcrzo_initpaquet_ipopttcpoptdata pour le calcul du checksum TCP : lorsqu'il y avait des options TCP, le calcul n'en tenait pas compte. --------------------------------------------------------------------- Version 2.02 - 14/07/2000 - Ajout de l'inclusion de <ctype.h> dans lcrzo_spoof.c lorsque l'on compile sous Solaris Intel. Un warning s'affichait. - Suppression de la definition du "lcrzo_hdrpseudo" dans lcrzo.h, car on ne s'en sert que pour les fonctions privees. - Creation de lcrzo_coderr.h contenant les codes d'erreur des fonctions de la bibliotheque (avant, ils etaient dans lcrzo.h). - Ajout du module lcrzo_ipopt permettant de creer des options IP : - lcrzo_initipopt_noop "no operation" - lcrzo_initipopt_lsrr "strict source routing and record route" - lcrzo_initipopt_ssrr "strict source routing and record route" - lcrzo_initipopt_rr "record route" - lcrzo_initipopt_time_time "timestamp type 0" - lcrzo_initipopt_time_iptime "timestamp type 1" - lcrzo_initipopt_time_ipptime "timestamp type 3" - Le ttl cree par lcrzo_initdefaut_hdrip est maintenant de 128 au lieu de 64. - Afin de faciliter la creation de paquets d'attaque, on ne recalcule, dans les fonctions lcrzo_initpaquet_xxx, les champs suivants que si leur valeur est differente de la valeur par defaut. Ainsi, - si l'utilisateur ne touche pas a la valeur, la valeur sera calculee pour lui - si l'utilisateur utilise une valeur autre que la valeur par defaut, on laisse cette valeur dans le paquet : cela permet de creer des paquets frauduleux. Les variables concernees sont (suivies de leur valeur par defaut) : hdreth.type 0 hdrip.totlen lcrzo_htons(20) hdrip.ihl 5 hdrip.check 0 hdrip.protocol 0 hdrudp.len lcrzo_htons(8) hdrudp.check 0 hdrtcp.doff 5 hdrtcp.check 0 hdricmp.check 0 Les autres variables des entetes ne sont pas du tout modifiees par la bibliotheque : la valeur entree par l'utilisateur est mise dans le paquet. - Ajout de fonctions permettant de creer des paquets fragmentes : lcrzo_sendpaqfrag_ipoptdata lcrzo_sendpaqfrag_ipoptudpdata lcrzo_sendpaqfrag_ipopttcpoptdata lcrzo_sendpaqfrag_ipopticmpdata lcrzo_sendpaqfrag_ethipoptdata lcrzo_sendpaqfrag_ethipoptudpdata lcrzo_sendpaqfrag_ethipopttcpoptdata lcrzo_sendpaqfrag_ethipopticmpdata - Initialisation de hs a "" si lcrzo_get_hs retourne une erreur. (ce n'etait pas fait dans le cas ou lcrzo_get_ipl retourne != LCRZO_ERR_OK). - Modification de lcrzo_stdin_paquet afin qu'elle en demande pas "Voulez-vous la chaine Vide ou la chaine par Defaut ?" si la chaine par defaut est vide. - Au lieu de laisser le noyau calculer le checksum IP dans lcrzo_initpaquet_ipoptdata, on le calcule. Cela permet de voir les valeurs contenues dans les paquets que l'on envoie (au lieu de voir "0000"). - Remise a plat de tous les exemples de lcrzoex.c. - Modification des fonctions lcrzo_strxxx afin qu'elles retournent un "int" et non un "void". - Restriction du format autorise pour lcrzo_strinit_ent et lcrzo_strappend_ent. Avant, une simple verification de contenu etait faite. Maintenant, le format doit correspondre a l'expression reguliere : "%[0+-.]{0,1}[1-9]{0,2}[l]{0,1}[douxX]" - La fonction lcrzo_checksum() retourne maintenant un checksum au format host (et non network). Il faut donc utiliser lcrzo_htons(resu) afin de mettre resu dans un paquet. C'est ainsi coherent avec le reste de la bibliotheque. --------------------------------------------------------------------- Version 2.01 - 14/06/2000 - Le programme de generation des "Makefile" a ete renomme en "genemake". L'ancien nom "configure" pouvait faire croire que tout se configurait selon le systeme : et non, il faut editer config.dat. J'en ai profite pour completer les tests effectues dans genemake. L'execution de genemake s'arrete des qu'un souci potentiel a ete rencontre. Un message explicatif indique ce qui ne va pas. - Prise en compte des systemes sur lesquels libnet est installe. Dans ce cas l'utilisateur peut choisir d'utiliser libnet : c'est cette bibliotheque qui sera utilisee pour les fonctions bas niveau. Cela peut aussi servir pour installer liblcrzo sur un systeme sur lequel elle n'a pas ete portee: HP-UX, etc. - Modification de lcrzo_spoof.c. Remplacement de : sock=socket(AF_INET, SOCK_PACKET, IPPROTO_RAW); Par : sock=socket(AF_INET, SOCK_PACKET, lcrzo_htons(ETH_P_ALL)); Dans la fonction lcrzo_sendraw_eth. - Modification des variables de preprocesseur concernant l'endianness Avant : #define LCRZODEF_ENDIAN "Big" mais, comme LCRZODEF_ENDIAN_Little n'etait pas defini ce n'etait pas pratique de l'employer directement dans du C. Maintenant : #define LCRZODEF_ENDIANLITTLE 0 #define LCRZODEF_ENDIANBIG 1 On peut donc utiliser LCRZODEF_ENDIANxxx pour des tests au niveau du preprocesseur, mais aussi dans du C : if (LCRZODEF_ENDIANLITTLE) ... - Reorganisation des fonctions lcrzo_snprintf, lcrzo_strnapp, lcrzo_strncat, lcrzo_strncpy. J'avais, entre-autres, des soucis de portabilite avec vsnprintf. Les fonctions de remplacement sont : lcrzo_strappend_str : ajout d'une chaine lcrzo_strinit_str : initialisation par une chaine lcrzo_strappend_car : ajout d'un caractere lcrzo_strinit_car : initialisation par un caractere lcrzo_strappend_ent : ajout d'un entier lcrzo_strinit_ent : initialisation par un entier - Modification de lcrzo_checksum afin que la fonction travaille sur un pointeur de caracteres et non un pointeur de word. - Remplacement de LCRZODEF_VERMAJ.LCRZODEF_VERMIN par LCRZODEF_VERSION. - Realignement de divers pointeurs. --------------------------------------------------------------------- Version 2.00 - 27/05/2000 - Comme la version 1.12 semble stable, je passe en version 2.00, et je commence a porter la bibliotheque. J'en profite aussi pour renommer la bibliotheque de rlc en lcrzo (qui signifie Laurent Constantin Reseau (RZO)). En effet, une recherche de RLC sur internet fournit beaucoup trop de resultats. - Portage sous FreeBSD effectue. - Portage sous Debian effectue. - Portage sous Solaris Intel effectue. - Modification de la procedure de generation des Makefile: creation de config.dat. - Deplacement de lcrzotest.c et modification de ce programme afin de pouvoir tester un intervalle. - Divers remaniement de repertoires et programmes. --------------------------------------------------------------------- --------------------------------------------------------------------- --------------------------------------------------------------------- Version 1.12 - 01/05/2000 - Ajout du module rlc_liste.c permettant de creer des listes chainees. - L'exemple 6 affichait "linux socket: Too many open files" apres avoir resolu plus de 240 adresses. Le probleme semble lie au processus fils de sniff des reponses arp. En utilisant _exit() au lieu de exit(), j'ai resolu le probleme, mais je sais pas pourquoi... D'apres la page d'aide, la seule difference est que exit() flushe les filedescriptors avant de les fermer. Si vous avez l'explication du pourquoi de ce bug, merci de me l'indiquer. - Ajout de l'exemple numero 7 qui ecoute ce qui passe sur le reseau et en deduit ou se trouvent les serveurs, les clients, etc. Lors de l'appui sur control-C, un resume de tous les paquets sniffes s'affiche. Cet exemple utilise les listes chainees pour stocker les informations. - Ajout des fonctions rlc_cmp_... permettant de comparer des adresses. --------------------------------------------------------------------- Version 1.11 - 24/04/2000 - Ajout des fonctions : void rlc_strncpy(char *dest, const char *src, rlc_uint32 taille); void rlc_strncat(char *dest, const char *src, rlc_uint32 taille); void rlc_strnapp(char *dest, rlc_uint32 taille, const char *src); void rlc_snprintf(char *dest, rlc_uint32 taille, const char *format, ...); Ces fonctions servent de substitut aux fonctions systeme qui ne sont pas homogenes et/ou adaptees a la securite (strncpy ne copie pas forcement le '\0' en fin, snprintf compte le '\0' contrairement aux strxxx, etc.). - Utilisation des fonctions ci-dessus dans toute la bibliotheque. - Amelioration des fonctions de conversion d'adresse eth<->ip Maintenant, on envoie aussi des requetes arp/rarp sur le reseau et on sniffe la reponse. De plus, on regarde si les adresses a resoudre sont celles de la machine locale. - Ajout d'un exemple permettant d'obtenir toutes les adresses ethernet d'un reseau. - Ajout d'un appel manquant a la fonction close dans rlc_ipt2etht et rlc_etht2ipt. - Ajout d'un exemple permettant de voir les numeros de sequence d'un serveur. --------------------------------------------------------------------- Version 1.10 - 17/04/2000 - Suppression d'un message de warning apparaissant en compilant avec gcc2.91 : j'avais "static faitsrand" au lieu de "static int faitsrand". - Creation du fichier src/INSTALL afin de separer la procedure d'install du blabla contenu dans le README. - Ajout d'une section "Problemes rencontres" dans le fichier INSTALL. --------------------------------------------------------------------- Version 1.9 - 08/04/2000 - Simplification de l'arborescence du serveur. Maintenant, je propose n versions tar_gzippees : rlcsrc-1.9.tgz : sources de la bibliotheque rlcdist.Linuxi386-1.9.tgz : version precompilee pour Linuxi386 rlcdist.FreeBSDi386-1.9.tgz : version precompilee pour FreeBSD - Creation d'une fonction privee pour remplacer les appels a fgets dans rlc_stdin.c. En effet, la fonction fgets n'a pas le meme fonctionnement sur les differentes versions de RedHat (un '\0' n'est pas ajoute en fin de chaine comme ecrit dans la page d'aide de la RedHat 5.0...). - Ajout des fonctions : rlc_initsniff rlc_initsnifffiltre rlc_sniff_suivant rlc_sniff_ferme Ces fonctions servent a initialiser un contexte de sniff, a obtenir les paquets du reseau et a fermer le contexte. Un exemple typique d'utilisation est : rlc_er(rlc_initsniff("eth0", 1500, &cs)); while(rlc_sniff_suivant(&cs, paquet, &nboct)==RLC_ERR_OK) { afficher_ce_paquet(paquet, nboct); } rlc_er(rlc_sniff_ferme(&cs)); - Ajout du type ethernet IP dans les fonctions rlc_initpaquet_eth... Cet ajout ne se fait que si le type n'etait pas deja defini : if (hdreth.type==0) hdreth.type=rlc_htons(RLC_ETHPROTO_IP); - Ajout de la prise en compte des options tcp. Ce parametre a ete ajoute aux fonctions : rlc_initpaquet_ipopttcpoptdata rlc_initpaquet_ethipopttcpoptdata rlc_decodepaquet_tcpoptdata rlc_decodepaquet_ipopttcpoptdata rlc_decodepaquet_ethipopttcpoptdata rlc_sendpaquet_ipopttcpoptdata rlc_sendpaquet_ethipopttcpoptdata - Creation du module rlc_virtuel.c. Ce module permet de creer des machines virtuelles : - simule une machine presente en repondant aux arp/rarp/ping - client udp virtuel - serveur udp virtuel - client tcp virtuel - serveur tcp virtuel Ces fonctions n'implementent pas des piles IP parfaites. Par exemple, le nombre de paquets ip recus dans le desordre ne doit pas exceder 10. De plus, la gestion des paquets fragmentes n'est pas encore assuree. Cependant, ces fonctions permettent de creer des machines virtuelles fonctionnant dans la majorite des cas. Par exemple, si un wrapper tcp est installe sur un serveur et que seules les machines de 192.168.10/24 sont autorisees a se connecter, il est possible de spoofer une connexion tcp en se faisant passer pour 192.168.10.56 - Ajout d'un autre exemple de machine repondant aux requetes - Lors du decodage de paquets IP ou ARP/RARP, on supprime les octets de bourrage en fin de paquet sniffes. Ces octets pouvaient tromper un utilisateur non averti. On etait oblige de regarder hdrip.totlen pour distinguer les octets du paquet des octets de bourrage. Maintenant, on ne voit plus les octets de bourrage. --------------------------------------------------------------------- Version 1.8 - 25/03/2000 - Uniformisation de l'affichage des donnees sous forme de tableaux : "0_1_2_3_.0_1_2_3_:0_1_2_3_.0_1_2_3_|..." 1 bit : "b " en binaire 4 bits : " dd " en decimal " Hh " en hexa " dd=Hh " en decimal et hexa 8 bits : " ddd " en decimal " HHh " en hexa " c " en caractere affichable ('.' sinon) " ddd=HHh " en decimal et hexa " ddd=HHh=c " en decimal, hexa et carac affichable 16 bits : ... Ainsi, une entete TCP est maintenant affichee comme suit : TCP___________________________________________________________... | port source | port destination... |____________0455h= 1109____________|____________0017h= 23__... | seq num ... |_________________________42193EA3h=1108950691________________... | ack num ... |_________________________9738B667h=2537076327________________... |dataoff | . . UrAk PuRsSyFi| window ... |___ 5___|___ 0____0_0_0_1__0_0_0_0_|____________7D78h=32120__... | checksum | pointeur urgent... |____________CA3Eh=51774____________|____________0000h= 0__... Cette modification permettra d'ecrire ulterieurement un algorithme pouvant relire ce format. - Ajout de la conversion de nombres binaires dans l'exemple 101. --------------------------------------------------------------------- Version 1.7 - 18/03/2000 - Ajout de la fonction rlc_get_mtu permettant de connaitre le mtu associe a une interface reseau. - Ajout de rlc_purgeblanc dans les fonctions du module rlc_config.c afin d'accepter des parametres pouvant contenir des espaces. - Utilisation de rlc_get_mtu dans les fonctions de sniff de l'exemple afin de ne plus avoir besoin de specifier la taille des donnees a sniffer. - Ajout d'un appel a la fonction close dans rlc_sendraw_eth et rlc_sendraw_ip. Cela empechait d'envoyer plus de nbmaxfiledescriptors paquets par programme. - Ajout d'un exemple de synflood. --------------------------------------------------------------------- Version 1.6 - 12/03/2000 - Homogeneisation du nom des fonctions. - Ajout de diverses fonctions au module config.c. - Ajout de rlc_ecritinfos_device. - Homogeneisation de l'ordre des parametres : filedesc_io, entree, parametres, valeurs_par_defaut, sortie - Homogeneisation des noms de parametre : pxx pointeur paquet tableau de donnees nboctpaquet nombre d'octets sock socket xxdefaut valeur par defaut ... --------------------------------------------------------------------- Version 1.5 - 06/03/2000 - Au lieu de definir le device en dur dans le programme d'exemple, on le demande maintenant sur la ligne de commande. Cela permet donc de sniffer sur eth1 a l'aide de l'exemple. - Utilisation d'un fichier temporaire pour l'option 104 de l'exemple (conversion unix_dos). Cela permet d'ecraser le fichier en entree avec par exemple : ./rlcex 104 1 nomfichier nomfichier --------------------------------------------------------------------- Version 1.4 - 01/03/2000 - Modification de rlc_stdin_presse et rlc_stdin_carac pour utiliser tcgetattr et ne plus avoir besoin d'appuyer sur entree pour saisir une touche. - Compilation de la bibliotheque avec -Wtraditional -Wshadow -Wid-clash-32 -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wnested-externs -Wmissing-prototypes -Wmissing-declarations -Werror Cette option de compilation n'est accessible que pour le developpeur de la bibliotheque. Les utilisateurs normaux compilent simplement avec -Wall (defini automatiquement par le ./configure). Diverses modifications ont donc ete apportees aux fonctions pour pouvoir compiler avec ces options strictes. Principalement, cela a consiste a ajouter des "const" pour tous les parametres non modifies. - Correction d'un bug dans l'exemple rlcex. Il y avait : nomprog=malloc(strlen(argv[0]+10)); au lieu de malloc(strlen(argv[0])+10); J'ai remplace ca par : nomprog=malloc(strlen(argv[0])+1+strlen(argv[1])+1); - Correction d'un bug dans l'exemple rlcex. Il y avait "if (argc==1)" au lieu de "if (argc==2)" pour l'option 61. - Ajout d'une notice en tete du fichier d'exemple : "Les programmes ci-dessous sont donnes en guise d'exemple et n'ont donc pas fait l'objet d'une conception ou d'un developpement approfondis. Des bugs sont peut etre presents." - Suppression des messages d'erreur des fonctions rlc_ecritadinfos Au lieu d'afficher l'erreur, on affiche maintenant l'adresse vide (ex : "0.0.0.0"). C'est plus joli. - Ajout du module rlc_device permettant de gerer des devices. - Ajout du module rlc_config permettant d'obtenir des informations sur la configuration de la machine: cartes reseau, hostname, etc. - Ajout de divers exemples : affichage de la configuration, conversion de fichier dos<->unix, etc. - Ajout de fonctions de comparaison d'adresse. - Ajout de la fonction rlc_purgeblanc qui permet de supprimer les espaces, tabulation, 0x0D et 0X0A et debut et en fin de chaine. - Utilisation de la fonction rlc_purgeblanc dans diverses autres fonctions. --------------------------------------------------------------------- Version 1.3 - 23/02/2000 - Correction d'un bug dans rlc_snifffiltre car la fonction pcap_next retourne NULL pour chaque paquet non matche. Cela empechait la fonction rlc_snifffiltre de fonctionner. Ce bug etait apparu dans la version 1.2. - Suppression de l'inclusion de libpcap.a dans librlc.a. Cela oblige maintenant a specifier "-lpcap -lrlc" sur la ligne de commande de gcc. Cependant, on obtient une structure plus standard. - Menage dans les differents fichiers makefile et configure : suppression des cas d'erreur, creation automatique pour une livraison, etc. - Modification interne des fonctions rlc_ecritpaquet_xxx afin d'uniformiser la procedure de fin d'affichage des paquets. --------------------------------------------------------------------- Version 1.2 - 20/02/2000 - Ajout du module rlc_paquet. Ce module permet de : - creer des paquets a l'aide d'entetes et de donnees (exemple : convertit entete_eth+entete_ip+entete_tcp+donnees en un tableau representant tout cela) - decomposer des paquets afin d'extraire les entetes et les donnees (exemple : convertit un tableau representant un paquet en entete_eth+donnees_eth) - Renommage des modules et relocalisation des fonctions : rlc_adconv -> rlc_adresse et rlc_ecrit rlc_paquet rlc_spoof rlc_sniff rlc_affpaq -> rlc_ecrit rlc_cliser rlc_stdin rlc_fich -> rlc_record - Creation des fonctions rlc_initpaquet_xxx permettant d'initialiser des paquets a l'aide de donnees aleatoires, hexa, texte ou mixtes - Modification de la syntaxe des chaines mixtes. Avant on avait : "bonjour" 04d F5a "cou""cou" Maintenant, il faut taper: 'bonjour' 04d F5a 'cou''cou' En effet, utiliser le ' au lieu du " presente deux avantages : - en C, c'est plus simple d'ecrire "'bonjour' 04d F5a 'cou''cou'" que "\"bonjour\" 04d F5a \"cou\"\"cou\"" - en ecrivant 'z', on comprend que l'on ecrit le caractere z Mais, en ecrivant "z", on pouvait mal comprendre, et croire que l'on voulait 'z' suivi de '\0' pour terminer le string - La fonction rlc_initheader_tcp met le bit "syn" a 0 et non plus a 1. - Les fonctions rlc_initpaquet_ipoptudpdata, ipopttcpdata, ipopticmpdata ont ete modifiees. Le checksum n'est calcule que si le checksum vaut zero, c'est a dire si il n'a jamais ete calcule. Cela peut servir pour envoyer sur le reseau des paquets dont le checksum serait incorrect. - Utilisation des fonctions de decodage du module rlc_paquet dans les fonctions rlc_ecritpaquet_xxx - Creation des types d'affichage et des profils d'affichage. Utilisation de ceux-ci en tant que parametre des fonctions affichant des donnees. - Creation des fonctions rlc_fich_litnumero et rlc_fich_litboucle qui permettent d'acceder a un paquet particulier du fichier de donnees ou de tous les parcourir. - Les fragments IP d'offset>0 sont affiches en tant que donnees (et non plus comme entete udp/tcp/icmp+donnees_udp/tcp/icmp) - Ajout du calcul automatique du checksumIP pour les fonctions rlc_initpaquet_ethip... car le noyau ne peut pas le faire. Le checksum n'est calcule que si il vaut zero. - Ajout de divers exemples. --------------------------------------------------------------------- Version 1.1 - 06/02/2000 - Ajout des messages d'erreur (errno et h_errno) dans la fonction rlc_ecriterr() afin d'indiquer la cause de l'erreur. - Ajout du commentaire suivant pour les fonctions rlc_sendraw_eth() et rlc_sendraw_ip() : Si le noyau est compile avec l'IP firewalling, la machine refuse d'emettre des paquets malformes (par exemple, tentative d'ecrasement de l'entete tcp a l'aide de fragments). On obtient alors une erreur lors de l'appel a la fonction sendto(). Il faut recompiler le noyau sans l'IP firewalling pour pouvoir emettre des paquets malformes. - Modification de la fonction d'affichage en dump afin de supprimer les '.' et '-' qui servaient de separateur. Ils ont ete remplaces par deux espaces. Avant, on avait : 72 6C 63 74.68 2C 20 32-2C 2C 30 78.00 2B 2B rlcth, 2,,0x.++ Maintenant, on a : 72 6C 63 74 68 2C 20 32 2C 2C 30 78 00 2B 2B rlcth, 2,,0x.++ Cela va permettre de faciliter les copier-coller, car il n'y a plus besoin de supprimer les '.' ou '-' pour passer les donnees a rlc_initpaquet_hexa() par exemple. - Ajout du module rlc_stdin. Ce module comporte des fonctions permettant de gerer les saisies clavier des utilisateurs : pression sur une touche, entier, caractere, chaine, chaine hexa, adresse ipt, adresse etht - Modification de rlc_sock_read() et rlc_sock_write() pour que les tailles soient du rlc_uint32 et non du rlc_uint16. - Creation des fonctions : rlc_verifbof_hs() rlc_verifbof_ips() rlc_verifbof_eths() rlc_verifbof_device() rlc_verifbof_paquet() Ces fonctions permettent de verifier les buffer overflow dans les variables de type rlc_hs, rlc_ips, rlc_eths, rlc_device et rlc_paquet. - Utilisation des fonctions rlc_verifbof_xxx dans la librairie. Toutes les fonctions de la bibliotheque devraient etre protegees contre les buffer overflow. Les programmes corrects, crees avec la bibliotheque rlc, peuvent donc etre suid root. Note : ce n'est pas encore le cas pour les programmes rlcex et rlctest, car ceux-ci n'ont pas ete ecrits afin que tous leurs parametres soient verifies : ce ne sont que des exemple d'utilisation de la bib. Il ne faut pas les mettre suid root. - Modification du programme de test et des exemples afin de prendre en compte les modifications ci-dessus. --------------------------------------------------------------------- Version 1.0 - 30/01/2000 Premiere version publique.