那曲檬骨新材料有限公司

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>基于W5500的NetBIOS應用實例資料下載

基于W5500的NetBIOS應用實例資料下載

2021-04-24 | pdf | 443.92KB | 次下載 | 2積分

資料介紹

一 實例背景最近一個做智能家居的朋友面臨這樣的一個煩惱,他想讓用戶通過智能手機在家里方便地控制家居設備,又想讓用戶免除下載安裝App的麻煩,通過瀏覽器直接打開設備內嵌的網頁便可實現控制。但是設備的IP地址都是通過家里的路由器自動獲得的,設備上又沒有屏幕來顯示其IP地址。問我有沒有辦法不輸入IP地址來實現瀏覽器訪問該設備網頁的辦法,就是類似DNS之類,但是無需連外網,只在家庭網絡內能訪問即可。這使我想起一個古老的協議,NetBIOS(Network Basic Input/Output System)。這個在上世紀80年代由IBM開發的協議,主要用于數十臺左右計算機組成的小型局域網,該協議的主要用途之一就是把計算機名稱解析為相應IP地址。如果每個設備有一個固定名字,在實現了NetBIOS的前提下,用戶在瀏覽器里輸入該設備的名字,然后通過NetBIOS解析,便可實現訪問該設備網頁的這個功能了。而且NetBIOS占用系統資源少,在單片機上運行不成問題。于是推薦這個朋友在他的設備上實現了NetBIOS協議,解決了他的煩惱。除了智能家居,在當下物聯網時代,想必還有其他應用也會遇到類似問題,就拿手頭的WIZnet-W5500評估板實現了一下NetBIOS,希望能對做網絡設備開發的朋友有所幫助。在用W5500實現之前,我們還是先在PC上看一下NetBIOS到底是一個什么東西。二NetBIOS協議我們知道在DOS命令下可以通過PING主機名獲得另外一臺電腦的IP地址,實際上就是通過NETBIOS進行的。在Windows操作系統中,默認情況下在安裝TCP/IP協議后會自動安裝NetBIOS。查看方法如下:本地連接屬性的中“高級TCP/IP設置”窗口中選擇“WINS”選項卡,在“NetBIOS設置”區域中就可以設置相應的NetBIOS,如圖1:Ping主機名的第一個數據包就是NBNS(NetBIOS Name Server),協議包,它是TCP/IP上的NetBIOS (NetBT)協議族的一部分,它在基于NetBIOS名稱訪問的網絡上提供主機名和地址映射方法。NBNS是動態DNS的一種,Microsoft的NBNS實現稱為WINS。NetBIOS的報文類型較多、結構復雜,不同的網絡環境及不同的用途中,會使用不同報文,可用端口進行區分,WINS協議中,NetBIOS名字報文、數據報報文及會話報文分別使用TCP 137、138和139端口。NetBIOS數據報有很多不同格式,主要取決于服務和信息類型,以及用以傳送NetBIOS數據報的傳輸協議。NetBIOS協議架構可見圖2,其中包含三種基本服務:NAME、SESSION和DATAGRAM,其中NAME所用協議就是NBNS協議。圖2:NetBIOS協議架構下面看一下WINS協議使用的報文NETBIOS的名字報文(NAME)的總體格式如表1:表1 NetBIOS名字報文格式事物ID(2bytes) 通用標志(2bytes) 問題記錄個數(2bytes) 回答記錄個數(2bytes) 權威記錄個數(2bytes) 附加記錄個數(2bytes) 問題記錄(若干字節) 回答記錄(若干字節) 權威記錄(若干字節) 附加記錄(若干字節)報文的前12字節總稱為NETBIOS名字報文的首部,通過首部我們可以判斷出是否為名字查詢的報文。NETBIOS名字報文中最常見的是攜帶問題記錄的報文,問題記錄的格式如表2:表2 NetBIOS名字報文中問題記錄格式問題名稱(若干字節)問題類型(2 bytes)問題類別(2bytes)通過攜帶問題記錄的報文,我們可以得到要查詢的名字字符,如果和本機名相符,就發送報文響應,響應中帶有IP地址,發送廣播的主機就會得到該IP地址。三W5500EVB實現NETBIOS名字報文解析了解了NETBIOS協議之后,下面就讓我們通過W5500EVB做一個嵌入NetBIOS的簡單實驗。實驗目的:通過在DOS下ping該設備名“WIZNRTW5500”,可以得到開發板的IP地址。 硬件環境 單片機:STM32F103RC,256K字節Flash,48K字節SRAM,2K字節EEPROM 以太網控制器:W5500,SPI接口與單片機相連 電源USB供電 硬件外設:板載LED 開發工具: Keil 測試軟件:串口調試助手,網絡調試助手看代碼之前,我們還是先來了解一下整個的程序流程,如圖3所示整個程序采用查詢方式,通過DHCP子程序成功獲取IP后可執行NBNS服務。同時W5500EVB設置成HTTP Server,可以接收,并處理TCP Client發來的數據圖3:主程序流程圖本文主要討論如何在單片機上實現NETBIOS名字解析服務,DHCP和TCP Server相關部分子程序在此不再詳細介紹,根據NETBIOS名字解析服務子程序流程圖(如圖4示),我們可以得知當查詢到137端口收到網絡的UDP數據包時,讀取數據包并進行判斷是否為NETBIOS名字報文,如果是就將解析出的名字與本機名比較,如果一致就回復報文。圖4:NBNS程序流程圖在此貼出NETBIOS部分代碼,要獲取完整代碼,請到http://pan.baidu.com/s/1nt9MQKh上進行下載。void do_netbios(void){unsigned char state;unsigned int len;1state = getSn_SR(NETBIOS_SOCK);switch(state){case SOCK_UDP:2if((len=getSn_RX_RSR(NETBIOS_SOCK))>0){unsigned char rem_ip_addr[4];uint16 rem_udp_port;3char netbios_name[NETBIOS_NAME_LEN+1];4NETBIOS_HDR* netbios_hdr;5NETBIOS_NAME_HDR* netbios_name_hdr;6len=recvfrom(NETBIOS_SOCK,(unsignedchar*)&netbios_rx_buf,len,rem_ip_addr,&rem_udp_port);printf(“rem_ip_addr=%d.%d.%d.%d:%d\r\n”,rem_ip_addr[0],rem_ip_addr[1],rem_ip_addr[2],rem_ip_addr[3],rem_udp_port);7netbios_hdr = (NETBIOS_HDR*)netbios_rx_buf;8netbios_name_hdr = (NETBIOS_NAME_HDR*)(netbios_hdr+1);/* if the packet is a NetBIOS name query question */9if(((netbios_hdr->flags& ntohs(NETB_HFLAG_OPCODE)) == ntohs(NETB_HFLAG_OPCODE_NAME_QUERY)) &&((netbios_hdr->flags & ntohs(NETB_HFLAG_RESPONSE)) == 0) &&(netbios_hdr->questions == ntohs(1))){printf(“netbios name query question\r\n”);/* decode the NetBIOS name */10netbios_name_decoding( (char*)(netbios_name_hdr->encname), netbios_name, sizeof(netbios_name));printf(“name is %s\r\n”,netbios_name);/* if the packet is for us */11if (strcmp(netbios_name, NETBIOS_W5500_NAME) == 0){uint8 ip_addr[4];NETBIOS_RESP *resp = (NETBIOS_RESP*)netbios_tx_buf;/* prepare NetBIOS header response */12resp->resp_hdr.trans_id= netbios_hdr->trans_id;resp->resp_hdr.flags= htons(NETB_HFLAG_RESPONSE |NETB_HFLAG_OPCODE_NAME_QUERY |NETB_HFLAG_AUTHORATIVE |NETB_HFLAG_RECURS_DESIRED);resp->resp_hdr.questions= 0;resp->resp_hdr.answerRRs= htons(1);resp->resp_hdr.authorityRRs= 0;resp->resp_hdr.additionalRRs = 0;/* prepare NetBIOS header datas */memcpy( resp->resp_name.encname, netbios_name_hdr->encname, sizeof(netbios_name_hdr->encname));resp->resp_name.nametype= netbios_name_hdr->nametype;resp->resp_name.type= netbios_name_hdr->type;resp->resp_name.cls= netbios_name_hdr->cls;resp->resp_name.ttl= htonl(NETBIOS_NAME_TTL);resp->resp_name.datalen= htons(sizeof(resp->resp_name.flags)+sizeof(resp->resp_name.addr));resp->resp_name.flags= htons(NETB_NFLAG_NODETYPE_BNODE);getSIPR(ip_addr);memcpy(resp->resp_name.addr,ip_addr,4);/* send the NetBIOS response */13sendto(NETBIOS_SOCK, (unsigned char*)resp, sizeof(NETBIOS_RESP), rem_ip_addr, rem_udp_port);printf(“send response\r\n”);}}}break;14case SOCK_CLOSED:close(NETBIOS_SOCK);socket(NETBIOS_SOCK,Sn_MR_UDP,NETBIOS_PORT,0);break;default:break;}}主要代碼解釋:第1、2段程序功能為通過SPI接口讀取NBNS Socket寄存器狀態,如果檢測建立了UDP連接,并且收到數據則進行NBNS服務。第3段定義了NetBIOS name緩存區,Netbios name長度為16。第4、5段定義了NetBIOS包頭和其name部分結構體變量。第6段為讀取137端口的UDP數據)netbios_rx_buf。接下來NBNS核心部分:第7、8兩段將接受緩存區數據對定義的包頭進行賦值,第9,10段,判斷數據NetBIOS包頭是否為名字查詢,如果是名字查詢則進行名字解析。第11行進行NetBIOS名字進一步比較。比較一致后,第12段程序準備回復NetBIOS包頭和內容。第13段,發送NetBIOS回復響應。第14段為檢測到NBNS Socket為SOCK_CLOSED,則打開137端口的UDP Socket。四實驗測試試驗中,我們通過W5500EVB對NetBIOS的解析,并用瀏覽器直接訪問設備名稱,來實現對設備的遠程訪問,以達實驗目的。下面就來看一下實驗測試全過程。首先,打開串口調試助手,運行DHCP相關程序。可看到圖5中所示,W5500EVB成功通過DHCP獲得可用IP地址。2. 在DOS下,ping W5500EVB設備名:WIZNET5500,可看到如圖6中,獲取設備IP地址為:192.168.1.100。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1AN158 GD32VW553 Wi-Fi開發指南
  2. 1.51MB   |  2次下載  |  免費
  3. 2嵌入式軟件開發符合ISO 26262 功能安全標準
  4. 1.61 MB  |  1次下載  |  免費
  5. 3AN148 GD32VW553射頻硬件開發指南
  6. 2.07MB   |  1次下載  |  免費
  7. 4PZT驅動開關電路
  8. 0.09 MB   |  1次下載  |  免費
  9. 5模擬電路仿真實現
  10. 2.94MB   |  1次下載  |  免費
  11. 6PCB繪制基礎知識
  12. 2.44MB   |  1次下載  |  免費
  13. 7EE-38:ADSP-2181 IDMA端口-周期竊取時序
  14. 75.0KB   |  次下載  |  免費
  15. 8EE-82:使用ADSP-2181 DSP的IO空間對另一個ADSP-2181進行IDMA引導
  16. 86.86KB   |  次下載  |  免費

