captive: Get MAC address of a device without calling arp

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Michael Tremer
2017-04-25 12:52:29 +01:00
parent 966971e589
commit dbfd2622f5
2 changed files with 23 additions and 6 deletions

View File

@@ -374,6 +374,26 @@ sub wifi_get_signal_level($) {
return $signal_level;
}
sub get_hardware_address($) {
my $ip_address = shift;
my $ret;
open(FILE, "/proc/net/arp") or die("Could not read ARP table");
while (<FILE>) {
my ($ip_addr, $hwtype, $flags, $hwaddr, $mask, $device) = split(/\s+/, $_);
if ($ip_addr eq $ip_address) {
$ret = $hwaddr;
last;
}
}
close(FILE);
return $ret;
}
1;
# Remove the next line to enable the testsuite

View File

@@ -58,9 +58,8 @@ if ($cgiparams{'ACTION'} eq "SUBMIT") {
#Get Clients IP-Address
my $ip_address = $ENV{X_FORWARDED_FOR} || $ENV{REMOTE_ADDR} ||"";
#Ask arp to give the corresponding MAC-Address
my $mac_address = qx(arp -a|grep $ip_address|cut -d ' ' -f 4);
$mac_address =~ s/\n+\z//;
# Retrieve the MAC address from the ARP table
my $mac_address = &Network::get_hardware_address($ip_address);
&General::readhasharray("$clients", \%clientshash);
my $key = &General::findhasharraykey(\%clientshash);
@@ -84,15 +83,13 @@ if ($cgiparams{'ACTION'} eq "SUBMIT") {
if ($cgiparams{'ACTION'} eq "SUBMIT") {
my $ip_address;
my $mac_address;
my $granted=0;
#Convert voucherinput to uppercase
$cgiparams{'VOUCHER'} = uc $cgiparams{'VOUCHER'};
#Get Clients IP-Address
$ip_address = $ENV{X_FORWARDED_FOR} || $ENV{REMOTE_ADDR} ||"";
#Ask arp to give the corresponding MAC-Address
$mac_address = qx(arp -a|grep $ip_address|cut -d ' ' -f 4);
$mac_address =~ s/\n+\z//;
my $mac_address = &Network::get_hardware_address($ip_address);
#Check if voucher is valid and write client to clients file, delete voucher from voucherout
&General::readhasharray("$voucherout", \%voucherhash);
&General::readhasharray("$clients", \%clientshash);