Ma base de données SQL-Server stocke les masques de réseau IP en tant que binaires. Je besoin d'un moyen de les faire correspondre avec une adresse IPT-SQL: vérifiez si IP correspond au masque de réseau
donné Par exemple, est 192.168.21.5
partie d'un masque de réseau qui est stocké dans la base de données?
La représentation binaire de 192.168.21.5
:
11000000.10101000.00010101.00000101 (without the dots)
Le masque de réseau stockées dans la DB est la suivante: binaire (4) et un champ tinyint:
11000000.10101000.00010101.00000000/24
(qui serait: 192.168.21.0 /24
) de telle sorte, les 24 premiers bits de 192.168.21.5
doivent correspondre à un enregistrement dans la base de données.
Comment est-ce que je vérifierais seulement le premier n
bits d'un champ binaire (semblable à LEFT(text, 24)
)?
Y at-il une façon intelligente de le faire, peut-être avec bitwise AND
?
est cela signifie que de travailler avec des bits> = 24 (classe C) Netmask? pourrait le faire fonctionner, mais pas avec say bits = 16 (classe B) , mais fonctionne avec des bits> 24 pour les petits réseaux – reinhard
Je viens de le vérifier, et il semble fonctionner pour moi pour un certain nombre de bits. Quels problèmes obtenez-vous pour les masques de classe B? –