设为首页 加入收藏

TOP

VC++实现TCP与UDP链接(一)
2013-04-24 12:11:47 来源: 作者: 【 】 浏览:935
Tags:实现 TCP UDP 链接

  我们亲自来实现获取所有的TCP与UDP的网络链接。

  [cpp]

  [cpp]

  <p>/*</p><p>定义协议格式

  定义协议中使用的宏</p><p> */</p><p>

  #ifndef __PROTOINFO_H__

  #define __PROTOINFO_H__</p><p>

  #define ETHERTYPE_IP    0x0800

  #define ETHERTYPE_ARP   0x0806</p><p>typedef struct _ETHeader         // 14字节的以太头

  {

  UCHAR dhost ;   // 目的MAC地址destination mac address

  UCHAR shost ;   // 源MAC地址source mac address

  USHORT type;    // 下层协议类型,如IP(ETHERTYPE_IP)、ARP(ETHERTYPE_ARP)等

  } ETHeader, *PETHeader;</p><p>

  #define ARPHRD_ETHER  1</p><p>// ARP协议opcodes

  #define ARPOP_REQUEST 1  // ARP 请求

  #define ARPOP_REPLY  2  // ARP 响应</p><p>

  typedef struct _ARPHeader  // 28字节的ARP头

  {

  USHORT hrd;    // 硬件地址空间,以太网中为ARPHRD_ETHER

  USHORT eth_type;   //  以太网类型,ETHERTYPE_IP ??

  UCHAR maclen;    // MAC地址的长度,为6

  UCHAR iplen;    // IP地址的长度,为4

  USHORT opcode;    // 操作代码,ARPOP_REQUEST为请求,ARPOP_REPLY为响应

  UCHAR smac ;   // 源MAC地址

  UCHAR saddr ;   // 源IP地址

  UCHAR dmac ;   // 目的MAC地址

  UCHAR daddr ;   // 目的IP地址

  } ARPHeader, *PARPHeader;</p><p>

  // 协议

  #define PROTO_ICMP    1

  #define PROTO_IGMP    2

  #define PROTO_TCP     6

  #define PROTO_UDP     17</p><p>typedef struct _IPHeader  // 20字节的IP头

  {

  UCHAR     iphVerLen;      // 版本号和头长度(各占4位)

  UCHAR     ipTOS;          // 服务类型

  USHORT    ipLength;       // 封包总长度,即整个IP报的长度

  USHORT    ipID;     // 封包标识,惟一标识发送的每一个数据报

  USHORT    ipFlags;       // 标志

  UCHAR     ipTTL;       // 生存时间,就是TTL

  UCHAR     ipProtocol;     // 协议,可能是TCP、UDP、ICMP等

  USHORT    ipChecksum;     // 校验和

  ULONG     ipSource;       // 源IP地址

  ULONG     ipDestination;  // 目标IP地址

  } IPHeader, *PIPHeader; </p><p>

  // 定义TCP标志

  #define   TCP_FIN   0x01

  #define   TCP_SYN   0x02

  #define   TCP_RST   0x04

  #define   TCP_PSH   0x08

  #define   TCP_ACK   0x10

  #define   TCP_URG   0x20

  #define   TCP_ACE   0x40

  #define   TCP_CWR   0x80</p><p>typedef struct _TCPHeader  // 20字节的TCP头

  {

  USHORT sourcePort;   // 16位源端口号

  USHORT destinationPort; // 16位目的端口号

  ULONG sequenceNumber;  // 32位序列号

  ULONG acknowledgeNumber; // 32位确认号

  UCHAR dataoffset;   // 高4位表示数据偏移

  UCHAR flags;    // 6位标志位

  //FIN - 0x01

  //SYN - 0x02

  //RST - 0x04

  //PUSH- 0x08

  //ACK- 0x10

  //URG- 0x20

  //ACE- 0x40

  //CWR- 0x80</p><p> USHORT windows;   // 16位窗口大小

  USHORT checksum;   // 16位校验和

  USHORT urgentPointer;  // 16位紧急数据偏移量

     

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇VC++基于LSP拦截数据封包 下一篇VC++实现获取DNS服务器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: