📄 ether.h
字号:
/* TFTP is UDP port 69... (see Stevens pg 206) */#define IPPORT_TFTP 69#define IPPORT_TFTPSRC 8888#define TFTP_NETASCII_WRQ 1#define TFTP_NETASCII_RRQ 2#define TFTP_OCTET_WRQ 3#define TFTP_OCTET_RRQ 4#define TFTP_DATAMAX 512#define TFTP_PKTOVERHEAD (ETHERSIZE + IPSIZE + UDPSIZE)#define TFTPACKSIZE (TFTP_PKTOVERHEAD + 4)/************************************************************************ * * DHCP stuff... * See RFCs 2131 & 2132 for more details. * Note that the values used for dhcpstate enum are based on the state * diagram in 3rd Edition Comer pg 375. Plus a few more so that I can * used the same enum for DHCP and BOOTP. * */#define BOOTPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \ sizeof(struct Udphdr) + sizeof(struct bootphdr))#define DHCPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \ sizeof(struct Udphdr) + sizeof(struct dhcphdr))#define IPPORT_DHCP_SERVER 67#define IPPORT_DHCP_CLIENT 68#define DHCPBOOTP_REQUEST 1#define DHCPBOOTP_REPLY 2#define USE_NULL 0#define USE_DHCP 1#define USE_BOOTP 2#define DHCP_VERBOSE (SHOW_DHCP|SHOW_INCOMING|SHOW_OUTGOING|SHOW_BROADCAST)/* DHCP Message types: */#define DHCPDISCOVER 1#define DHCPOFFER 2#define DHCPREQUEST 3#define DHCPDECLINE 4#define DHCPACK 5#define DHCPNACK 6#define DHCPRELEASE 7#define DHCPUNKNOWN 99/* DHCPState (short) values: (upper bit set = bootp) */#define DHCPSTATE_INITIALIZE 0x0001#define DHCPSTATE_SELECT 0x0002#define DHCPSTATE_REQUEST 0x0003#define DHCPSTATE_BOUND 0x0004#define DHCPSTATE_RENEW 0x0005#define DHCPSTATE_REBIND 0x0006#define DHCPSTATE_NOTUSED 0x0007#define DHCPSTATE_RESTART 0x0008#define BOOTP_MODE 0x8000#define BOOTPSTATE_INITIALIZE 0x8001#define BOOTPSTATE_REQUEST 0x8002#define BOOTPSTATE_RESTART 0x8003#define BOOTPSTATE_COMPLETE 0x8005/* DHCP Options */#define DHCPOPT_SUBNETMASK 1#define DHCPOPT_ROUTER 3#define DHCPOPT_HOSTNAME 12#define DHCPOPT_BROADCASTADDRESS 28#define DHCPOPT_VENDORSPECIFICINFO 43#define DHCPOPT_REQUESTEDIP 50#define DHCPOPT_LEASETIME 51#define DHCPOPT_MESSAGETYPE 53#define DHCPOPT_SERVERID 54#define DHCPOPT_PARMRQSTLIST 55#define DHCPOPT_CLASSID 60#define DHCPOPT_CLIENTID 61#define DHCPOPT_NISDOMAINNAME 64#define DHCPOPT_NISSERVER 65#define STANDARD_MAGIC_COOKIE 0x63825363 /* 99.130.83.99 */struct dhcphdr { unsigned char op; unsigned char htype; unsigned char hlen; unsigned char hops; unsigned long transaction_id; unsigned short seconds; unsigned short flags; unsigned long client_ip; unsigned long your_ip; unsigned long server_ip; unsigned long router_ip; unsigned char client_macaddr[16]; unsigned char server_hostname[64]; unsigned char bootfile[128]; unsigned long magic_cookie; /* Dhcp options would start here */};struct bootphdr { unsigned char op; unsigned char htype; unsigned char hlen; unsigned char hops; unsigned long transaction_id; unsigned short seconds; unsigned short unused; unsigned long client_ip; unsigned long your_ip; unsigned long server_ip; unsigned long router_ip; unsigned char client_macaddr[16]; unsigned char server_hostname[64]; unsigned char bootfile[128]; unsigned char vsa[64];};unsigned char *DhcpGetOption();/************************************************************************ * * DNS stuff... * * The area of the dnshdr structure beginning with the question array * is actually a variable sized area for four sections: * question, answer, authority and additional information. * For the monitor's implementation of DNS, it is simplified to need * only the question section because we are only using this to do * a standard DNS query (give a domain name to a server and wait for * a response that has the IP address). * So, for the sake of building a fixed size structure, we allocate a * 64 byte question section and assume that no single domain name request * will exceed that length. * Note: first byte of domain name is the size. */#define MAX_DOMAIN_NAME_SIZE 63struct dnshdr { unsigned short id; unsigned short param; unsigned short num_questions; unsigned short num_answers; unsigned short num_authority; unsigned short num_additional; unsigned char question[MAX_DOMAIN_NAME_SIZE+1];};/************************************************************************ * * TCP stuff... * */struct tcphdr { unsigned short sport; /* Source port */ unsigned short dport; /* Source port */ unsigned long seqno; /* Sequence number */ unsigned long ackno; /* Acknowledgment number */ unsigned short flags; /* Flags (lower 6 bits) */ unsigned short windowsize; /* Window size */ unsigned short tcpcsum; /* TCP checksum */ unsigned short urgentptr; /* Urgent pointer *//* options (if any) & data (if any) follow */};/* Masks for flags (made up of flag bits, reserved bits & header length): */#define TCP_FLAGMASK 0x003F#define TCP_RSVDMASK 0x0FC0#define TCP_HDRLENMASK 0xF000#define TCP_HLEN(tp) (((tp)->flags & TCP_HDRLENMASK) >> 10)/* Masks for flag bits within flags member: */#define TCP_FINISH 0x0001#define TCP_SYNC 0x0002#define TCP_RESET 0x0004#define TCP_PUSH 0x0008#define TCP_ACK 0x0010#define TCP_URGENT 0x0020/************************************************************************ * * Miscellaneous... * *//* Port that is used to issue monitor commands through ethernet. */#define MONRESPSIZE (sizeof(struct ether_header) + sizeof(struct ip) + \ sizeof(struct Udphdr) + idx)#define IPPORT_MONCMD 777/* Verbosity levels used by various ethernet layers: */#define SHOW_INCOMING 0x00000001#define SHOW_OUTGOING 0x00000002#define SHOW_HEX 0x00000004#define SHOW_BROADCAST 0x00000008#define SHOW_TFTP 0x00000010#define SHOW_DHCP 0x00000020#define SHOW_ARP 0x00000040#define SHOW_ASCII 0x00000080#define SHOW_BADCSUM 0x00000100#define SHOW_BADCSUMV 0x00000200#define SHOW_PHY 0x00000400#define SHOW_ALL 0xffffffff#define ETHER_INCOMING 1#define ETHER_OUTGOING 2extern char *Etheradd, *IPadd;extern unsigned char etheraddr[], ipaddr[];extern unsigned short MoncmdPort, TftpPort, TftpSrcPort;extern unsigned short DhcpClientPort, DhcpServerPort, DHCPState;extern int EtherVerbose, IPMonCmdActive, EtherIsActive;extern unsigned char BinEnetAddr[], BroadcastAddr[], BinIpAddr[];extern int EtherXFRAMECnt, EtherRFRAMECnt, EtherIPERRCnt, EtherUDPERRCnt;extern int pollethernet(void);extern int getAddresses(void);extern int IpToBin(char *,unsigned char *);extern int EtherToBin(char *,unsigned char *);extern char *extGetIpAdd(), *extGetEtherAdd();extern char *IpToString(unsigned long, char *);extern char *EtherToString(unsigned char *,char *);extern unsigned short ipId(void);extern unsigned char *ArpEther(unsigned char *,unsigned char *,int);extern unsigned char *getXmitBuffer();extern unsigned char *EtherFromCache(unsigned char *);extern void ipChksum(struct ip *), udpChksum(struct ip *);extern void tcpChksum(struct ip *);extern void printPkt(struct ether_header *,int,int);extern void printMem(unsigned char *,int);extern void DhcpBootpDone(int, struct dhcphdr *,int);extern void DhcpVendorSpecific(struct dhcphdr *);extern int sendBuffer(int);extern struct ether_header *EtherCopy(struct ether_header *);extern int EthernetStartup(int,int);extern int ValidDHCPOffer(struct dhcphdr *);extern int buildDhcpHdr(struct dhcphdr *);extern int printDhcpVSopt(int,int,char *);extern int RetransmitDelay(int);extern int tftpGet(unsigned long,char *,char *,char *,char *,char *,char *);extern void printDhcp(struct Udphdr *);extern int printIp(struct ip*);extern int printUdp(struct Udphdr *);extern void processPACKET(struct ether_header *,unsigned short);extern void processTCP(struct ether_header *,unsigned short);extern int processTFTP(struct ether_header *,unsigned short);extern int processICMP(struct ether_header *,unsigned short);extern char *processARP(struct ether_header *,unsigned short);extern int processDHCP(struct ether_header *,unsigned short);extern int processRARP(struct ether_header *,unsigned short);extern int SendICMPUnreachable(struct ether_header *,unsigned char);extern void enresetmmu(void), enreset(void);extern void ShowEtherdevStats(void), ShowTftpStats(void), ShowDhcpStats(void);extern void enablePromiscuousReception(void);extern void disablePromiscuousReception(void);extern int enselftest(int), polletherdev(void), EtherdevStartup(int);extern void DisableEtherdev(void);extern void tftpStateCheck(void), dhcpStateCheck(void);extern int DhcpIPCheck(char *);extern void dhcpDisable(void);extern void tftpInit(void);extern void disableBroadcastReception();extern void enableBroadcastReception();extern int SendIPMonChar(unsigned char,int);extern void DisableEthernet(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -