⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usi-structs.h

📁 xprobe package sources code
💻 H
字号:
/*** 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 <sys/types.h>#include <stdio.h>#include <sys/socket.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/inet.h>extern "C" {#include <pcap.h>}#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		#define ETH_P_PUP	0x0400		// Xerox PUP packet		#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#define ARPHRD_HDLC	513		/* (Cisco) HDLC.  */#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 4struct 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    	u_int8_t th_x2:4;		// (unused)         u_int8_t th_off:4;		// data offset #elif __BYTE_ORDER == __BIG_ENDIAN    	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    	u_int32_t ihl:4;        u_int32_t version:4;#elif __BYTE_ORDER == __BIG_ENDIAN    	u_int32_t version:4;        u_int32_t ihl:4;#else# error	"Please fix <bits/endian.h>"#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_ 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -