久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6792|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

UDP發(fā)送數(shù)據(jù)包,注意IP校驗(yàn)和

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:82781 發(fā)表于 2015-6-13 16:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. 費(fèi)了好大勁!本來很簡(jiǎn)單,一個(gè)校驗(yàn)擦!
  2. 注意,一定要注意

  3. #include "ARP.h"
  4. #include "IP.H"
  5. #include "UDP.H"
  6. #include "ENC28J60_SPI.h"
  7. #include "ENC28J60_Send_Receive.h"
  8. #include "ENC28J60_Buff_Operation.h"
  9. #include "UART.H"
  10. /*******************************8


  11.    發(fā)送UDP數(shù)據(jù)包
  12.   指定目標(biāo)IP,本地IP,本地端口,目標(biāo)端口
  13.   還有數(shù)據(jù)大小,什么數(shù)據(jù),第幾個(gè)包
  14.         uchar *MAC_Target_add,//MAC地址。一般情況下由ARP計(jì)算得出
  15.                         uchar *IP_Source_add,//IP源地址
  16.         uchar *IP_Target_add,//IP目標(biāo)地址
  17.         uint   UDP_Source_Port,UDP源端口
  18.         uint   UDP_Target_Port,UDP目標(biāo)端口
  19.         uchar * UDP_Send_Data, UDP數(shù)據(jù)
  20.         uchar UDP_Send_Data_length UDP數(shù)據(jù)長(zhǎng)度
  21. **********************************/
  22. //Send_UDP_packet( ); //應(yīng)答
  23. void Send_UDP_packet(   uchar *MAC_Target_add,
  24.         uchar *IP_Target_add,
  25.         uchar *UDP_Source_Port,
  26.         uchar *UDP_Target_Port,
  27.         uchar *UDP_Send_Data,
  28.         uchar UDP_Send_Data_length
  29.        )
  30. {

  31. TypeDef_MAC_Frame_H xdata  MAC_Frame_H;//MAC定義一個(gè)結(jié)構(gòu)體頭
  32. TypeDef_IP_Frame_H  xdata  IP_Frame_H; //IP定義一個(gè)結(jié)構(gòu)體頭
  33. TypeDef_UDP_Frame_H xdata  UDP_Frame_H;//UDP定義數(shù)據(jù)結(jié)構(gòu)  
  34. xdata unsigned long a,b;
  35. xdata uchar i;
  36. xdata uint tab[10];
  37. xdata uint msb,lsb;
  38. xdata uchar  d;
  39. xdata uint da1;
  40. xdata uint da2;
  41. xdata uchar MSB_SUM,LSB_SUM;
  42. UDP_Frame_Set(&MAC_Frame_H,&IP_Frame_H,&UDP_Frame_H);//設(shè)置UDP相關(guān)參數(shù)
  43.      /*MAC目標(biāo)地址*/
  44.   MAC_Frame_H.Destination_MAC[0]=MAC_Target_add[0];
  45.   MAC_Frame_H.Destination_MAC[1]=MAC_Target_add[1];
  46.   MAC_Frame_H.Destination_MAC[2]=MAC_Target_add[2];
  47.   MAC_Frame_H.Destination_MAC[3]=MAC_Target_add[3];
  48.   MAC_Frame_H.Destination_MAC[4]=MAC_Target_add[4];
  49.   MAC_Frame_H.Destination_MAC[5]=MAC_Target_add[5];
  50.      /*IP目標(biāo)地址*/
  51.   IP_Frame_H.IP_Dstination[0]=IP_Target_add[0];
  52.   IP_Frame_H.IP_Dstination[1]=IP_Target_add[1];
  53.   IP_Frame_H.IP_Dstination[2]=IP_Target_add[2];
  54.   IP_Frame_H.IP_Dstination[3]=IP_Target_add[3];
  55.       //數(shù)據(jù)長(zhǎng)度,
  56.    /*這個(gè)長(zhǎng)度等于IP部首20字節(jié)+UDP部首8字節(jié)+UDP數(shù)據(jù),這里是1字節(jié)*/
  57.   IP_Frame_H.IP_Total_Length[0]=0;//設(shè)置總長(zhǎng)度
  58.   IP_Frame_H.IP_Total_Length[1]=0x1d;//設(shè)置總長(zhǎng)度  //29字節(jié)
  59.   /*計(jì)算IP部首校驗(yàn)和**/
  60.   IP_Frame_H.IP_Check_sum[0]=0;
  61.   IP_Frame_H.IP_Check_sum[1]=0; //先設(shè)置為0        
  62.    
  63.   
  64. msb=IP_Frame_H.IP_Version_Head; //IP的版本號(hào)和IP的部首長(zhǎng)度,默認(rèn)為0X45,版本是4,部首是20字節(jié)
  65.     msb=msb<<8;
  66. lsb=IP_Frame_H.IP_Tos; //ip的TOS據(jù)我抓包觀察一般是00
  67. tab[0]=msb+lsb;
  68. msb=IP_Frame_H.IP_Total_Length[0];//總數(shù)據(jù)報(bào)文長(zhǎng)度
  69. msb=msb<<8;
  70. lsb=IP_Frame_H.IP_Total_Length[1];//總數(shù)據(jù)報(bào)文長(zhǎng)度
  71. tab[1]=msb+lsb;
  72. msb=IP_Frame_H.IP_Indentification[0];//IP標(biāo)識(shí)字段,標(biāo)識(shí)字段唯一地標(biāo)識(shí)主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào)。通常每發(fā)送一份報(bào)文它的值就會(huì)加1
  73. msb=msb<<8;
  74. lsb=IP_Frame_H.IP_Indentification[1];
  75. tab[2]=msb+lsb;

  76.    msb=IP_Frame_H.IP_Flage_FRAGMENT_OFFSET[0];//標(biāo)志位和片偏移
  77.    msb=msb<<8;
  78.    lsb=IP_Frame_H.IP_Flage_FRAGMENT_OFFSET[1];//標(biāo)志位和片偏移
  79.     tab[3]=msb+lsb;
  80.     msb=IP_Frame_H.IP_TTL; //生存時(shí)間
  81.   msb=msb<<8;
  82. lsb=IP_Frame_H.IP_Protocol; //協(xié)議類型
  83. tab[4]=msb+lsb;
  84. msb=IP_Frame_H.IP_Check_sum[0];//部首校驗(yàn)和
  85. msb=msb<<8;
  86. lsb=IP_Frame_H.IP_Check_sum[0];//部首校驗(yàn)和
  87. tab[5]=msb+lsb;
  88.     msb=IP_Frame_H.IP_Source[0];//32IP位源地址
  89. msb=msb<<8;
  90. lsb=IP_Frame_H.IP_Source[1];//32IP位源地址
  91. tab[6]=msb+lsb;
  92. msb=IP_Frame_H.IP_Source[2];//32IP位源地址
  93. msb=msb<<8;
  94. lsb=IP_Frame_H.IP_Source[3];//32IP位源地址
  95. tab[7]=msb+lsb;
  96. msb=IP_Frame_H.IP_Dstination[0];//32位IP目標(biāo)地址
  97. msb=msb<<8;
  98. lsb=IP_Frame_H.IP_Dstination[1];//32位IP目標(biāo)地址
  99. tab[8]=msb+lsb;
  100. msb=IP_Frame_H.IP_Dstination[2];//32位IP目標(biāo)地址
  101. msb=msb<<8;
  102. lsb=IP_Frame_H.IP_Dstination[3];//32位IP目標(biāo)地址
  103. tab[9]=msb+lsb;
  104. /**我操原來是沒有清空變量草,費(fèi)了我一天時(shí)間,我說第一次運(yùn)行正確,其后不對(duì)
  105. 沒有清零!我擦我操!
  106. 2012年3月7日
  107. 日照高科園
  108. 王均偉*/   
  109.    a=0;
  110.    b=0;
  111.   for(i=0;i<10;i++)
  112.    {
  113.    a=a+tab[i]; //變量加
  114. b=a;//暫存A中
  115. b+=(a>>16)&0x0000ffff; //取高位與地位相加,并且加完了清0高八位
  116. }
  117.     b=~b; //取反
  118. da1=b;
  119. da2=da1;
  120. da2=(da2>>8)&0x00ff;
  121. //da=IP_Check_Sum_Verify(&IP_Frame_H); //計(jì)算IP部首校驗(yàn)和
  122. LSB_SUM=da1;
  123. MSB_SUM=da2;
  124. IP_Frame_H.IP_Check_sum[0]=MSB_SUM;
  125. IP_Frame_H.IP_Check_sum[1]=LSB_SUM; //寫入IP部首校驗(yàn)和


  126.   UDP_Frame_H.UDP_Source_Port[0]=UDP_Source_Port[0];
  127.   UDP_Frame_H.UDP_Source_Port[1]=UDP_Source_Port[1];//源端口是8080
  128.   UDP_Frame_H.UDP_Dstination_Port[0]=UDP_Target_Port[0];
  129.   UDP_Frame_H.UDP_Dstination_Port[1]=UDP_Target_Port[1];//目標(biāo)端口是8080
  130. //for(i=0;i<UDP_Send_Data_length;i++)  //等到多數(shù)據(jù)寫入時(shí)采用的測(cè)試只發(fā)送一個(gè)字節(jié)
  131.    UDP_Frame_H.UDP_Data[0]=UDP_Send_Data[0];//數(shù)據(jù)寫入

  132. /*              物理操作            */
  133. set_send_buffer_add(0x0200,0x023f);//緩沖區(qū)的大小設(shè)定,開始200結(jié)束1fff

  134. write_buffer_add(0x0200,0x0e);//控制字節(jié)
  135. //        MAC
  136. write_buffer_add(0x0201,MAC_Frame_H.Destination_MAC[0]);//
  137. write_buffer_add(0x0202,MAC_Frame_H.Destination_MAC[1]);//
  138. write_buffer_add(0x0203,MAC_Frame_H.Destination_MAC[2]);//
  139. write_buffer_add(0x0204,MAC_Frame_H.Destination_MAC[3]);//
  140. write_buffer_add(0x0205,MAC_Frame_H.Destination_MAC[4]);//   MAC目的地址
  141. write_buffer_add(0x0206,MAC_Frame_H.Destination_MAC[5]);//
  142. write_buffer_add(0x0207, MAC_Frame_H.Source_add_MAC[0]);//
  143. write_buffer_add(0x0208, MAC_Frame_H.Source_add_MAC[1]);//
  144. write_buffer_add(0x0209, MAC_Frame_H.Source_add_MAC[2]);//  MAC源地址
  145. write_buffer_add(0x020A, MAC_Frame_H.Source_add_MAC[3]);//
  146. write_buffer_add(0x020B, MAC_Frame_H.Source_add_MAC[4]);//
  147. write_buffer_add(0x020C, MAC_Frame_H.Source_add_MAC[5]);//
  148. write_buffer_add(0x020D, MAC_Frame_H.Type[0]);//   MAC類型
  149. write_buffer_add(0x020E, MAC_Frame_H.Type[1]);//
  150.    

  151.     //IP
  152. write_buffer_add(0x020F,IP_Frame_H.IP_Version_Head);//
  153. write_buffer_add(0x0210,IP_Frame_H.IP_Tos);//
  154. write_buffer_add(0x0211,IP_Frame_H.IP_Total_Length[0]);
  155. write_buffer_add(0x0212,IP_Frame_H.IP_Total_Length[1]);
  156. write_buffer_add(0x0213,IP_Frame_H.IP_Indentification[0]);
  157. write_buffer_add(0x0214,IP_Frame_H.IP_Indentification[1]);
  158. write_buffer_add(0x0215,IP_Frame_H.IP_Flage_FRAGMENT_OFFSET[0]);
  159. write_buffer_add(0x0216,IP_Frame_H.IP_Flage_FRAGMENT_OFFSET[1]);
  160. write_buffer_add(0x0217,IP_Frame_H.IP_TTL);
  161. write_buffer_add(0x0218,IP_Frame_H.IP_Protocol);
  162. write_buffer_add(0x0219,IP_Frame_H.IP_Check_sum[0]);
  163. write_buffer_add(0x021A,IP_Frame_H.IP_Check_sum[1]);
  164. write_buffer_add(0x021B,IP_Frame_H.IP_Source[0]);
  165. write_buffer_add(0x021C,IP_Frame_H.IP_Source[1]);
  166. write_buffer_add(0x021D,IP_Frame_H.IP_Source[2]);
  167. write_buffer_add(0x021E,IP_Frame_H.IP_Source[3]);
  168. write_buffer_add(0x021F,IP_Frame_H.IP_Dstination[0]);
  169. write_buffer_add(0x0220,IP_Frame_H.IP_Dstination[1]);
  170. write_buffer_add(0x0221,IP_Frame_H.IP_Dstination[2]);
  171. write_buffer_add(0x0222,IP_Frame_H.IP_Dstination[3]);

  172.        //UDP
  173. write_buffer_add(0x0223,UDP_Frame_H.UDP_Source_Port[0]);
  174. write_buffer_add(0x0224,UDP_Frame_H.UDP_Source_Port[1]);
  175. write_buffer_add(0x0225,UDP_Frame_H.UDP_Dstination_Port[0]);
  176. write_buffer_add(0x0226,UDP_Frame_H.UDP_Dstination_Port[1]);
  177. write_buffer_add(0x0227,UDP_Frame_H.UDP_Length[0]);
  178. write_buffer_add(0x0228,UDP_Frame_H.UDP_Length[1]);
  179. write_buffer_add(0x0229,UDP_Frame_H.UDP_check_sum[0]);
  180. write_buffer_add(0x022A,UDP_Frame_H.UDP_check_sum[1]);
  181.     //數(shù)據(jù)
  182. write_buffer_add(0x022B,UDP_Frame_H.UDP_Data[0]);
  183. write_ENC28J60_REG_SPI(ECON1,0x0c);//允許發(fā)送,允許接收
  184.   for(;;)
  185.   {

  186.    d=read_ENC28J60_REG_SPI(EIR);//讀取數(shù)據(jù)包接收標(biāo)志位
  187.    if((d&0x08)==0x08)break;  //發(fā)送完畢??OK退出ifNO死在里面
  188.   
  189.      }   




  190. }
  191. /*****************************
  192. 只有接收到一個(gè)請(qǐng)求后才會(huì)
  193. 發(fā)送一個(gè)arp應(yīng)答數(shù)據(jù)包,
  194. Receive_MAC_Source_add_MAC:源MAC,即本機(jī)MAC
  195. Receive_ARP_Frame_sender_IP :本機(jī)IP
  196. Receive_ARP_Frame_Target_IP:目標(biāo)IP
  197. ******************************/
  198. void Send_ARP_Answer_packet(uchar *Receive_MAC_Source_add_MAC,
  199.        uchar *Receive_ARP_Frame_sender_IP,
  200.        uchar *Receive_ARP_Frame_Target_IP
  201.        )
  202. {   
  203.     uchar  xdata d;
  204. TypeDef_ARP_Frame   xdata  ARP_Frame;
  205. TypeDef_MAC_Frame_H xdata  MAC_Frame_H;  //定義兩個(gè)類型結(jié)構(gòu)變量
  206.   /*傳遞了兩個(gè)結(jié)構(gòu)傳遞過去,設(shè)置完了在回來用
  207.   也是我頭回用結(jié)構(gòu)做程序
  208.   */
  209. ARP_Frame_Set(&ARP_Frame,&MAC_Frame_H);//加載ARP數(shù)據(jù)包
  210.       /*mac目標(biāo)地址*/
  211.     MAC_Frame_H.Destination_MAC[0]=*(Receive_MAC_Source_add_MAC);
  212.     MAC_Frame_H.Destination_MAC[1]=*(Receive_MAC_Source_add_MAC+1);
  213.     MAC_Frame_H.Destination_MAC[2]=*(Receive_MAC_Source_add_MAC+2);
  214.     MAC_Frame_H.Destination_MAC[3]=*(Receive_MAC_Source_add_MAC+3);
  215.     MAC_Frame_H.Destination_MAC[4]=*(Receive_MAC_Source_add_MAC+4);
  216.        MAC_Frame_H.Destination_MAC[5]=*(Receive_MAC_Source_add_MAC+5);
  217.         /*發(fā)送者IP*/
  218. ARP_Frame.sender_IP[0]=Receive_ARP_Frame_Target_IP[0];
  219. ARP_Frame.sender_IP[1]=Receive_ARP_Frame_Target_IP[1];
  220. ARP_Frame.sender_IP[2]=Receive_ARP_Frame_Target_IP[2];
  221. ARP_Frame.sender_IP[3]=Receive_ARP_Frame_Target_IP[3];
  222.       /*mac目標(biāo)*/
  223. ARP_Frame.Target_MAC[0]=*(Receive_MAC_Source_add_MAC);
  224. ARP_Frame.Target_MAC[1]=*(Receive_MAC_Source_add_MAC+1);
  225. ARP_Frame.Target_MAC[2]=*(Receive_MAC_Source_add_MAC+2);
  226. ARP_Frame.Target_MAC[3]=*(Receive_MAC_Source_add_MAC+3);
  227. ARP_Frame.Target_MAC[4]=*(Receive_MAC_Source_add_MAC+4);
  228. ARP_Frame.Target_MAC[5]=*(Receive_MAC_Source_add_MAC+5);
  229.      /*目標(biāo)IP*/
  230. ARP_Frame.Target_IP[0]=Receive_ARP_Frame_sender_IP[0];
  231. ARP_Frame.Target_IP[1]=Receive_ARP_Frame_sender_IP[1];
  232. ARP_Frame.Target_IP[2]=Receive_ARP_Frame_sender_IP[2];
  233. ARP_Frame.Target_IP[3]=Receive_ARP_Frame_sender_IP[3];

  234.    set_send_buffer_add(0x0200,0x023f);//緩沖區(qū)的大小設(shè)定,開始200結(jié)束1fff

  235. write_buffer_add(0x0200,0x0e);//控制字節(jié)
  236. write_buffer_add(0x0201,MAC_Frame_H.Destination_MAC[0]);//
  237. write_buffer_add(0x0202,MAC_Frame_H.Destination_MAC[1]);//
  238. write_buffer_add(0x0203,MAC_Frame_H.Destination_MAC[2]);//
  239. write_buffer_add(0x0204,MAC_Frame_H.Destination_MAC[3]);//
  240. write_buffer_add(0x0205,MAC_Frame_H.Destination_MAC[4]);//   MAC目的地址
  241. write_buffer_add(0x0206,MAC_Frame_H.Destination_MAC[5]);//
  242. write_buffer_add(0x0207, MAC_Frame_H.Source_add_MAC[0]);//
  243. write_buffer_add(0x0208, MAC_Frame_H.Source_add_MAC[1]);//
  244. write_buffer_add(0x0209, MAC_Frame_H.Source_add_MAC[2]);//  MAC源地址
  245. write_buffer_add(0x020A, MAC_Frame_H.Source_add_MAC[3]);//
  246. write_buffer_add(0x020B, MAC_Frame_H.Source_add_MAC[4]);//
  247. write_buffer_add(0x020C, MAC_Frame_H.Source_add_MAC[5]);//
  248. write_buffer_add(0x020D, MAC_Frame_H.Type[0]);//   MAC類型
  249. write_buffer_add(0x020E, MAC_Frame_H.Type[1]);//
  250.    
  251. write_buffer_add(0x020F,ARP_Frame.Hardware_type[0]);//
  252. write_buffer_add(0x0210,ARP_Frame.Hardware_type[1]);//
  253. write_buffer_add(0x0211,ARP_Frame.Protocol_type[0]);
  254. write_buffer_add(0x0212,ARP_Frame.Protocol_type[1]);
  255. write_buffer_add(0x0213,ARP_Frame.Hardware_address_length);
  256. write_buffer_add(0x0214,ARP_Frame.Protocol_address_length);
  257. write_buffer_add(0x0215,ARP_Frame.Operation_code[0]);
  258. write_buffer_add(0x0216,ARP_Frame.Operation_code[1]);
  259. write_buffer_add(0x0217,ARP_Frame.sender_MAC[0]);
  260. write_buffer_add(0x0218,ARP_Frame.sender_MAC[1]);
  261. write_buffer_add(0x0219,ARP_Frame.sender_MAC[2]);
  262. write_buffer_add(0x021A,ARP_Frame.sender_MAC[3]);
  263. write_buffer_add(0x021B,ARP_Frame.sender_MAC[4]);
  264. write_buffer_add(0x021C,ARP_Frame.sender_MAC[5]);
  265. write_buffer_add(0x021D,ARP_Frame.sender_IP[0]);
  266. write_buffer_add(0x021E,ARP_Frame.sender_IP[1]);
  267. write_buffer_add(0x021F,ARP_Frame.sender_IP[2]);
  268. write_buffer_add(0x0220,ARP_Frame.sender_IP[3]);
  269. write_buffer_add(0x0221,ARP_Frame.Target_MAC[0]);
  270. write_buffer_add(0x0222,ARP_Frame.Target_MAC[1]);
  271. write_buffer_add(0x0223,ARP_Frame.Target_MAC[2]);
  272. write_buffer_add(0x0224,ARP_Frame.Target_MAC[3]);
  273. write_buffer_add(0x0225,ARP_Frame.Target_MAC[4]);
  274. write_buffer_add(0x0226,ARP_Frame.Target_MAC[5]);
  275. write_buffer_add(0x0227,ARP_Frame.Target_IP[0]);
  276. write_buffer_add(0x0228,ARP_Frame.Target_IP[1]);
  277. write_buffer_add(0x0229,ARP_Frame.Target_IP[2]);
  278. write_buffer_add(0x022A,ARP_Frame.Target_IP[3]);
  279. write_ENC28J60_REG_SPI(ECON1,0x0c);//允許發(fā)送,允許接收
  280.   for(;;)
  281.   {

  282.    d=read_ENC28J60_REG_SPI(EIR);//讀取數(shù)據(jù)包接收標(biāo)志位
  283.   //SendOneByte(d);調(diào)試
  284.    if((d&0x08)==0x08)break;  //發(fā)送完畢??OK退出ifNO死在里面
  285.   
  286.      }   
  287.    
  288. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 免费观看a级毛片在线播放 黄网站免费入口 | 一区中文字幕 | 中文字幕在线免费视频 | 日韩免费 | 日韩精品在线观看视频 | 男女啪啪高潮无遮挡免费动态 | 成人精品一区二区三区 | 日日操操 | 91精品国产乱码麻豆白嫩 | 国产99视频精品免费播放照片 | 日韩视频免费看 | 啪啪毛片 | 国产精品福利久久久 | 久久久久久亚洲精品 | 九九综合 | 色综合天天综合网国产成人网 | 日本特黄a级高清免费大片 成年人黄色小视频 | 黄色片网站在线观看 | 日本久久久久久久久 | 久久久高清 | 巨大黑人极品videos精品 | 你懂的在线视频播放 | 成人免费视频网站在线观看 | 国内激情av片 | 精品国产欧美一区二区 | 视频1区2区| 久久久精品网 | 偷拍亚洲色图 | www国产精品 | 欧美日韩一区二区视频在线观看 | 国产一区久久精品 | 99re热精品视频| 亚洲精品一区中文字幕乱码 | 亚洲欧美男人天堂 | 国产黄色一级片 | 国产亚洲成av人片在线观看桃 | 久久高清精品 | 欧美三级视频在线观看 | 久草色视频 | 狠狠av| 国产日韩欧美中文字幕 |