Translate MAC address to IP address

Robert Watson rwatson at freebsd.org
Wed Aug 13 06:59:18 PDT 2003


On Wed, 13 Aug 2003, Nick Barnes wrote:

> I have written a small utility for traffic volume monitoring on an
> Ethernet segment.  It uses libpcap to capture the ethernet header of
> every packet and counts traffic volume by source and destination MAC.  A
> bit like a lobotomized tcpdump (and indeed that is what I started with). 

The easiest way would actually be to expand your tool to also look at the
IP header and track usage at the IP level in the first place.  Converting
MAC addresses back to IPs is hard in the world of IPv4 (it's a lot easier
in IPv6 but that probably won't help you :-).  One nice thing about the
tracking at capture time model is that it will allow you to handle
MAC<->IP mapping changes in more flexible ways.  Since you only need the
source/dest IP addresses, you don't even have to deal with IP option
parsing, just check the frame type for IP, then look for the 'struct ip'
after the ethernet frame header.  The usual reference source code I toss
out for this sort of thing is:

  http://www.watson.org/~robert/freebsd/bpfmon.tgz

I recently received patches to make it distinguish source/dest address as
well, so I guess I should stick it in a CVS tree sometime.

> 
> Currently the report looks like this:
> 
> Per-MAC:               out    out      in     in
>                    packets  bytes packets  bytes
> ff:ff:ff:ff:ff:ff:       0      0       4    240
> 00:07:e9:db:2a:26:      71   5435     127  70958
> 00:02:b3:33:37:0f:     389 290734     331  38761
> 00:90:27:ed:3c:70:      33  15909      30   4105
> 00:50:fc:01:f4:0e:       7   1648       5    717
> 00:d0:b7:ac:99:87:     142  15184     153 105835
> 00:03:47:fa:fb:5b:     105  15832      98 115895
> 00:07:e9:92:c0:76:      28   3221      27  11452
> 
> Per-header:                             packets  bytes
> 00:90:27:ed:3c:70 -> 00:d0:b7:ac:99:87:       7   4798
> 00:d0:b7:ac:99:87 -> 00:90:27:ed:3c:70:       6    689
> 00:90:27:ed:3c:70 -> 00:02:b3:33:37:0f:       6    513
> 00:02:b3:33:37:0f -> 00:90:27:ed:3c:70:       6   1273
> 00:02:b3:33:37:0f -> 00:07:e9:92:c0:76:       7    854
> 00:07:e9:92:c0:76 -> 00:02:b3:33:37:0f:       8    958
> 00:02:b3:33:37:0f -> 00:07:e9:db:2a:26:     127  70958
> 00:07:e9:db:2a:26 -> 00:02:b3:33:37:0f:      71   5435
> 00:d0:b7:ac:99:87 -> ff:ff:ff:ff:ff:ff:       2    120
> 00:50:fc:01:f4:0e -> 00:02:b3:33:37:0f:       7   1648
> 00:02:b3:33:37:0f -> 00:50:fc:01:f4:0e:       5    717
> 00:02:b3:33:37:0f -> 00:d0:b7:ac:99:87:     146 101037
> 00:d0:b7:ac:99:87 -> 00:02:b3:33:37:0f:     134  14375
> 00:07:e9:92:c0:76 -> ff:ff:ff:ff:ff:ff:       2    120
> 00:90:27:ed:3c:70 -> 00:07:e9:92:c0:76:      20  10598
> 00:07:e9:92:c0:76 -> 00:90:27:ed:3c:70:      18   2143
> 00:03:47:fa:fb:5b -> 00:02:b3:33:37:0f:     105  15832
> 00:02:b3:33:37:0f -> 00:03:47:fa:fb:5b:      98 115895
> 
>                                  total:     775 347963
> 
> I would like to be able to report by IP address.
> 
> Yours,
> 
> Nick Barnes
> Ravenbrook Limited
> _______________________________________________
> freebsd-net at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscribe at freebsd.org"
> 



More information about the freebsd-net mailing list