Networking Forums

Networking Forums > Computer Networking > Linux Networking > Reading the ARP cache table

Reply
Thread Tools Display Modes

Reading the ARP cache table

 
 
Ramy Asselin
Guest
Posts: n/a

 
      12-04-2003, 05:04 PM
I would like to read the ARP cache table programatically using Linux.

In Stevens Unix Network Programming Vol 1, he uses the sysctl function to
access the ARP cache entries.
But I can't find the required constants NET_RT_FLAGS AND RT_LLINFO!

Thanks!
Ramy

P.S. I found code that does this in ~FreeBSD~

<http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2003-08/0133.html>

#include <sys/file.h>
#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if_dl.h>
#include <net/route.h>
#include <netinet/in.h>
#include <netinet/if_ether.h>
#include <arpa/inet.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>


#define ROUNDUP(a) \
((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
int
main(int argc, char *argv[])
{
int mib[6];
size_t needed;
char *lim, *buf, *next;
if (argc != 1) {
(void)fprintf(stderr, "Usage: %s\n", argv[0]);
exit(1);
}


mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0;
mib[3] = AF_INET;
mib[4] = NET_RT_FLAGS;
mib[5] = RTF_LLINFO;
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
errx(1, "route-sysctl-estimate");
if ((buf = malloc(needed)) == NULL)
errx(1, "malloc");
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
errx(1, "actual retrieval of routing table");


lim = buf + needed;
next = buf;
while (next < lim) {
struct rt_msghdr *rtm = (struct rt_msghdr *)next;
struct sockaddr_inarp *sinarp = (struct sockaddr_inarp
*)(rtm + 1);
struct sockaddr_dl *sdl =
(struct sockaddr_dl *)((char *)sinarp +
ROUNDUP(sinarp->sin_len));
if (sdl->sdl_alen) { /* complete ARP entry */
printf("%s at ", inet_ntoa(sinarp->sin_addr));
printf("%s", ether_ntoa((struct ether_addr
*)LLADDR(sdl)));
printf("\n");
}
next += rtm->rtm_msglen;
}
free(buf);
return(0);
}

 
Reply With Quote
 
 
 
 
Jim Fischer
Guest
Posts: n/a

 
      12-05-2003, 03:52 AM
Ramy Asselin wrote:
> I would like to read the ARP cache table programatically using Linux.
>
> In Stevens Unix Network Programming Vol 1, he uses the sysctl function
> to access the ARP cache entries.
> But I can't find the required constants NET_RT_FLAGS AND RT_LLINFO!
>
> Thanks!
> Ramy
>
> P.S. I found code that does this in ~FreeBSD~
>
> <http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2003-08/0133.html>
>
> [snip]


A good place to start would be the source code for the arp(8) program
itself. On Linux boxes, the arp(8) program is usually installed via the
'net-tools' package. Here's a Freshmeat page for the 'net-tools' stuff:

http://freshmeat.net/projects/net-tools/?topic_id=150

--
Jim

To reply by email, remove "link" and change "now.here" to "yahoo"
jfischer_link5809{at}now.here.com


 
Reply With Quote
 
Leon.
Guest
Posts: n/a

 
      12-05-2003, 04:42 AM

"Ramy Asselin" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> I would like to read the ARP cache table programatically using Linux.
>
> In Stevens Unix Network Programming Vol 1, he uses the sysctl function to
> access the ARP cache entries.
> But I can't find the required constants NET_RT_FLAGS AND RT_LLINFO!
>


A way to get started is to run 'strace arp '.
You can then see the system calls the arp command makes.

Or you can get the source code to the arp command.


 
Reply With Quote
 
 
 
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Football. Why are you reading this? Murry Broadband 2 06-11-2010 05:22 PM
reading adjecent pc's name kernel.lover Linux Networking 2 02-26-2005 05:56 PM
reading external ip stephen Linux Networking 15 09-01-2004 01:51 AM
Please recommend some reading pjl Wireless Internet 1 08-03-2004 11:39 PM
NBT Remote Cache Naming Table and LMHosts Jones Windows Networking 0 03-03-2004 06:05 PM



1 2 3 4 5 6 7 8 9 10 11