?? inet.h
字號:
#ifndef INET_H
#define INET_H
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/if_ether.h>
#include <net/ethernet.h>
#include <netinet/ether.h>
#ifndef __USE_BSD
#define __USE_BSD
#endif
#include <netinet/ip.h>
#ifndef __FAVOR_BSD
#define __FAVOR_BSD
#endif
#include <netinet/tcp.h>
#include <netinet/udp.h>
#define ETHERTYPE_8021Q 0x8100
/*****************************************************************************/
#define _ETHER_HDR(ether) \
((struct ether_header *)ether)
#define ETHER_TYPE(ether) \
ntohs(_ETHER_HDR(ether)->ether_type)
#define ETHER_TYPE_8021Q(ether) \
(ETHER_TYPE(ether) == ETHERTYPE_8021Q)
#define E8021Q_PACKET(packet)\
((char *)packet + sizeof(struct ether_header))
#define E8021Q_TYPE_IP(e8021q_packet) \
( ntohs(*((int *)((char *)e8021q_packet + 2 ))) == ETHERTYPE_IP )
#define ETHER_TYPE_IP(ether) \
(ETHER_TYPE(ether) == ETHERTYPE_IP)
#define ETHER_TYPE_ARP(ether) \
(ETHER_TYPE(ether) == ETHERTYPE_ARP)
#define ETHER_TYPE_RARP(ether) \
(ETHER_TYPE(ether) == ETHERTYPE_REVARP)
#define ETHER_SADDR(ether) \
(_ETHER_HDR(ether)->ether_shost)
#define ETHER_DADDR(ether) \
(_ETHER_HDR(ether)->ether_dhost)
/*
MAC地址的格式化輸出,對應(yīng)的格式字符串如下:
"%2X:%2X:%2X:%2X:%2X:%2X"
*/
#define _ETHER_ADDR_FORMAT(addr) \
addr[0] , addr[1] , addr[2] , addr[3] , addr[4] , addr[5]
#define ETHER_SADDR_FORMAT(ether) \
_ETHER_ADDR_FORMAT(ETHER_SADDR(ether))
#define ETHER_DADDR_FORMAT(ether) \
_ETHER_ADDR_FORMAT(ETHER_DADDR(ether))
/*****************************************************************************/
/*
調(diào)用之前,應(yīng)該確保ETHER_TYPE_IP(packet)為真
*/
#define IP_PACKET(packet) \
((char *)(packet) + sizeof(struct ether_header))
#define IP_HDR(ip_packet) \
((struct ip *)ip_packet)
#define IP_HDR_LEN(ip_packet) \
((IP_HDR(ip_packet)->ip_hl)<<2)
#define IP_VERSION(ip_packet) \
(IP_HDR(ip_packet)->ip_v)
#define IP_TOTAL_LEN(ip_packet) \
ntohs(IP_HDR(ip_packet)->ip_len)
#define IP_SADDR(ip_packet) \
((IP_HDR(ip_packet)->ip_src).s_addr)
#define IP_DADDR(ip_packet) \
((IP_HDR(ip_packet)->ip_dst).s_addr)
/*
IP地址格式化輸出,對應(yīng)的格式化字符串如下:
"%d.%d.%d.%d"
*/
#define _IP_ADDR_FORMAT(addr) \
(0x000000FF & (addr)), ((0x0000FF00 & (addr))>>8), \
((0x00FF0000 & (addr))>>16) ,((0xFF000000 & (addr))>>24)
#define IP_SADDR_FORMAT(ip_packet) \
_IP_ADDR_FORMAT(IP_SADDR(ip_packet))
#define IP_DADDR_FORMAT(ip_packet) \
_IP_ADDR_FORMAT(IP_DADDR(ip_packet))
#define IP_ID(ip_packet) \
(IP_HDR(ip_packet)->ip_id)
#define _IP_FRAG_OFF(ip_packet) \
(IP_HDR(ip_packet)->ip_off)
#define IP_FRAG_OFF(ip_packet) \
(ntohs(_IP_FRAG_OFF(ip_packet)) & IP_OFFMASK)
#define IP_FRAG_DONT(ip_packet) \
((_IP_FRAG_OFF(ip_packet) & IP_DF) == IP_DF)
#define IP_FRAG_MORE(ip_packet) \
((_IP_FRAG_OFF(ip_packet) & IP_MF) == IP_MF)
/* 未分片 */
#define IP_FRAG_NO(ip_packet) \
((IP_FRAG_OFF(ip_packet) == 0) && (IP_FRAG_MORE(ip_packet) == 0))
#define _IP_PROTO(ip_packet) \
(IP_HDR(ip_packet)->ip_p)
#define IP_PROTO_UDP(ip_packet) \
((_IP_PROTO(ip_packet)) == IPPROTO_UDP)
#define IP_PROTO_TCP(ip_packet) \
((_IP_PROTO(ip_packet)) == IPPROTO_TCP)
#define IP_PROTO_ICMP(ip_packet) \
((_IP_PROTO(ip_packet)) == IPPROTO_ICMP)
#define IP_PROTO_IGMP(ip_packet) \
((_IP_PROTO(ip_packet)) == IPPROTO_IGMP)
/*****************************************************************************/
/*
調(diào)用之前,應(yīng)該確保
ETHER_TYPE_IP(packet),
IP_PROTO_UDP(IP_HDR(IP_PACKET(packet)),
IP_FRAG_OFF(IP_PACKET(packet)) == 0
為真
*/
((char *)(IP_PACKET(packet)) + IP_HDR_LEN(IP_PACKET(packet)))
#define UDP_HDR(udp_packet) \
((struct udphdr *)(udp_packet))
#define UDP_SPORT(udp_packet) \
ntohs(UDP_HDR(udp_packet)->uh_sport)
#define UDP_DPORT(udp_packet) \
#define UDP_LEN(udp_packet) \
ntohs(UDP_HDR(udp_packet)->uh_ulen)
/*****************************************************************************/
/*
調(diào)用之前,應(yīng)該確保
ETHER_TYPE_IP(packet),
IP_PROTO_TCP(IP_HDR(IP_PACKET(packet)),
IP_FRAG_OFF(IP_PACKET(packet)) == 0
為真
*/
#define TCP_PACKET(packet) \
((char *)(IP_PACKET(packet)) + IP_HDR_LEN(IP_PACKET(packet)))
#define TCP_PACKET_FROMIP(ip_packet) \
((char *)(ip_packet + IP_HDR_LEN(ip_packet)))
#define TCP_HDR(tcp_packet) \
((struct tcphdr *)(tcp_packet))
#define TCP_SPORT(tcp_packet) \
ntohs(TCP_HDR(tcp_packet)->th_sport)
#define TCP_DPORT(tcp_packet) \
ntohs(TCP_HDR(tcp_packet)->th_dport)
#define TCP_SEQ(tcp_packet) \
ntohl(TCP_HDR(tcp_packet)->th_seq)
#define TCP_SEQ_ACK(tcp_packet) \
ntohl(TCP_HDR(tcp_packet)->th_ack)
#define TCP_ACK(tcp_packet) \
ntohl(TCP_HDR(tcp_packet)->th_ack)
#define TCP_HDR_LEN(tcp_packet) \
((TCP_HDR(tcp_packet)->th_off)<<2)
#define TCP_FLAGS(tcp_packet) \
(TCP_HDR(tcp_packet)->th_flags)
#define _TCP_FLAG_SET(tcp_packet , flag) \
((TCP_FLAGS(tcp_packet) & flag) == (flag))
#define TCP_FLAG_ACK(tcp_packet) \
(_TCP_FLAG_SET(tcp_packet , TH_ACK))
#define TCP_FLAG_PSH(tcp_packet) \
(_TCP_FLAG_SET(tcp_packet , TH_PUSH))
#define TCP_FLAG_RST(tcp_packet) \
(_TCP_FLAG_SET(tcp_packet , TH_RST))
#define TCP_FLAG_SYN(tcp_packet) \
(_TCP_FLAG_SET(tcp_packet , TH_SYN))
#define TCP_FLAG_FIN(tcp_packet) \
(_TCP_FLAG_SET(tcp_packet , TH_FIN))
#endif /* #ifndef INET_H */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -