ネットマスクとはその名の通り IPv4 アドレスのうち、どこまでのビットがネットワークアドレスなのかを示している値なので、IPv4 アドレスとネットマスクの論理和はネットワークアドレスとなる。
従って、取得した論理和とネットワークアドレスが等しい場合は IPv4 アドレスはネットワークに属す事になる。
C で実装する場合はこんな感じ。
sample.c
/*
* network: ネットワークアドレス
* netmask: ネットマスク
* ipaddr: IPアドレス
*/
int checkAddr(const char *network, const char *netmask, const char *ipaddr)
{
struct in_addr net,
mask,
addr;
if(inet_aton(network, &net) &&
inet_aton(netmask, &mask) &&
inet_aton(ipaddr, &addr))
return((addr.s_addr & mask.s_addr) == (net.s_addr & mask.s_addr));
else
return(0);
}