/*
 * $Id: nemesis.h,v 1.2 2004/05/12 23:21:38 jnathan Exp $
 *
 * THE NEMESIS PROJECT
 * Copyright (C) 2001 - 2003 Jeff Nathan <jeff@snort.org>
 *
 * nemesis.h
 *
 */

#ifndef __NEMESIS_H__
#define __NEMESIS_H__

#if defined(HAVE_CONFIG_H)
    #include "config.h"
#endif

#include <libnet.h>

#ifndef IPTOS_LOWDELAY
#define IPTOS_LOWDELAY 0x10
#endif
#ifndef IPTOS_THROUGHPUT
#define IPTOS_THROUGHPUT 0x08
#endif
#ifndef IPTOS_RELIABILITY
#define IPTOS_RELIABILITY 0x04
#endif
#ifndef IPTOS_LOWCOST
#define IPTOS_LOWCOST 0x02
#endif
#ifndef TH_ECE
#define TH_ECE 0x40
#endif
#ifndef TH_CWR
#define TH_CWR 0x80
#endif

#ifndef ETHERTYPE_IPV6
#define ETHERTYPE_IPV6 0x86dd
#endif

#define STPUTC(c) putchar(c);
#define STPUTS(s) { const char *p; p = s; while(*p) STPUTC(*(p++)); }

#define ARPBUFFSIZE 1472

#define DNSTCP_RAWBUFFSIZE 65403    /* plan for IP and TCP options */
#define DNSTCP_LINKBUFFSIZE 1368    /* link-layer version of above */
#define DNSUDP_RAWBUFFSIZE 65455    /* plan for IP options */
#define DNSUDP_LINKBUFFSIZE 1420    /* link-layer version of above */

#define ETHERBUFFSIZE 1500          /* max frame size */

#define ICMP_RAWBUFFSIZE 65399      /* plan for IP options & max ICMP header 
                                       len */
#define ICMP_LINKBUFFSIZE 1364      /* link-layer version of above */

#define IGMP_RAWBUFFSIZE 65467      /* plan for IP options */
#define IGMP_LINKBUFFSIZE 1432      /* link-layer version of above */

#define IP_RAWBUFFSIZE 65475        /* plan for IP options */
#define IP_LINKBUFFSIZE 1440        /* link-layer version of above */

#define RIP_RAWBUFFSIZE 65451       /* plan for IP options & max RIP header 
                                       len */
#define RIP_LINKBUFFSIZE 1416       /* link-layer version of above */

#define TCP_RAWBUFFSIZE 65415       /* plan for IP and TCP options */
#define TCP_LINKBUFFSIZE 1380       /* link-layer version of above */

#define UDP_RAWBUFFSIZE 65467       /* plan for IP options */
#define UDP_LINKBUFFSIZE 1432       /* link-layer version of above */

#define BUILD 26                /* build number, update for each build */
#define FP_MAX_ARGS 4           /* number of IP fragment parsing tokens */
#define ERRBUFFSIZE 256
#define TITLEBUFFSIZE 81
#define WINERRBUFFSIZE 1024

#define HEX_ASCII_DECODE 0x02
#define HEX_RAW_DECODE 0x04

#define INJECTION_RAW 0x02
#define INJECTION_LINK 0x04

#define PAYLOADMODE 0
#define OPTIONSMODE 1
#define OPTIONSBUFFSIZE 40

