arp -a
does not list all devices on the local network, just those that this computer happens to know the IPv4 and MAC addresses for. Each computer collects these IP <-> MAC pairs for other computers as it communicates with them, and remembers those pairs in its ARP cache; but the cache will only list other computers that this computer happens to have communicated with. The arp -a
command just lists the content of the cache.
You can fill in gaps in a computer's ARP cache by forcing communication between them. Suppose your computer is missing an entry for 10.0.0.78 (and that's on the local network). Just run ping 10.0.0.78
, your computer will go out and discover the corresponding MAC address, and if you run arp -a
again it should now have an entry for 10.0.0.78.
I don't understand the part of the question about ping
-- are you pinging computers from the router, or pinging the router from the computers? Is there a pattern to which respond and which don't? Are some of the computers running firewalls?