本月

  1. 1ADI高性能電源管理解決方案
  2. 2.43 MB   |  452次下載  |  免費
  3. 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
  4. 5.67 MB   |  139次下載  |  1 積分
  5. 3基于STM32單片機智能手環心率計步器體溫顯示設計
  6. 0.10 MB   |  132次下載  |  免費
  7. 4美的電磁爐維修手冊大全
  8. 1.56 MB   |  24次下載  |  5 積分
  9. 5如何正確測試電源的紋波
  10. 0.36 MB   |  19次下載  |  免費
  11. 6感應筆電路圖
  12. 0.06 MB   |  10次下載  |  免費
  13. 7LZC3106G高性能諧振控制器中文手冊
  14. 1.29 MB   |  9次下載  |  1 積分
  15. 8萬用表UT58A原理圖
  16. 0.09 MB   |  9次下載  |  5 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935121次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420062次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233088次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73810次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
大发888wofacai官网| 八大胜百家乐官网现金网| 任你博百家乐官网娱乐城| 威尼斯人娱乐城吃饭| 百家乐官网注册下注平台| 赌百家乐澳门| 霍城县| 百家乐官网出千桌| 大发888真人网| 唐人街百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城网络百家乐| 百家乐官网太阳城怎么样| 博之道百家乐官网技巧| 裕昌太阳城业主论坛| 百家乐官网娱乐网会员注册| 大发888官方授权网| 风水24个向的意思| 竞彩比分| 优博百家乐官网的玩法技巧和规则 | 至尊百家乐官网娱乐| 大发888客户端下| 百家乐官网单机游戏免费下| 德州扑克怎么发牌| 百家乐是骗人吗| 百家乐官网注册| 柬埔寨百家乐的玩法技巧和规则| 百家乐官网最佳注码法| 大发888在线娱乐加盟合作| 百家乐官网加牌规| 皇城国际| 百家乐连锁| 百家乐官网讲坛汉献| 卡卡湾网上娱乐| 二代百家乐破解| 百家乐官网排名| 香港六合彩开奖历史记录| 百家乐牌机的破解法| 百家乐官网输了100万| 威尼斯人娱乐场骗人| 微信百家乐官网群二维码| 乐宝百家乐官网游戏|