Reputation: 12942
Is there a way to get the destination MAC address, if the destination IP is known, using ANSI C? I would preferably do it with a system call so the kernel deals with it all and I can take advantage of the ARP cache. I know I can build and send my own ARP request, but then I would not have the caching functionality etc unless I implement it myself so it feels like letting the kernel handling it is the way to go.
Upvotes: 0
Views: 907
Reputation: 12942
What I decided to do was to send my own ARP packets and caching it internaly in my application. If the destination is outside my local network I parse /proc/net/route
and extract the gateway for the given interface and send an arp packet to the gateway to get it's macaddress (since that is the destination macaddress of packets destined outside the local network).
Upvotes: -1
Reputation: 47134
Not an exact answer, because it's not ANSI C, but you can read the arp table from /proc/net/arp
(in Linux, that is). That's where arp
looks. For any other OS, the easiest way is to use strace
or an equivalent on the equivalent arp-cache-showing utility.
Upvotes: 2