¿Se pueden distinguir las redes internas y externas por IP?
La IP interna comienza con 192, o comienza con 172
La IP externa comienza con otra cosa
En Inicio--Ejecutar--ingrese cmd --Ingrese, escriba ipconfig/all, se mostrará dns y ipaddress es la dirección de red externa.
En el protocolo tcp/ip, tres áreas de direcciones IP están reservadas como direcciones privadas. es el siguiente:
10.0.0.0/8:10.0.0.0~10.255.255.255
172.16.0.0/12:172.16.0.0~172.31.255.255
192.168.0.0/16: 192.168.0.0~192.168.255.255
Las redes que utilizan direcciones reservadas solo pueden comunicarse internamente y no pueden interconectarse con otras redes. Si desea comunicarse con el mundo exterior, debe comunicarse con el mundo exterior a través de una puerta de enlace. Aquí se utiliza NAT, y la tecnología NAPT es el mecanismo de proxy utilizado para garantizar la comunicación.
Además, aunque algunos operadores de banda ancha también utilizan direcciones no privadas para asignar a los usuarios, debido a la configuración de enrutamiento, otros usuarios de Internet no pueden acceder a estas IP. Las dos partes anteriores de IP se pueden llamar IP de intranet. La siguiente parte de IP no se discutirá esta vez.
Si la dirección IP de la interfaz de red de su máquina se encuentra dentro del rango de las direcciones reservadas anteriores, puede estar seguro de que se encuentra en modo intranet.
NAT requiere que la conexión de todo el servicio se inicie activamente desde la red interna a la red externa, y los usuarios de la red externa no pueden iniciar directamente (activamente) solicitudes de conexión a los servicios en la red interna a menos que están en NAT (todos). La asignación de puertos se realiza en la puerta de enlace para el puerto de servicio. El método NAT requiere que la puerta de enlace más externa tenga al menos una IP pública y pueda acceder al servidor externo con la IP mostrada, como por ejemplo: [202.108.22.5]
Seguimiento completo.
3) Implementación de la programación
Obtenga una lista de todas las direcciones IP de esta máquina y analice la lista de IP:
1) Si solo hay una IP de LAN en la lista, significa está en la red interna;
2) Si hay una IP LAN y una IP pública en la lista, significa que es una puerta de enlace;
3) Si solo hay una IP pública en la lista, significa que es una IP independiente.
//Aquí no se consideran otras plataformas, la prueba se realiza bajo la arquitectura inet, la IP de entrada es el orden de bytes del host
// 0xa -- "10.0.0.0"> >24 ; 0xc0a8--"192.168.0.0.">>16; 0x2b0--"127.17.0.1">>22
int isInnerIP( uint32_t a_ip )
{ p>
int bValid = -1;
if( (a_ip>>24 == 0xa) || (a_ip>>16 == 0xc0a8) || (a_ip>>22 == 0x2b0 ) )
{
bValid = 0;
}
return bValid;
}
int isInnerIP( char* a_strip )
{
devuelve 0;
}
Aplicaciones relacionadas con IP
//Obtener una lista de todas las direcciones IP de esta máquina y mostrarlas en formato de cadena y entero respectivamente
int getHostIP() //return int
{ p>
struct sockaddr_in localAddr, destAddr;
struct hostent* h;
char temp[128];
int nRect = gethostname(temp, 128);
printf("ipaddr src3 es: %s/n", temp);
if(nRect !=0)
{ p> p>
printf("error");
}
h = gethostbyname(temp);
if(h)
{
for(int nAdapter=0; h->h_addr_list[nAdapter]; nAdapter++)
{
memcpy(&destAddr.sin_addr. s_addr, h->h_addr_list[nAdapter], h->h_length);
// Muestra la dirección IP de la máquina.
printf("Cadena de dirección: %s/n ", inet_ntoa( destAddr.sin_addr)); // Mostrar cadena de dirección
printf("Dirección int: %d/n", destAddr.sin_addr.s_addr); // Convertir a número entero
}
}
devuelve 0;
}
/
/Comprueba si la cadena IP es legal
int isCheckTrue(char* strip)
{
int value;
for( int i = 0; i < strlen(strip); i++)
{
// verifiquemos si todos los caracteres ingresados
// la dirección IP es dígitos
if(strip[i] == '.')
continuar;
if(isdigit(strip[i]) == 0)< / p>
{
devuelve -1;
}
}
devuelve 0;
}
//Convierte IP de cadena a IP entera
int str2intIP(char* strip) //return int ip
{
int intIP;
if(!(intIP = inet_addr(strip)))
{
perror("inet_addr fallen./n"); /p>
devuelve -1;
}
devuelve intIP;
}