Tengo una IP como esta: 12.12.12.12
Estoy recorriendo diferentes rangos de IP (en 12.12.12.0/24 (ejemplo)) formato, y tratando de ver si la IP está en el rango.
He intentado varios métodos como inet_addr y comparar pero parece que no puedo obtenerlo.
¿Hay una manera fácil de hacer esto? Estoy usando Windows.IP cae en el rango CIDR
Respuesta
Sólo probar si:
(ip & netmask) == (range & netmask)
se puede determinar la máscara de red de la CIDR parámetros range/netbits
de la siguiente manera:
uint32_t netmask = ~(~uint32_t(0) >> netbits);
podría ser necesaria una conversión 'ntohl' antes de hacer esto. – KillianDS
@KillianDS: asumo que el proceso de análisis produce una dirección en orden de bytes local, pero tiene razón, es algo que debe verificarse, especialmente porque 'inet_addr' devuelve el orden de bytes de la red. –
¿Ves algo mal aquí? Parece imprimir para cada uno: 'int cidr = atoi (cdrbuf); \t \t unsigned long ulstart = ntohl (inet_addr (clip)); \t \t unsigned long ulcheck = ntohl (inet_addr ("12.12.12.12")); \t \t unsigned long netmask = ~ unsigned long (~ 0ULL >> cidr); \t \t if ((ulcheck y máscara de red) == (CIDR y máscara de red)) \t \t \t printf ("% s \ n", PCH); ' – seth
Tome la representación binaria y ponga a cero lo que no coincide con su máscara de red.
Aclaración: Digamos que usted tiene la IP a.b.c.d
y desea hacerlo coincidir con e.f.g.h/i
a continuación, se puede tirar de la IP en uno entero sin signo, uint32_t ip = a<<24 + b<<16 + c<<8 + d
y hacer lo mismo con uint32_t range = e<<24 + f<<16 + g<<8 + h
. Ahora puede usar su máscara de red: uint32_t mask = (~0u) << (32-i)
. Ahora, simplemente puede verificar si ip
"está en" range
comparándolos: ip & mask == range & mask
.
La iteración evidentemente proviene de la prueba en contra de un todo el lío de rangos. –
@Ben Voigt: Debo haberme perdido eso. Tienes razón. – bitmask
- 1. Cómo convertir CIDR a la red y el rango de direcciones IP en C#?
- 2. ¿Cómo comparar el rango de direcciones IP en C#?
- 3. ¿Cómo se calcula el rango de IP cuando se proporciona la dirección IP y la máscara de red?
- 4. ¿Hay forma de hacer coincidir la IP con IP + CIDR directamente desde la consulta SELECT?
- 5. ¿Configurando CIDR/IP para que cualquier persona pueda acceder desde cualquier IP?
- 6. C#: Enumerar direcciones IP en un rango
- 7. Compruebe si la dirección IP está en el rango privado
- 8. máscara de red a CIDR en rubí
- 9. Obtención de IPs de lista de notación CIDR en PHP
- 10. Hacer ping en un rango de IP con Scapy
- 11. ¿Cómo puedo generar un rango de direcciones IP en Perl?
- 12. Python 3: crear una lista de direcciones IP posibles a partir de una notación CIDR
- 13. decimal.TryParse() cae líder "1"
- 14. ¿Cómo puedo obtener un rango de direcciones IP dado el inicio y el final de la dirección IP?
- 15. htaccess acceda al archivo por rango de IP
- 16. redirigida un rango de direcciones IP que utilizan RewriteCond
- 17. Generando datos de rango de dirección IP de la organización
- 18. Azure SQL Server Firewall Rango de direcciones IP
- 19. pdb.set_trace() provocando nosetests congelados, no cae en el depurador
- 20. Coincidencia de la dirección IPv6 con una subred CIDR
- 21. execCommand en el rango
- 22. Detecta si la persona se cae
- 23. Calcular si una dirección IP se encuentra en un rango especificado en Java
- 24. Uso de SQL para determinar el valor de cidr de una máscara de subred
- 25. PHP Generar Rangos IP
- 26. ¿Puedo prohibir una dirección IP (o un rango de direcciones) en la aplicación ASP.NET?
- 27. jQuery Validate (Rango de fechas)
- 28. ¿Hay un tipo .NET nativo para las subredes CIDR?
- 29. Excel VBA obtiene rango de rango seleccionado por el mouse
- 30. ASP.NET MVC en IIS cae en el controlador de archivos estáticos
relacionadas: http://stackoverflow.com/questions/1507579/how- can-i-determine-that-user-ip-address-is-in-accessible-range-or-not –
Eso es PHP, como se puede ver en las etiquetas que estoy usando C++ – seth