> I would like to implement an IP address range filter similar to the
> BPF capture filter that takes an IP address and subnet mask (like in
> "net 192.168.0.0 and mask 255.255.255.0"). What would be the best way
> to calculate this in C? Or in which file can I find the BPF
> implementation of this expression?
Ok, pretty straightforward using the CIDR notation:
bool in_cidr_subnet(unsigned long ip_addr,
unsigned long cidr_network_addr,
unsigned short cidr_bits)
{
const unsigned long mask = ntohl(((unsigned long) -1) << (32-cidr_bits));
assert(cidr_network_addr & mask == cidr_network_addr);
const unsigned long ip_network_addr = ip_addr & mask;
return cidr_network_addr == ip_network_addr;
}
-
This is the tcpdump-workers list.
Visit https://cod.sandelman.ca/ to unsubscribe.