mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
captive: Get MAC address of a device without calling arp
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user