Namespaces   Class Hierarchy   Compound List   File List   Header Files   Compound Members   File Members   Examples  

usi++.h

This is the verbatim text of the usi++.h include file.

 
 

#define USI_VERSION 163


#ifndef _USIPP_H
#define _USIPP_H 1

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "pcap/pcap.h"
#include "usi-structs.h"


#define ICMP_PORT 0
#ifdef USI_FREEBSD
#define PPP_LEN 24
#else
#define PPP_LEN 4
#endif
#define SLIP_LEN 24
#define MAXHOSTLEN 1000


class Datalink {
private:
   	

	int datalink, framelen;
        pcap_t *pd;
        bpf_u_int32 localnet, netmask;
        
	struct bpf_program filter;
        struct pcap_pkthdr phdr;

        
        bool initialized;
        

protected:
   	char host[MAXHOSTLEN];
	struct usipp::ether_header ether;
        char filter_string[1000];

public:
   	Datalink();
	Datalink(char *);
        virtual ~Datalink();
        char *get_hwsrc(char *, int);
        char *get_hwdst(char *, int);
        int get_etype();
        int get_datalink();
        int get_framelen();
        const char *set_host(const char *);
        
        virtual int init_device(char *, int, int);
        virtual int setfilter(char *);
	virtual int sniffpack(char *, int);
};


class ARP : public Datalink {
private:
   	struct usipp::ether_arp arphdr;
   	
public:
   	ARP(char *, int);		// device, promisc
        virtual ~ARP();
   	char *get_sha(char *, int);	// get source hardware-address
        char *get_tha(char *, int);	// get target
        char *get_spa(int, char *, int);// get source protocol-adress
        char *get_tpa(int, char *, int);// get target protcol-address
        int get_op();			// get ARP-command
	
        virtual int sniffpack();
};
        



class IP : public Datalink {
private:
	struct usipp::iphdr iph;
	char ipOptions[40];
        struct sockaddr_in saddr;
        int rawfd;
	bool socketOpen;
        
        char *reassemble(char *, int, int *);
public:
      	IP(const char*, u_int8_t);	// IP("foo.foo");
        IP(u_int32_t, u_int8_t);	
        virtual ~IP();

      	u_int8_t get_hlen();
        u_int8_t get_vers();
        u_int8_t get_tos();
        u_int16_t get_totlen();
        u_int16_t get_id();
        u_int16_t get_fragoff();
        u_int16_t get_fflags();
        u_int8_t get_ttl();
        u_int8_t get_proto();
        u_int16_t get_sum();
        u_int32_t get_src();
        u_int32_t get_dst();
        char *get_src(int, char *, int);
	char *get_dst(int, char *, int);
        
        int set_hlen(u_int8_t);
        int set_vers(u_int8_t);
        int set_tos(u_int8_t);
        int set_totlen(u_int16_t);
        int set_id(u_int16_t);
        int set_fragoff(u_int16_t);
        int set_fflags(u_int16_t);
        int set_ttl(u_int8_t);
        int set_proto(u_int8_t);
        int set_sum(u_int16_t);	 // should NOT be used; just to be complete...
        int set_src(u_int32_t);
        int set_dst(u_int32_t);
        int set_src(const char*);
        int set_dst(const char*);

	virtual int sendpack(void*, int);
	virtual int sendpack(char*);
	virtual int recvpack(void*, int);
        virtual int sniffpack(void*, int);
	virtual int init_device(char*, int, int);

        
        friend unsigned short in_cksum(unsigned short*, int);
};



class ICMP : public IP {
private:
   	struct usipp::icmphdr icmphdr;
public:
      	ICMP(const char*);

        virtual int sendpack(void*, int);
        virtual int sendpack(char*);
        virtual int recvpack(void*, int);
        virtual int sniffpack(void*, int);
        
        virtual int init_device(char*, int, int);
        
        int set_type(u_int8_t);
        int set_code(u_int8_t);
        int set_icmpId(u_int16_t);
        int set_seq(u_int16_t);
        int set_gateway(u_int32_t);
        int set_mtu(u_int16_t);
        
        u_int8_t get_type();
        u_int8_t get_code();
        u_int16_t get_icmpId();
        u_int16_t get_seq();
        u_int32_t get_gateway();
        u_int16_t get_mtu();
};



class UDP : public IP {
private:
      struct usipp::udphdr udph;
      struct usipp::pseudohdr pseudo;
public:
      UDP(const char*);
      
      u_int16_t get_srcport();
      u_int16_t get_dstport();
      u_int16_t get_len();
      u_int16_t get_udpsum();
      
      int set_srcport(u_int16_t);
      int set_dstport(u_int16_t);
      int set_len(u_int16_t);
      int set_udpsum(u_int16_t);
          
      virtual int sendpack(void*, int);
      virtual int sendpack(char*);
      virtual int recvpack(void*, int);
      virtual int sniffpack(void*, int);
      
      virtual int init_device(char*, int, int);
};    





class TCP : public IP {
private:
      struct usipp::tcphdr tcph;
      char tcpOptions[40];
      struct usipp::pseudohdr pseudo;
public:
      TCP(const char*);
      
      u_int16_t get_srcport();
      u_int16_t get_dstport();
      u_int32_t  get_seq();
      u_int32_t  get_ack();
      u_int8_t get_off();
      u_int8_t get_flags();      
      u_int16_t get_win();
      u_int16_t get_tcpsum();
      u_int16_t get_urg();
      
      int set_srcport(u_int16_t);
      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);
      int set_tcpsum(u_int16_t);
      int set_urg(u_int16_t);
      
      virtual int recvpack(void*, int);
      virtual int sniffpack(void*, int);
      virtual int sendpack(void*, int);
      virtual int sendpack(char*);
      
      virtual int init_device(char*, int, int);
      
};

class usifault {
public:
   	usifault() {}
        ~usifault() {}
};


typedef enum {
	PERROR = 0,
	HERROR,
	PCAP,
	STDERR
} errorFuncs;

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 *);

#endif	// _USIPP_H


Generated at Sun Oct 10 13:51:35 1999 for libusi++ by doxygen  written by Dimitri van Heesch, © 1997-1999