sniffer (Winpcap + MFC) (4) 를 한 걸음 한 걸음 개발 하려 면 프로 토 콜 헤드 - 각 층 네트워크 프로 토 콜 헤드 의 실현 을 남 겨 두 어야 합 니 다.
3985 단어 데이터 구조structtcp네트워크 프로 토 콜mfc
#ifndef PROTOCOL_H
#define PROTOCOL_H
#define PROTO_ICMP 1
#define PROTO_TCP 6
#define PROTO_UDP 17
#define LITTLE_ENDIAN 1234
#define BIG_ENDIAN 4321
//Mac 14
typedef struct ethhdr
{
u_char dest[6]; //6
u_char src[6]; //6
u_short type; //2
};
//ARP
typedef struct arphdr
{
u_short ar_hrd; //
u_short ar_pro; //
u_char ar_hln; //
u_char ar_pln; //
u_short ar_op; // ,1 2
u_char ar_srcmac[6]; // MAC
u_char ar_srcip[4]; // IP
u_char ar_destmac[6]; // MAC
u_char ar_destip[4]; // IP
};
// IP
typedef struct iphdr
{
#if defined(LITTLE_ENDIAN)
u_char ihl:4;
u_char version:4;
#elif defined(BIG_ENDIAN)
u_char version:4;
u_char ihl:4;
#endif
u_char tos; //TOS
u_short tlen; // u_short
u_short id; //
u_short frag_off; //
u_char ttl; //
u_char proto; //
u_short check; //
u_int saddr; //
u_int daddr; //
u_int op_pad; //
};
// IP
/*typedef struct iphdr
{
u_char ver_ihl;
u_char tos; //TOS
u_short tlen; // u_short
u_short id; //
u_short frag_off; //
u_char ttl; //
u_char proto; //
u_short check; //
u_int saddr; //
u_int daddr; //
u_int op_pad; //
};*/
// TCP
typedef struct tcphdr
{
u_short sport; // 16
u_short dport; // 16
u_int seq; // 32
u_int ack_seq; //
#if defined(LITTLE_ENDIAN)
u_short res1:4,
doff:4,
fin:1,
syn:1,
rst:1,
psh:1,
ack:1,
urg:1,
ece:1,
cwr:1;
#elif defined(BIG_ENDIAN)
u_short doff:4,
res1:4,
cwr:1,
ece:1,
urg:1,
ack:1,
psh:1,
rst:1,
syn:1,
fin:1;
#endif
u_short window; // 16
u_short check; // 16
u_short urg_ptr; // 16
u_int opt; //
};
/*typedef struct tcphdr
{
u_short sport; // 16
u_short dport; // 16
u_int seq; // 32
u_int ack_seq; //
u_short doff_flag; // 、 、
u_short window; // 16
u_short check; // 16
u_short urg_ptr; // 16
u_int opt; //
};*/
// UDP
typedef struct udphdr
{
u_short sport; // 16
u_short dport; // 16
u_short len; // 16
u_short check; // 16
};
// ICMP
typedef struct icmphdr
{
u_char type; //8
u_char code; //8
u_char seq; // 8
u_char chksum; //8
};
// IPv6
typedef struct iphdr6
{
//#if defined(BIG_ENDIAN)
u_int version:4, //
flowtype:8, //
flowid:20; //
/*#elif defined(LITTLE_ENDIAN)
u_int flowid:20, //
flowtype:8, //
version:4; //
//#endif*/
u_short plen; //
u_char nh; //
u_char hlim; //
u_short saddr[8]; //
u_short daddr[8]; //
};
// ICMPv6
typedef struct icmphdr6
{
u_char type; //8
u_char code; //8
u_char seq; // 8
u_char chksum; //8
u_char op_type; // :
u_char op_len; // :
u_char op_ethaddr[6]; // :
};
//
typedef struct pktcount
{
int n_ip;
int n_ip6;
int n_arp;
int n_tcp;
int n_udp;
int n_icmp;
int n_icmp6;
int n_http;
int n_other;
int n_sum;
};
//////////////////////////////////////////////////////////////////////////
//
typedef struct datapkt
{
char pktType[8]; //
int time[6]; //
int len; //
struct ethhdr* ethh; //
struct arphdr* arph; //ARP
struct iphdr* iph; //IP
struct iphdr6* iph6; //IPV6
struct icmphdr* icmph; //ICMP
struct icmphdr6* icmph6; //ICMPv6
struct udphdr* udph; //UDP
struct tcphdr* tcph; //TCP
void *apph; //
};
#endif
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.