免费论文
收费论文
发表论文
我要投稿
设为首页 招标网
联系我们
经济学|管理学|法学|计算机|医学|教育|文学|政治|艺术|哲学|更多 经济学|管理学|法律|计算机|医学|教育|文学|政治|艺术|哲学|更多
 论文搜索
  推荐服务: 论文发表 收费论文
期刊论文格式
毕业论文格式
期刊论文范文
毕业论文范文
论文致谢
毕业论文答辩
开题报告
论文选题
英文摘要书写
获取远程主机MAC地址的新思路及实现
作者:佚名  时间:2007/11/25 12:35:00  来源:论文天下论文网

摘要:本文分析了利用SendARP方法(基于ARP协议)来获取远程主机MAC地址的缺陷,提出了一种新思路——研究并利用NetBIOS Name Service来快速获取远程主机MAC地址的方法,并给出了其在Borland Delphi6中的程序。

关键词:MAC地址,远程主机,NetBIOS,TNMUDP

1引  言
众所周知,在所有网卡信息中,最重要的莫过于网卡的MAC地址,即网卡的物理地址。MAC地址固化在网卡的ROM中,一般不易改动。因此在网络中需要监控一台计算机的最好的方法就是获取它的MAC地址。
那么,如何获取远程主机(Remote Host,即和本地主机不在同一个子网中的主机)的MAC地址呢?一般的资料认为:采用IpHelperAPI的SendARP方法,但根据笔者的实验观察,此种方法行不通——它只能获取“本网段”内主机的MAC地址,如果源主机与目的主机不在同一个网段内,则该方法就只能获取“网关”的MAC地址,而无法获取目的主机的MAC地址。这是由ARP协议的工作原理决定的。
2获取远程主机MAC地址的原理及分析
下面是利用NetBIOS协议来获取“远程主机(Remote host)”MAC地址的思路和实现方法。
大家都知道,NetBIOS(网络基本输入/输出系统)是一套用于网络通讯的调用接口,包含了NetBIOS Name和MAC地址等信息。NetBIOS并没有对下层使用的协议进行限制,因此它除了可以在NetBEUI支持下运行之外,还可以在其他协议支持下运行。其中NetBIOS Over IP由于使用TCP/IP协议,使远程主机之间的NetBIOS通信得以较好实现。
在NetBIOS Over IP通信过程中,可假定源主机A向远程目的主机B请求其“NetBIOS Names”信息。则两者之间的通信过程如下所示:
首先,主机A向主机B发送“UDP-NetBIOS-NS”询问包,即向主机B的137端口,发Query包来询问主机B的NetBIOS Names信息。
其次,主机B接收到“UDP-NetBIOS-NS”询问包,假设主机B正确安装了NetBIOS服务,而且137端口开放,则主机B会向主机A发送一个“UDP-NetBIOS-NS”应答包,即发Answer包给主机A。
分析主机B反馈给主机A的Answer包可知:其中不仅包含了主机B的NetBIOS Name信息,且包含了主机B的MAC地址。“UDP-NetBIOS-NS”应答包的结构及主要字段如下:
表1  “UDP-NetBIOS-NS”应答包的结构及主要字段一览表
序号      字段名      长度
1      Transaction ID      两字节(16位)
2      Flags      两字节(16位)
3      Questions      两字节(16位)
4      AnswerRRs      两字节(16位)
5      AuthorityRRs      两字节(16位)
6      AdditionalRRs      两字节(16位)
7      Name<Workstation/Redirector>      34字节(272位)
8      Type:NBSTAT      两字节(16位)
9      Class:INET      两字节(16位)
10      Time To Live      四字节(32位)
11      Length      两字节(16位)
12      Number of name      一个字节(8位)
     NetBIOS Name Info      18×Number Of Name字节
     Unit ID      6字节(48位)
     …     

其中,关键字段“Unit ID”(6字节)就是主机B的MAC地址。
因此可以设想:本地主机构造“UDP-NetBIOS-NS”询问包,并发送给远程主机,然后再接收“UDP-NetBIOS-NS”应答包,并对其分析以提取出远程主机的MAC地址,这样就可以获取 “远程主机”的MAC地址。
3获取远程主机MAC地址的实现
所以构造 “UDP-NetBIOS-NS”询问包,其结构如下:
type  tNetBiosNS=record
tID:word;
Flags:word;
Questions:word;
AnswerRRs:word;
AuthorityRRs:word;
AdditionalRRs:word;
Name:array [1..34] of byte;
tType:word;
tClass:word;
end;
利用Delphi6.0中的TNMUDP组件——它是用来实现在Internet或Intranet上发送或接收UDP的。接下来把这样的“询问包”放置到UDP的数据部分,再将其发出到远程主机。则可坐等“应答包”。
根据应答包的格式(见表1),可计算出“Unit ID”字段在UDP包的数据部分的位置:先从第56字节位置,读出Number Of Names(NetBIOS名字的个数,其中每个NetBIOS Names Info部分占18个字节),然后可计算出“Unit ID”字段的位置=56+Number Of Names×18,最后从该位置起连续读取6个字节,就是目的主机的MAC地址。
下面给出了在Borland Delphi6中的实现“获取远程主机MAC地址”的主要代码。
procedure TForm1.Button2Click(Sender: TObject); //发送“UDP-NetBIOS-NS”询问包
var
MyStream:TMemoryStream;
t_ns:tNetBiosNS;
i:byte;
begin
  with t_ns do
  begin
    tID:=$0000;
    Flags:=$1000;
    Questions:=$0100;
    AnswerRRs:=$0000;
    AuthorityRRs:=$0000;
    AdditionalRRs:=$0000;
    Name[1]:=$20;
    Name[2]:=$43;
    Name[3]:=$4b;
    for i:=4 to 33 do
      Name:=$41;
    Name[34]:=$00;
    tType:=$2100;
    tClass:=$0100;
  end;