typedef struct libnet_arp_hdr ARPhdr;
typedef struct libnet_as_lsa_hdr ASLSAhdr;
typedef struct libnet_auth_hdr AUTHhdr;
typedef struct libnet_dbd_hdr DBDhdr;
typedef struct libnet_dns_hdr DNShdr;
typedef struct libnet_ethernet_hdr ETHERhdr;
typedef struct libnet_icmp_hdr ICMPhdr;
typedef struct libnet_igmp_hdr IGMPhdr;
typedef struct libnet_ip_hdr IPhdr;
typedef struct libnet_lsa_hdr LSAhdr;
typedef struct libnet_lsr_hdr LSRhdr;
typedef struct libnet_lsu_hdr LSUhdr;
typedef struct libnet_ospf_hdr OSPFhdr;
typedef struct libnet_ospf_hello_hdr OSPFHELLOhdr;
typedef struct libnet_net_lsa_hdr NETLSAhdr;
typedef struct libnet_rip_hdr RIPhdr;
typedef struct libnet_rtr_lsa_hdr RTRLSAhdr;
typedef struct libnet_sum_lsa_hdr SUMLSAhdr;
typedef struct libnet_tcp_hdr TCPhdr;
typedef struct libnet_udp_hdr UDPhdr;
typedef struct libnet_vrrp_hdr VRRPhdr;

extern char zero[ETHER_ADDR_LEN];
extern char one[ETHER_ADDR_LEN];
extern char title[TITLEBUFFSIZE];
extern char errbuf[ERRBUFFSIZE];
extern char *pcap_outfile;
extern char *validtcpflags;
extern const char *version;
extern int verbose;
extern int got_link;
extern int got_ipoptions;
extern int got_tcpoptions;

typedef struct _FileData
{
    int32_t file_s;         /* file size */
    u_int8_t *file_mem;     /* pointer to file memory */
} FileData;

/* support functions */
u_int32_t xgetint32(const char *);
u_int16_t xgetint16(const char *);
u_int8_t xgetint8(const char *);
//int gmt2local(time_t);
int nemesis_name_resolve(char *, u_int32_t *);
int nemesis_check_link(ETHERhdr *, char *);
int nemesis_getdev(int, char **);
char *nemesis_lookup_linktype(int);
int nemesis_seedrand(void);
int parsefragoptions(IPhdr *, char *);

#if defined(WIN32) || !defined(HAVE_INET_ATON)
    int inet_aton(const char *, struct in_addr *);
#endif
#if defined(WIN32) || !defined(HAVE_GETOPT)
    int getopt(int, char * const *argv, const char *);
#endif
#if defined(WIN32) || !defined(HAVE_STRLCAT)
        size_t strlcat(char *, const char *, size_t);
#endif
#if defined(WIN32) || !defined(HAVE_STRLCPY)
	    size_t strlcpy(char *, const char *, size_t);
#endif
#if defined(WIN32) || !defined(HAVE_STRSEP)
    char *strsep(char **, const char *);
#endif
#if defined(WIN32)
    void PrintDeviceList(const char *);
    void *GetAdapterFromList(void *, int);
    int getdev(int, char **);
    int winstrerror(LPSTR, int);
#endif

/* file I/O functions */
int builddatafromfile(const size_t, FileData *, const char *, 
        const u_int32_t);

/* printout functions */
void nemesis_hexdump(char *, u_int32_t, int);
void nemesis_device_failure(int, const char *);
void nemesis_maketitle(char *, const char *, const char *);
void nemesis_printeth(ETHERhdr *);
void nemesis_printarp(ARPhdr *);
void nemesis_printip(IPhdr *);
void nemesis_printtcp(TCPhdr *);
void nemesis_printudp(UDPhdr *);
void nemesis_printicmp(ICMPhdr *, int);
void nemesis_printrip(RIPhdr *);
void nemesis_printospf(OSPFhdr *);
void nemesis_printtitle(const char *);
void nemesis_usage(char *);

/* injection functions */
void nemesis_arp(int, char **);
void nemesis_dns(int, char **);
void nemesis_ethernet(int, char **);
void nemesis_icmp(int, char **);
void nemesis_igmp(int, char **);
void nemesis_ip(int, char **);
void nemesis_ospf(int, char **);
void nemesis_rip(int, char **);
void nemesis_tcp(int, char **);
void nemesis_udp(int, char **);

#endif /* __NEMESIS_H__ */


syntax highlighted by Code2HTML, v. 0.9.1