把Perl代码改成python
在网上找扫描MAC的PYTHON代码没找到(不用SENDARP的),但找到了PERL代码,怎样改成PYTHON的,请教高手。
use Socket;
$host=$ARGV[0];
$packhost=inet_aton($host);
$port=137;
$str="\x01\x7A\x00\x10\x00\x01\x00\x00\x00\x00\x00\x00\x20\x43\x4B\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x00\x00\x21\x00\x01";
$sin=sockaddr_in($port,$packhost);
socket(TARGET,PF_INET,SOCK_DGRAM,getprotobyname('UDP'))||die 'sock error';
send(TARGET,$str,0,$sin) ||die('send fail');
recv(TARGET,$buffer,10000,undef);
$head=substr($buffer,50,8);
@char=unpack('C*',$head);
#print "head:";
#print @char;
#print "\n";
$body=substr($buffer,57);
open LOG,">>137.log";
print LOG $body;
$body=~s/\x84\x00/\x84\n/g;
$body=~s/\x04\x00/\x04\n/g;
my @result=split(/\n/,$body);
my @type;
for($i=0;$i<@result;$i++)
{
$type[$i]=substr($result[$i],length($result[$i])-1,1)
}
#print @type;
chop(@result);
my @id;
for($i=0;$i<@result;$i++)
{
$id[$i]=substr($result[$i],length($result[$i])-1,1)
}
#print @id;
chop(@result);
$mac=pop(@result);
#print join("\n",@result);
print "IP---------->$host\n";
print " Name Type Status\n";
print "---------------------------------------------\n";
for($i=0;$i<@result;$i++)
{
@tempid=unpack('C*',$id[$i]);
@tempType=unpack('C*',$type[$i]);
if($tempType[0]==4)
{
printf(" %15s<%2X> UNIQUE Registered",$result[$i],$tempid[0]);
}
else
{
printf(" %15s<%2X> GROUP Registered",$result[$i],$tempid[0]);
}
print "\n";
}
$mac=substr($mac,0,6);
@mac=unpack('C*',$mac);
foreach $m (@mac)
{
$m=sprintf("%X",$m);
}
print "\n MAC Address =".join("-",@mac);