J'ai comme donnée une IP sous la forme d'un struct in_addr et un
réseau défini pour le moment par une chaîne contenant sa notation CIDR
(network/mask). Existe-t-il une fonction toute faite pour tester
l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage
de network/mask, la conversion de la partie IP en un entier avec
inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation
CIDR.
--
prom_printf("Detected PenguinPages, getting out of here.\n");
2.0.38 /usr/src/linux/arch/sparc/mm/srmmu.c
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
octane
Bonjour,
J'ai comme donnée une IP sous la forme d'un struct in_addr et un réseau défini pour le moment par une chaîne contenant sa notation C IDR (network/mask). Existe-t-il une fonction toute faite pour tester l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage de network/mask, la conversion de la partie IP en un entier avec inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation CIDR.
Je dirais qu'il suffit de faire un & logique puis de comparer
avec le reseau, mais je ne suis pas persuade d'avoir compris la question.
Bonjour,
J'ai comme donnée une IP sous la forme d'un struct in_addr et un
réseau défini pour le moment par une chaîne contenant sa notation C IDR
(network/mask). Existe-t-il une fonction toute faite pour tester
l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage
de network/mask, la conversion de la partie IP en un entier avec
inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation
CIDR.
Je dirais qu'il suffit de faire un & logique puis de comparer
avec le reseau, mais je ne suis pas persuade d'avoir compris
la question.
J'ai comme donnée une IP sous la forme d'un struct in_addr et un réseau défini pour le moment par une chaîne contenant sa notation C IDR (network/mask). Existe-t-il une fonction toute faite pour tester l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage de network/mask, la conversion de la partie IP en un entier avec inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation CIDR.
Je dirais qu'il suffit de faire un & logique puis de comparer
avec le reseau, mais je ne suis pas persuade d'avoir compris la question.
Vincent Bernat
OoO En ce début d'après-midi nuageux du mardi 27 septembre 2005, vers 14:22, disait:
J'ai comme donnée une IP sous la forme d'un struct in_addr et un réseau défini pour le moment par une chaîne contenant sa notation CIDR (network/mask). Existe-t-il une fonction toute faite pour tester l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage de network/mask, la conversion de la partie IP en un entier avec inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation CIDR.
Je dirais qu'il suffit de faire un & logique puis de comparer
avec le reseau, mais je ne suis pas persuade d'avoir compris la question.
Je cherchais une fonction qui fasse tout ça quelque part dans la libc. J'ai fait à la main, ça marche, mais c'est plus long. :) -- panic ("No CPUs found. System halted.n"); 2.4.3 linux/arch/parisc/kernel/setup.c
OoO En ce début d'après-midi nuageux du mardi 27 septembre 2005, vers
14:22, octane@alinto.com disait:
J'ai comme donnée une IP sous la forme d'un struct in_addr et un
réseau défini pour le moment par une chaîne contenant sa notation CIDR
(network/mask). Existe-t-il une fonction toute faite pour tester
l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage
de network/mask, la conversion de la partie IP en un entier avec
inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation
CIDR.
Je dirais qu'il suffit de faire un & logique puis de comparer
avec le reseau, mais je ne suis pas persuade d'avoir compris
la question.
Je cherchais une fonction qui fasse tout ça quelque part dans la
libc. J'ai fait à la main, ça marche, mais c'est plus long. :)
--
panic ("No CPUs found. System halted.n");
2.4.3 linux/arch/parisc/kernel/setup.c
OoO En ce début d'après-midi nuageux du mardi 27 septembre 2005, vers 14:22, disait:
J'ai comme donnée une IP sous la forme d'un struct in_addr et un réseau défini pour le moment par une chaîne contenant sa notation CIDR (network/mask). Existe-t-il une fonction toute faite pour tester l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage de network/mask, la conversion de la partie IP en un entier avec inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation CIDR.
Je dirais qu'il suffit de faire un & logique puis de comparer
avec le reseau, mais je ne suis pas persuade d'avoir compris la question.
Je cherchais une fonction qui fasse tout ça quelque part dans la libc. J'ai fait à la main, ça marche, mais c'est plus long. :) -- panic ("No CPUs found. System halted.n"); 2.4.3 linux/arch/parisc/kernel/setup.c
Vincent Bernat
OoO En cette fin de matinée radieuse du lundi 26 septembre 2005, vers 11:32, je disais:
J'ai comme donnée une IP sous la forme d'un struct in_addr et un réseau défini pour le moment par une chaîne contenant sa notation CIDR (network/mask). Existe-t-il une fonction toute faite pour tester l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage de network/mask, la conversion de la partie IP en un entier avec inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation CIDR.
Pour les archives, j'ai fait comme ça :
Fonction qui teste l'appartenance d'une IP à un réseau :
int parse_network(char *network, struct in_addr *net, int *cidr) { char *cidr_s; /* We seek for '/' */ if ((cidr_s = index(network, '/')) == NULL) { /* No network part, this is an error */ syslog(LOG_ERR, "Unable to extract mask from %s", network); return 0; } cidr_s++; *cidr = atoi(cidr_s); if (*cidr < 0 || *cidr > 32) { syslog(LOG_ERR, "CIDR is not in 0..32 range in %s", network); return 0; }
/* We convert the IP */ *(--cidr_s) = ' '; if (inet_aton(network, net) == 0) { *cidr_s = '/'; syslog(LOG_ERR, "Not a valid IP : %s", network); return 0; } *cidr_s = '/'; return 1; }
Cette fonction a l'horrible désavantage de ne pas fonctionner avec le prototype int parse_network(const char *network, struct in_addr *net, int *cidr)... -- printk("Cool stuff's happening!n") 2.4.3 linux/fs/jffs/intrep.c
OoO En cette fin de matinée radieuse du lundi 26 septembre 2005, vers
11:32, je disais:
J'ai comme donnée une IP sous la forme d'un struct in_addr et un
réseau défini pour le moment par une chaîne contenant sa notation CIDR
(network/mask). Existe-t-il une fonction toute faite pour tester
l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage
de network/mask, la conversion de la partie IP en un entier avec
inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation
CIDR.
Pour les archives, j'ai fait comme ça :
Fonction qui teste l'appartenance d'une IP à un réseau :
int parse_network(char *network, struct in_addr *net, int *cidr) {
char *cidr_s;
/* We seek for '/' */
if ((cidr_s = index(network, '/')) == NULL) {
/* No network part, this is an error */
syslog(LOG_ERR, "Unable to extract mask from %s", network);
return 0;
}
cidr_s++;
*cidr = atoi(cidr_s);
if (*cidr < 0 || *cidr > 32) {
syslog(LOG_ERR, "CIDR is not in 0..32 range in %s", network);
return 0;
}
/* We convert the IP */
*(--cidr_s) = ' ';
if (inet_aton(network, net) == 0) {
*cidr_s = '/';
syslog(LOG_ERR, "Not a valid IP : %s", network);
return 0;
}
*cidr_s = '/';
return 1;
}
Cette fonction a l'horrible désavantage de ne pas fonctionner avec le prototype
int parse_network(const char *network, struct in_addr *net, int *cidr)...
--
printk("Cool stuff's happening!n")
2.4.3 linux/fs/jffs/intrep.c
OoO En cette fin de matinée radieuse du lundi 26 septembre 2005, vers 11:32, je disais:
J'ai comme donnée une IP sous la forme d'un struct in_addr et un réseau défini pour le moment par une chaîne contenant sa notation CIDR (network/mask). Existe-t-il une fonction toute faite pour tester l'appartenance de l'IP au réseau ? Ou dois-je additionner le découpage de network/mask, la conversion de la partie IP en un entier avec inet_aton, la conversion du masque en un entier, etc ?
inet_network() semble assez proche, mais il ne prend pas la notation CIDR.
Pour les archives, j'ai fait comme ça :
Fonction qui teste l'appartenance d'une IP à un réseau :
int parse_network(char *network, struct in_addr *net, int *cidr) { char *cidr_s; /* We seek for '/' */ if ((cidr_s = index(network, '/')) == NULL) { /* No network part, this is an error */ syslog(LOG_ERR, "Unable to extract mask from %s", network); return 0; } cidr_s++; *cidr = atoi(cidr_s); if (*cidr < 0 || *cidr > 32) { syslog(LOG_ERR, "CIDR is not in 0..32 range in %s", network); return 0; }
/* We convert the IP */ *(--cidr_s) = ' '; if (inet_aton(network, net) == 0) { *cidr_s = '/'; syslog(LOG_ERR, "Not a valid IP : %s", network); return 0; } *cidr_s = '/'; return 1; }
Cette fonction a l'horrible désavantage de ne pas fonctionner avec le prototype int parse_network(const char *network, struct in_addr *net, int *cidr)... -- printk("Cool stuff's happening!n") 2.4.3 linux/fs/jffs/intrep.c