inettype.h
上传用户:lvjun8202
上传日期:2013-04-30
资源大小:797k
文件大小:4k
源码类别:

SNMP编程

开发平台:

C/C++

  1. union w{
  2. unsigned long dwords;
  3. struct {unsigned int high;unsigned int low;}words;
  4. struct {unsigned char byte3;unsigned char byte2;unsigned char byte1;unsigned char byte0;}bytes;
  5. };
  6. union ethernet_address_type{
  7. unsigned int words[3];
  8. unsigned char bytes[6];
  9. };
  10. union ip_address_type{
  11. unsigned long dwords;
  12. unsigned int words[2];
  13. unsigned char bytes[4];
  14. };
  15. union arp_table_type{
  16. unsigned char bytes[12];
  17. unsigned int words[6];
  18. struct{
  19. unsigned char status;
  20. unsigned char ttl;
  21. union ip_address_type ip_address;
  22. union ethernet_address_type ethernet_address;
  23. }arp; //状态,生存时间,ip地址,以太网地址
  24. };
  25. //以太网帧                  
  26. struct ethernet{
  27. unsigned char status; //接收状态
  28. unsigned char nextpage; //下一个页
  29. unsigned int length; //以太网长度,以字节为单位
  30. unsigned int destnodeid[3]; //目的网卡地址
  31. unsigned int sourcenodeid[3]; //源网卡地址
  32. unsigned int protocal; //下一层协议
  33. unsigned char packet[1500]; //包的内容
  34. };
  35. //IP包   仅当IHL=5时用 当不=5时作转换
  36. struct ip{
  37. unsigned int head[9]; //以太网包头
  38. unsigned char verandihl; //版本与头长度
  39. unsigned char typeofserver; //服务类型
  40. unsigned int totallength; //总长度
  41. unsigned int frameindex; //IP帧序号
  42. unsigned int segment; //分段标志
  43. unsigned char ttl; //生存时间
  44. unsigned char protocal; //下一层协议
  45. unsigned int crc; //校验和
  46. unsigned int sourceip[2]; //源IP
  47. unsigned int destip[2]; //目的IP
  48. unsigned char packet[1484]; //IP包的内容
  49. };
  50. struct ippacket{
  51. unsigned int head[9]; //以太网包头
  52. unsigned int ippacket[750]; //IP包的内容
  53. };
  54.                 
  55. struct arp{
  56. unsigned int head[9];   //以太网头
  57. //arp报文的内容总长28字节
  58. unsigned int harewaretype; //以太网为0x0001
  59.     unsigned int protocaltype; //ip 为0X0800
  60.     unsigned char halength; //=0X06
  61.     unsigned char palength; //=0X04
  62.     unsigned int operation; //操作  0X0001为请求 0X0002为应答 0X0003为反向地址请求 0X0004为反向地址应答
  63.     unsigned int sourcenodeid[3]; //源网卡地址
  64. unsigned int sourceip[2]; //源IP地址
  65.     unsigned int destnodeid[3]; //目的网卡地址
  66. unsigned int destip[2]; //目的IP地址
  67. }; 
  68. struct icmp{ //包含在IP包中,是IP的上层为0X01的应用
  69. unsigned int head[9]; //以太网头
  70.     unsigned int iphead[10]; //IP头
  71.     unsigned char type; //0X08 PING请求 0X00 PING应答
  72.     unsigned char option; //0X00 PING
  73.     unsigned int crc;      
  74.     unsigned int id;
  75.     unsigned int seq;
  76.     unsigned char icmpdata[1472];
  77. };
  78. struct tcp{
  79. unsigned int head[9];
  80.     unsigned int iphead[10];
  81.     unsigned int sourceport; //源端口
  82.     unsigned int destport; //目的端口
  83.     unsigned long seqnumber; //顺序号
  84. unsigned long acknumber; //确认号
  85.     unsigned char offset; //数据偏移量
  86.     unsigned char control; //连接控制
  87.     unsigned int window; //流控
  88.     unsigned int crc; //校验和 ,包括伪头部,TCP头部,数据
  89.     unsigned int urg; //紧急指针
  90.     unsigned char tcpdata[1460]; //TCP数据
  91. };
  92. struct udp{
  93. unsigned int head[9];
  94.     unsigned int iphead[10];
  95.     unsigned int sourceport; //源端口
  96.     unsigned int destport; //目的端口
  97.     unsigned int length;    
  98.     unsigned int crc; //校验和 ,包括伪头部,udp头部,数据
  99.     unsigned char udpdata[1472]; //udp数据
  100. };
  101.              
  102. //所有协议的共用体
  103. union netcard{
  104. struct {unsigned char  bytebuf[1536];}bytes;
  105.     struct{ unsigned int wordbuf[768];}words;
  106.     struct ethernet etherframe;
  107.     struct arp arpframe;
  108.     struct icmp icmpframe;
  109.     struct tcp tcpframe;  
  110.     struct ip ipframe;
  111. struct udp udpframe;
  112.     struct ippacket ippacket;
  113. };