Buenas,
Segue uma pequena função em C/C++ que valida se o IP x esta na rede Y com a mascara Z.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
//---------------------------------------------------------------------
long ip2long(const char *ip,int mascara, const char *rede){
int ip_host_long,ip_rede_long,maximo,retorno;
// Converte o IP do HOST no modo long - clong
ip_host_long = htonl(inet_addr(ip));
// Converte o IP da REDE no modo long - min
ip_rede_long = htonl(inet_addr(rede));
// Definindo o maximo
maximo = (ip_rede_long | ((1 << (32 - mascara)) -1));
// Validando
if(ip_host_long > ip_rede_long && ip_host_long < maximo){
// Faz parte da rede e da mascara
retorno = 1;
} else {
// Nao faz parte da rede e da mascara
retorno = 0;
}
return retorno;
}
//---------------------------------------------------------------------
int main()
{
const char *ip;
int mascara;
const char *rede;
mascara = 24;
rede = "192.168.1.0";
ip = "192.168.2.3";
long ip_longo = ip2long(ip,mascara,rede);
printf("%u\n", ip_longo);
return 0;
}
Read More
Segue uma pequena função em C/C++ que valida se o IP x esta na rede Y com a mascara Z.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
//---------------------------------------------------------------------
long ip2long(const char *ip,int mascara, const char *rede){
int ip_host_long,ip_rede_long,maximo,retorno;
// Converte o IP do HOST no modo long - clong
ip_host_long = htonl(inet_addr(ip));
// Converte o IP da REDE no modo long - min
ip_rede_long = htonl(inet_addr(rede));
// Definindo o maximo
maximo = (ip_rede_long | ((1 << (32 - mascara)) -1));
// Validando
if(ip_host_long > ip_rede_long && ip_host_long < maximo){
// Faz parte da rede e da mascara
retorno = 1;
} else {
// Nao faz parte da rede e da mascara
retorno = 0;
}
return retorno;
}
//---------------------------------------------------------------------
int main()
{
const char *ip;
int mascara;
const char *rede;
mascara = 24;
rede = "192.168.1.0";
ip = "192.168.2.3";
long ip_longo = ip2long(ip,mascara,rede);
printf("%u\n", ip_longo);
return 0;
}
Forte abraço
Marcos Carraro