kekekid 2011-04-14
有时候需要根据一台主机的ip地址获取其mac地址,这是可以实现的,但这个ip地址必须是同一个以太网内的ip地址。
在perl的模块中Net::ARP可以实现这个功能。但是它的arp_lookup函数只能从本机的arp缓存表中取“被查询ip”的mac,如果恰恰有,能取到,没问题。但是如果arp缓存没有“被查询ip”,那么会得到“unknow”或者“00:00:00:00:00:00”。
解决方法是先ping一下“被查询ip”,然后用arp_lookup函数去arp缓存取其mac。
下面有个例子,是perl写的cgi程序。
#!/usr/bin/perl use Net::ARP; print "Content-type:text/html;charset=UTF-8\n\n"; read STDIN, my $buffer, $ENV{'CONTENT_LENGTH'}; my ($key,$ip)=split /=/,$buffer; # 得到了ip地址 `ping $ip -c 1`; # 系统调用,ping 被查询ip 1 次 my $mac=Net::ARP::arp_lookup("eth0",$ip); # 从arp缓存中取出mac print $mac; print <<END <form action="$ENV{'SCRIPT_NAME'}" method="post"> <input name="ip" /> <input type="submit" value="Submit"> </from> END ;