nmudp1.LocalPort:=3000;//UDP绑定的本地主机的端口
nmudp1.RemoteHost:=edit1.Text;
nmudp1.RemotePort:=137;// NetBIOS-NS ,137端口
MyStream:=TmemoryStream.Create;
  try
    MyStream.Write(t_ns, sizeof(t_ns));
    NMUDP1.SendStream(MyStream);
  finally
    MyStream.Free;
  end;
end;
下面是接收发送“UDP-NetBIOS-NS”应答包并分析和显示处理结果的代码。
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream:TMemoryStream;
mac_str:array[1..6]of byte;
NumOfNames:byte;
begin
if numberbytes>0 then  //如果接收的数据包字节数>0,则处理数据包
begin
  MyStream:=TmemoryStream.Create;
  try
    NMUDP1.readstream(MyStream); //把接收到的数据包,读到内存中
    MyStream.Seek(56,SoFromBeginning);//定位至Number Of Names字段
    MyStream.Read(NumOfNames,1); //获取 Number Of Names字段的值

    MyStream.Seek(NumOfNames*18,soFromCurrent); //定位至Unit ID字段
    MyStream.Read(mac_str[1],6); //获取Unit ID字段的值
    edit4.Text:=inttohex(mac_str[1],2)+'-'+  //将目的主机的MAC地址格式化输出
    inttohex(mac_str[2],2)+'-'+
    inttohex(mac_str[3],2)+'-'+
    inttohex(mac_str[4],2)+'-'+
    inttohex(mac_str[5],2)+'-'+
    inttohex(mac_str[6],2);
    finally
      MyStream.Free;
    end;
  end;
end;
4结束语
这种方法的优点是:获取(扫描)MAC地址的效率较高。
一般针对某远程主机一次发送一个“UDP-NetBIOS-NS”询问包(当然具体发送几个,可以在程序中自己设定)即可,而不像其他也可获取MAC地址的方法,例如Winsock API函数Gethostbyaddr或者Netbios函数,执行的时候会发送多个“UDP-NetBIOS-NS”询问包,这样不但影响了获取速度,而且重复发送没必要。



 

 


当然,该方法除了可以获取MAC地址外,还可以很容易地获取远程主机的NetBIOS Name信息(即主机名、所在工作组等)。而且在本程序的基础上,也很容易地实现对指定IP地址段的MAC地址扫描,即批量获取MAC地址,不再赘述。

 

参考文献:
[1].《Window网络编程技术》Anthory Jones,Jim Ohlund

 3000万硕士、博士、期刊论文全文下载  论文发表:快速、低价、优质
提供60万硕士论文、10万博士论文、2700万期刊论文全文下载服务,助您一臂之力! 十年的论文发表经验,快捷的论文发表服务,保证所发表的杂志均为正规合法的期刊,收费同行最低!
[本文关键字] mac地址 远程主机 netbios tnmudp1引 远程 地址 新思路
[版权说明]《获取远程主机MAC地址的新思路及实现》论文版权属于作者本人,您可以参考本论文进行论文创作,但不得抄袭、复制!本站免费论文主要来源于用户投稿(投稿网址),如果涉及到侵权问题,请联系lunwentianxia_card@163.com删除。
  远程论文   地址论文
·开放远程教育成本效益研究的现状及思考
·GD3000 型变电站远程监控系统的开发与应用
·基于计算机网络的自适应式远程教育模式的研究
·灌区闸门远程自动化控制系统
·如何快速地从网页中获得Email地址
·域名解析系统及配置
·利用ASP获取客户端真实IP地址
  新思路论文  
·监管中小金融机构的新思路
·体验营销:品牌塑造新思路以李宁公司体育品牌发展为例
·职业学校计算机基础教学改革新思路——考证促学
·“糖衣炮弹”说和新时期反腐倡廉新思路
 
  推荐期刊投稿
·教育艺术
·中学历史教学研究
·直升机技术
·广西财政高等专科学校学报
·继续医学教育
·华南师范大学学报(自然科学版)
·煤炭科技
·天津市工会管理干部学院学报
·International Un
·淮海医药
 
·城市道桥与防洪
·北京政法职业学院学报
·城乡建设
·江西水利科技
·上海水务
·China Economic Syste
·科技潮
·吉林农业大学学报
·中国文化研究
·针刺研究
 
·南洋资料译丛
·渤海大学学报(哲学社会科学版)
·中国男科学杂志
·粉末冶金材料科学与工程
·国画家
·时代数学学习(七年级)
·临床放射学杂志
·考试(自考版)
·中国金融电脑
·福建农林大学学报(哲学社会科学版)
   免费论文
公共管理 | 法学 | 理学 | 医药学
政治 | 社会学 | 文学 | 艺术 | 哲学
工学 | 计算机 | 文化 | 英语论文
经济学 | 财政 税收 | 证券金融
管理学 | 会计审计 | 工商管理 | 教育
财务管理 | 论文写作指导 | 应用文
   收费论文
马列毛邓 | 哲学宗教 | 社会科学
政治法律 | 军 事 | 经 济
文化科学教育体育 | 语言文字
文学 | 艺术 | 历史地理 | 自然科学
数理化 | 天文 | 生物科学 | 医药卫生
农业科学 | 工业技术 | 交通运输
航空航天 | 环境安全
   浏览历史

联系论文网 | 收费论文 | 发表论文 | 论文翻译 | 友情链接 | 全部分类 | 网站地图 | 期刊导航
版权所有 2008-2018 论文天下 www.lunwentianxia.com 京ICP备08104503号
.2148438