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

📄 tcp.h

📁 SinFP是一种新的识别对方计算机操作系统类型的工具
💻 H
字号:
/* * tcp.h * * Transmission Control Protocol (RFC 793). * * Copyright (c) 2000 Dug Song <dugsong@monkey.org> * * $Id: tcp.h,v 1.17 2004/02/23 10:02:11 dugsong Exp $ */#ifndef DNET_TCP_H#define DNET_TCP_H#define TCP_HDR_LEN	20		/* base TCP header length */#define TCP_OPT_LEN	2		/* base TCP option length */#define TCP_OPT_LEN_MAX	40#define TCP_HDR_LEN_MAX	(TCP_HDR_LEN + TCP_OPT_LEN_MAX)#ifndef __GNUC__# define __attribute__(x)# pragma pack(1)#endif/* * TCP header, without options */struct tcp_hdr {	uint16_t	th_sport;	/* source port */	uint16_t	th_dport;	/* destination port */	uint32_t	th_seq;		/* sequence number */	uint32_t	th_ack;		/* acknowledgment number */#if DNET_BYTESEX == DNET_BIG_ENDIAN	uint8_t		th_off:4,	/* data offset */			th_x2:4;	/* (unused) */#elif DNET_BYTESEX == DNET_LIL_ENDIAN	uint8_t		th_x2:4,			th_off:4;#else# error "need to include <dnet.h>"#endif	uint8_t		th_flags;	/* control flags */	uint16_t	th_win;		/* window */	uint16_t	th_sum;		/* checksum */	uint16_t	th_urp;		/* urgent pointer */};/* * TCP control flags (th_flags) */#define TH_FIN		0x01		/* end of data */#define TH_SYN		0x02		/* synchronize sequence numbers */#define TH_RST		0x04		/* reset connection */#define TH_PUSH		0x08		/* push */#define TH_ACK		0x10		/* acknowledgment number set */#define TH_URG		0x20		/* urgent pointer set */#define TH_ECE		0x40		/* ECN echo, RFC 3168 */#define TH_CWR		0x80		/* congestion window reduced */#define TCP_PORT_MAX	65535		/* maximum port */#define TCP_WIN_MAX	65535		/* maximum (unscaled) window *//* * Sequence number comparison macros */#define TCP_SEQ_LT(a,b)		((int)((a)-(b)) < 0)#define TCP_SEQ_LEQ(a,b)	((int)((a)-(b)) <= 0)#define TCP_SEQ_GT(a,b)		((int)((a)-(b)) > 0)#define TCP_SEQ_GEQ(a,b)	((int)((a)-(b)) >= 0)/* * TCP FSM states */#define TCP_STATE_CLOSED	0	/* closed */#define TCP_STATE_LISTEN	1	/* listening from connection */#define TCP_STATE_SYN_SENT	2	/* active, have sent SYN */#define TCP_STATE_SYN_RECEIVED	3	/* have sent and received SYN */#define TCP_STATE_ESTABLISHED	4	/* established */#define TCP_STATE_CLOSE_WAIT	5	/* rcvd FIN, waiting for close */#define TCP_STATE_FIN_WAIT_1	6	/* have closed, sent FIN */#define TCP_STATE_CLOSING	7	/* closed xchd FIN, await FIN-ACK */#define TCP_STATE_LAST_ACK	8	/* had FIN and close, await FIN-ACK */#define TCP_STATE_FIN_WAIT_2	9	/* have closed, FIN is acked */#define TCP_STATE_TIME_WAIT	10	/* in 2*MSL quiet wait after close */#define TCP_STATE_MAX		11/* * Options (opt_type) - http://www.iana.org/assignments/tcp-parameters */#define TCP_OPT_EOL		0	/* end of option list */#define TCP_OPT_NOP		1	/* no operation */#define TCP_OPT_MSS		2	/* maximum segment size */#define TCP_OPT_WSCALE		3	/* window scale factor, RFC 1072 */#define TCP_OPT_SACKOK		4	/* SACK permitted, RFC 2018 */#define TCP_OPT_SACK		5	/* SACK, RFC 2018 */#define TCP_OPT_ECHO		6	/* echo (obsolete), RFC 1072 */#define TCP_OPT_ECHOREPLY	7	/* echo reply (obsolete), RFC 1072 */#define TCP_OPT_TIMESTAMP	8	/* timestamp, RFC 1323 */#define TCP_OPT_POCONN		9	/* partial order conn, RFC 1693 */#define TCP_OPT_POSVC		10	/* partial order service, RFC 1693 */#define TCP_OPT_CC		11	/* connection count, RFC 1644 */#define TCP_OPT_CCNEW		12	/* CC.NEW, RFC 1644 */#define TCP_OPT_CCECHO		13	/* CC.ECHO, RFC 1644 */#define TCP_OPT_ALTSUM		14	/* alt checksum request, RFC 1146 */#define TCP_OPT_ALTSUMDATA	15	/* alt checksum data, RFC 1146 */#define TCP_OPT_SKEETER		16	/* Skeeter */#define TCP_OPT_BUBBA		17	/* Bubba */#define TCP_OPT_TRAILSUM	18	/* trailer checksum */#define TCP_OPT_MD5		19	/* MD5 signature, RFC 2385 */#define TCP_OPT_SCPS		20	/* SCPS capabilities */#define TCP_OPT_SNACK		21	/* selective negative acks */#define TCP_OPT_REC		22	/* record boundaries */#define TCP_OPT_CORRUPT		23	/* corruption experienced */#define TCP_OPT_SNAP		24	/* SNAP */#define TCP_OPT_TCPCOMP		26	/* TCP compression filter */#define TCP_OPT_MAX		27#define TCP_OPT_TYPEONLY(type)	\	((type) == TCP_OPT_EOL || (type) == TCP_OPT_NOP)/* * TCP option (following TCP header) */struct tcp_opt {	uint8_t		opt_type;	/* option type */	uint8_t		opt_len;	/* option length >= TCP_OPT_LEN */	union tcp_opt_data {		uint16_t	mss;		/* TCP_OPT_MSS */		uint8_t		wscale;		/* TCP_OPT_WSCALE */		uint16_t	sack[19];	/* TCP_OPT_SACK */		uint32_t	echo;		/* TCP_OPT_ECHO{REPLY} */		uint32_t	timestamp[2];	/* TCP_OPT_TIMESTAMP */		uint32_t	cc;		/* TCP_OPT_CC{NEW,ECHO} */		uint8_t		cksum;		/* TCP_OPT_ALTSUM */		uint8_t		md5[16];	/* TCP_OPT_MD5 */		uint8_t		data8[TCP_OPT_LEN_MAX - TCP_OPT_LEN];	} opt_data;} __attribute__((__packed__));#ifndef __GNUC__# pragma pack()#endif#define tcp_pack_hdr(hdr, sport, dport, seq, ack, flags, win, urp) do {	\	struct tcp_hdr *tcp_pack_p = (struct tcp_hdr *)(hdr);		\	tcp_pack_p->th_sport = htons(sport);				\	tcp_pack_p->th_dport = htons(dport);				\	tcp_pack_p->th_seq = htonl(seq);				\	tcp_pack_p->th_ack = htonl(ack);				\	tcp_pack_p->th_x2 = 0; tcp_pack_p->th_off = 5;			\	tcp_pack_p->th_flags = flags;					\	tcp_pack_p->th_win = htons(win);				\	tcp_pack_p->th_urp = htons(urp);				\} while (0)#endif /* DNET_TCP_H */

⌨️ 快捷键说明

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