天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧软件 >> 正文

制作:自动探测网关MAC工具

2010-8-24未知佚名

内网的ARP病毒(攻击)近两年来都是网吧很烦恼的事情,网管们现在都在使用双绑来缓解这一问题,做双绑时需要网关的MAC地址,网关可能是一台电脑,也有可能是一部路由器或者猫, 有此时候要查看它的MAC 地址并不是很方便, 一些网吧平台软件开发商在推的产品中便加入了"探测"网关MAC的功能, 如下图:



我们今天想分析一下这个功能的实现原理和方法, 稍后会写出完整的代码.

首先我们尝试一下自己通过DOS 窗口中的命令,来感觉一下ARP 的另一个参数 -g

先ping 一下网关的IP,确保是通畅的,并且这个的过程也助于让网关的返回的数据信号缓存在地址表中 

 

 再用 arp -g 即可得到相应的MAC地址了.

有兴趣你可以尝试一下,是否可以正确得到其他机器的MAC 地址,操作是相同的.

网吧写一个工具,就不能光调DOS命令, 这次我用的仍然是delphi 7 ,在窗体上放两个文本输入框,两个按钮即可以了.有关ARP方面的操作指令, 我们可以调用微软的API 来实现.

SendARP( )是Microsoft Platform SDK中提供用来获得目标主机的MAC地址的函数,SendARPSendARP的函数原型如下:

DWORD SendARP(
IPAddr DestIP, // 目标IP地址
IPAddr SrcIP, // 源IP地址
PULONG pMacAddr, // 返回MAC地址指针
PULONG PhyAddrLen // 返回MAC地址长度
);

这个函数的返回值为错误代码

31 说明对方没有开机,我们的函数检测不到它,
1784 说明的给函数的最后一个参数的值是0,或你的给的值与你给的缓存区大小不符合。

 

通过它我们可以很简单的实现MAC地址探测.

Function sendarp(ipaddr:ulong;
temp:dword;
ulmacaddr:pointer;
ulmacaddrleng:pointer) : DWord; StdCall; External 'Iphlpapi.dll' Name 'SendARP';

procedure TForm1.Button1Click(Sender: TObject);
var
myip:ulong;
mymac:array[0..5] of byte;
mymaclength:ulong;
r:integer;
begin
myip:=inet_addr(PChar(Edit1.Text));
mymaclength:=length(mymac);
r:=sendarp(myip,0,@mymac,@mymaclength);
label1.caption:='errorcode:'+inttostr(r);
Edit2.Text:=format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x',[mymac[0],mymac[1],mymac[2],mymac[3],mymac[4],mymac[5]]);
end;

 

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;

下面运行后的效果:

 

很多网吧平台软件都附有这项功能, 现在我们自己模仿一下也不难,开发重在找准需求、思路清晰,代码编写并不是难度。其实我们在网吧的日常管理还有很多可以扩展的地方,需求也是多样的。比如你发现有某个IP 活动异常,要通过IP 查出是那一台电脑,就此需求也可以去自己动手做出一个工具来。

本文来源:未知 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。文章是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 Email:support@txwb.com,系统开号,技术支持,服务联系微信:_WX_1_本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行