已知網路位址查詢MAC位址

2021-07-30 15:56:28 字數 3310 閱讀 4443

已知網路位址查詢mac位址

1、實驗內容: 協調器上電後建立網路,路由器自動加入網路。然後路由器呼叫呼叫相關的api函式獲得某一網路號節點的mac位址,然後通過串列埠將其傳送到pc端的串列埠除錯助手

2、知識補充:獲得某一網路號節點的mac位址的api函式。

zdp_ieeeaddrreq(uint16 shortaddr,byte reqtype,byte startindex,byte securtyenable);除了shortaddr這個引數外,其他均填0即可

3、程式設計

協調器程式設計(同1-11 實驗9 網路管理實驗1 獲取自身的和父節點網路位址、mac位址 的coordinator.c。

路由器程式設計(在同1-11 實驗9 網路管理實驗1 

獲取自身的和父節點網路位址、mac位址 的enddevice.c的基礎上新增、修改**

)。如下:

[cpp]view plain

copy

#include "osal.h"

#include "af.h"

#include "zdobject.h"

#include "zdprofile.h"

#include 

#include "coordinator.h"

#include "debugtrace.h"

#if !defined(win32)

#include "onboard.h"

#endif

#include "hal_lcd.h"

#include "hal_led.h"

#include "hal_key.h"

#include "hal_uart.h"

#define show_info_event 0x01

;  //初始化埠描述符

;  void showinfo(void);  

void to_string(uint8* dest,char* src,uint8 length);  

//增加這個函式的目的是對zdo_cb_msg訊息響應

typedef

struct rftxbuf  

rftx;  

//任務初始化函式

//訊息處理函式

break;  

default:  

break;  

}  osal_msg_deallocate((uint8*)msgpkt);  

}  return (events^sys_event_msg);  

}  if(events&show_info_event)  

return 0;  

}  ;  

switch(inmsg->clusterid)  

osal_mem_free(prsp);//呼叫該函式釋放資料報緩衝區

}    

}  break;  

}  }  

void showinfo(void)  

;  uint16 nwk;  

nwk=nlme_getshortaddr();  

to_string(rftx.mynwk,(uint8*)&nwk,2);      //uint8*4 uint16=uint8*2

to_string(rftx.mymac,nlme_getextaddr(),8);//uint8*16 byte*8

nwk=nlme_getcoordshortaddr();  

to_string(rftx.pnwk,(uint8*)&nwk,2);  

nlme_getcoordextaddr(buf);  

to_string(rftx.pmac,buf,8);  

haluartwrite(0,"nwk:",osal_strlen("nwk:"));  

haluartwrite(0,rftx.mynwk,4);  

haluartwrite(0,"  mac:",osal_strlen("  mac:"));  

haluartwrite(0,rftx.mymac,16);  

haluartwrite(0,"  p-nwk:",osal_strlen("  p-nwk:"));  

haluartwrite(0,rftx.pnwk,4);  

haluartwrite(0,"  p-mac:",osal_strlen("  p-mac:"));  

haluartwrite(0,rftx.pmac,16);  

haluartwrite(0,changline,2);   

}  void to_string(uint8 *dest,char* src,uint8 length)//二進位制書轉化為十六進製制數

}  新增**有:

1、呼叫zdp_ieeeaddrrsp()函式傳送位址請求。

[cpp]view plain

copy

zdp_ieeeaddrreq(0x0000,0,0,0);//請求協調器ieee位址

2、等待協調器傳送自身的ieee位址(協議棧自動完成,無需新增**)

3、新增zdo_cb_msg訊息相應函式,並呼叫zdo_parseaddrrsp()函式對資料報進行解析得到所需的ieee位址。

[cpp]view plain

copy

新增zdo_cb_msg訊息相應函式

[cpp]view plain

copy

while(msgpkt)  

;  switch(inmsg->clusterid)  

osal_mem_free(prsp);//呼叫該函式釋放資料報緩衝區

}    

}  break;  

}  }  

上面的[cpp]view plain

copy

zdo_nwkieeeaddrresp_t* prsp=zdo_parseaddrrsp(inmsg);//對接受到的資料報進行解析,解析完後prsp指向資料報的存放位址

該函式的返回值型別為

zdo_nwkieeeaddrresp_t,該結構體如下:

//  filename:       zdobject.h

typedef struct

zdo_nwkieeeaddrresp_t;

4、實驗結果

網路位址與主機位址

小竅門 子網的計算 在思科網路技術學院ccna教學和考試當中,不少同學在進行ip位址規劃時總是很頭疼子網和掩碼的計算。現在給大家乙個小竅門,可以順利的解決這個問題。首先,我們看乙個ccna考試中常見的題型 乙個主機的ip位址是202.112.14.137,掩碼是255.255.255.224,要求計...

IEEE位址和網路位址

zigbee2007協議棧中提到64位ieee位址 長位址 和16位網路位址 短位址 ieee位址是64位,在裝置進入網路之前就分配好了的,應該在全球是唯一的,而網路位址是在網路建立後,裝置加入網路時,它的父節點給它分配的,在裝置通訊時,首先由ieee位址找到裝置的網路位址,然後根據網路位址實現裝置...

網路位址劃分

網路位址可以分為網路號和主機號,主機號又可以分為子網號和子網主機號。ip位址分為五類,a類保留給 機構,b類分配給中等規模的公司,c類分配給任何需要的人,d類用於組播,e類用於實驗,各類可容納的位址數目不同。1 特徵 a 0 b 10xx c 110x d 1110 e 11110 2 各類位址的劃...