#ifndef NET_H #define NET_H // ******* ETH ******* #define ETH_HEADER_LEN 14//длина заголовка ethernet - 14 байт, начиная с 0 байта данных // values of certain bytes: #define ETHTYPE_ARP_H_V 0x08// значение первого байта поля "Тип" - 8 #define ETHTYPE_ARP_L_V 0x06// и значение второго байта поля "Тип"-6 - ARP #define ETHTYPE_IP_H_V 0x08// значение первого байта поля "Тип" - 8 #define ETHTYPE_IP_L_V 0x00//и значение второго байта поля "Тип"-0 - IP // byte positions in the ethernet frame: // // Ethernet type field (2bytes): #define ETH_TYPE_H_P 12//поле "тип" начинается с 12 байта данных #define ETH_TYPE_L_P 13// второй бит поля "тип" -13 байт данных // #define ETH_DST_MAC 0// поле "мас-адрес получателя" начинается с 0 байта данных #define ETH_SRC_MAC 6// поле "мас-адрес источника" начинается с 6 байта данных // ******* ARP ******* #define ETH_ARP_OPCODE_REPLY_H_V 0x00// значение старшего байта поля "кода операции" 0 - arp #define ETH_ARP_OPCODE_REPLY_L_V 0x02//и значение младшего байта поля "кода операции" 2 - arp - ответ // #define ETHTYPE_ARP_L_V 0x06// значение второго байта поля "Тип"-6 - ARP // arp.dst.ip #define ETH_ARP_DST_IP_P 0x26//поле "IP-адрес получателя" начинается с 38 байта // arp.opcode #define ETH_ARP_OPCODE_H_P 0x14//поле "код операции" начинается с 20 байта #define ETH_ARP_OPCODE_L_P 0x15// 2-й байт поля "код операции" - 21 байт // arp.src.mac #define ETH_ARP_SRC_MAC_P 0x16//поле "MAC-адрес источника" начинается с 22 байта #define ETH_ARP_SRC_IP_P 0x1c//поле "IP-адрес источника" начинается с 28 байта #define ETH_ARP_DST_MAC_P 0x20//поле "MAC-адрес получателя" начинается с 32 байта #define ETH_ARP_DST_IP_P 0x26//поле "IP-адрес получателя" начинается с 38 байта // ******* IP *******//смещение относительно начала данных 13 байт #define IP_HEADER_LEN 20 // ip.src #define IP_SRC_P 0x1a//ip-адрес источника начинается с 26-го байта данных #define IP_DST_P 0x1e//ip-адрес получателя начинается с 30-го байта данных #define IP_HEADER_LEN_VER_P 0xe #define IP_CHECKSUM_P 0x18//поле "контрольная сумма" начинается с 24-го байта данных #define IP_TTL_P 0x16//22-й бит данных #define IP_FLAGS_P 0x14// поле "флаги" начинается с 20-го байта данных #define IP_P 0xe #define IP_TOTLEN_H_P 0x10//поле "общая длина" начинается с 16-го байта данных #define IP_TOTLEN_L_P 0x11//поле "общая длина" - 17-й байт данных #define IP_PROTO_P 0x17 //поле "протокол" начинается с 23-го байта данных #define IP_PROTO_ICMP_V 1// значение поля "протокол" равно 1 - icmp протокол #define IP_PROTO_TCP_V 6// значение поля "протокол" равно 6 - tcp протокол // 17=0x11 #define IP_PROTO_UDP_V 17// значение поля "протокол" равно 17 - udp протокол // ******* ICMP ******* #define ICMP_TYPE_ECHOREPLY_V 0//значение поля "тип" равно 0 - пинг-ответ #define ICMP_TYPE_ECHOREQUEST_V 8//значение поля "тип" равно 8 - пинг-запрос // #define ICMP_TYPE_P 0x22// поле "тип" начинается с 34 байта данных #define ICMP_CHECKSUM_P 0x24//поле "контрольная сумма" начинается с 36 байта данных //*********UDP********** #define UDP_HEADER_LEN 8// длина udp заголовка 8 байт // #define UDP_SRC_PORT_H_P 0x22//порт источника начинается с34 байта данных #define UDP_SRC_PORT_L_P 0x23//2 байт порта источника-35 байт данных #define UDP_DST_PORT_H_P 0x24//порт получателя начинается с 36 байта данных #define UDP_DST_PORT_L_P 0x25//2 байт порта источника-37 байт данных // #define UDP_LEN_H_P 0x26//поле "длина" начинается с 38 байта данных #define UDP_LEN_L_P 0x27//2 байт поля "длина" - 39 байт данных #define UDP_CHECKSUM_H_P 0x28//поле "контрольная сумма" начинается с 40 байта данных #define UDP_CHECKSUM_L_P 0x29//2 байт поля "контрольная сумма"-41 байт данных #define UDP_DATA_P 0x2a// данные начинаются с 42 байта данных // ******* TCP ******* #define TCP_SRC_PORT_H_P 0x22//старший байт поля "порт источника" - 34 байт данных #define TCP_SRC_PORT_L_P 0x23//младший байт поля "порт источника" - 35 байт данных #define TCP_DST_PORT_H_P 0x24//старший байт поля "порт назначения"- 36 байт данных #define TCP_DST_PORT_L_P 0x25//младший байт поля "порт назначения"- 37 байт данных #define TCP_SEQ_H_P 0x26//поле "номер последовательности" начинается с 38 байта данных #define TCP_SEQACK_H_P 0x2a//поле"номер подтверждения" начинается с 42 байта данных #define TCP_FLAGS_P 0x2f//поле "флаги" содержится в 47 байте данных #define TCP_FLAGS_SYN_V 2//присвоение флагам значений, соответствующих номерам разрядов,которые они занимают в 47 байте данных #define TCP_FLAGS_FIN_V 1 #define TCP_FLAGS_PUSH_V 8 #define TCP_FLAGS_SYNACK_V 0x12 #define TCP_FLAGS_ACK_V 0x10 #define TCP_FLAGS_PSHACK_V 0x18 #define TCP_HEADER_LEN_PLAIN 20//длина TCP заголовка без опций #define TCP_HEADER_LEN_P 0x2e// поле "смещение данных" начинается с 46 байта данных #define TCP_CHECKSUM_H_P 0x32//старший байт поля "контрольная сумма"- 50 байт данных #define TCP_CHECKSUM_L_P 0x33//младший байт поля "контрольная сумма"- 51 байт данных #define TCP_OPTIONS_P 0x36// поле "опции" начинается с 54 байта данных #endif