perl根据ip地址获取mac地址

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
;

相关推荐