You can display the ethernet addresses of machines which connect to your from the same subnet your RPi is on. Use the "arp" command, the "ip neigh show" command, or display the file /proc/net/arp. For IPv6 try "ip -6 neigh show". All these options list the "neighbour cache", which we used to call the "ARP cache" when there was only IPv4. Note carefully that this is a cache: entries stay in the table only whilst they are being used, there are incomplete entries awaiting a response from the neighbour, and unused entries are expired from the cache.
Machines from another subnet do not appear in the neighbour cache. Those off-subnet machines are reached by sending off-subnet traffic via an IP router, so its is that router's IP address and ethernet address which are needed in the neighbour cache.
In a modern network there should be no way to discover all the machines within your subnet short of trying each possibility. For IPv4 you could send a unicast probe to each potential IPv4 address in the subnet. "nmap" is one program which does this. You can do the same for IPv6, but you will be waiting some considerable time for it to finish trying all 2^64 possibilities
Because many machines try to communicate off-subnet, the neighbour cache on the router is commonly the most interesting.
Edit: for your particular problem, you could consider using 802.11x authentication instead of a wireless hotspot landing page. The protocol for that includes the neighbour address. If you are using access points then the MAC address appears in the Calling-Station of the authentication request.