- pcap_lookupnet(iface.c_str(), &localnet, &localnet_mask, err);
- localnet = ntohl(localnet);
- localnet_mask = ntohl(localnet_mask);
+ for(pcap_if_t *d=devs; d; d=d->next)
+ if(iface==d->name)
+ {
+ for(pcap_addr_t *a=d->addresses; a; a=a->next)
+ {
+ if(a->addr->sa_family==AF_INET)
+ {
+ Address addr(ntohl(reinterpret_cast<sockaddr_in *>(a->addr)->sin_addr.s_addr));
+ if(a->netmask)
+ addr.set_mask(Address(ntohl(reinterpret_cast<sockaddr_in *>(a->netmask)->sin_addr.s_addr)));
+ localnets.push_back(addr);
+ }
+ else if(a->addr->sa_family==AF_INET6)
+ {
+ Address addr(reinterpret_cast<sockaddr_in6 *>(a->addr)->sin6_addr);
+ if(a->netmask)
+ addr.set_mask(Address(reinterpret_cast<sockaddr_in6 *>(a->netmask)->sin6_addr));
+ localnets.push_back(addr);
+ }
+ }
+ }
+
+ pcap_freealldevs(devs);