Addresse broadcast c++
Résolu/Fermé
dwyane346
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
-
7 févr. 2010 à 22:59
dwyane346 Messages postés 147 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 6 septembre 2012 - 13 févr. 2010 à 02:50
dwyane346 Messages postés 147 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 6 septembre 2012 - 13 févr. 2010 à 02:50
A voir également:
- Addresse broadcast c++
- Addresse mac - Guide
- 5g broadcast - Accueil - Image & Son
- Addresse ip - Guide
- Yggtorrent addresse - Accueil - Outils
- Mon addresse - Guide
13 réponses
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
8 févr. 2010 à 11:42
8 févr. 2010 à 11:42
tu peux ececuter la commande ipconfig (si t'es sous windows), recuperer pour chaque reseau l'ip et le masque, et ainsi calculer l'adresse de broadcast
dwyane346
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
18
9 févr. 2010 à 00:48
9 févr. 2010 à 00:48
merci pour la reponse en faite je conne cette comande mais je ne savais pas que l on pouve executer des commandes systeme en c++ comment doi je mis prendre pour recuperer les info de ipconfig
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
9 févr. 2010 à 09:50
9 févr. 2010 à 09:50
je vais me faire taper sur les doigts, il parait que c'est pas bien d'utiliser cette fonction, mais je te la fille quand meme:
http://www.cplusplus.com/reference/cstdlib/system/
il me semblait qu'on pouvait récuperer le contenu, mais la visiblement il ne renvoit pas de tableau... (à la différence de la fonction équivalente en C++)
donc ce que je te conseille de faire, c'est d'envoyer ta reponse directement dans un fichier texte avec l'opérateur > (ca donnera donc ca comme commande ipconfig>fichier.txt )
et ensuite, t'ira lire ton fichier, et le supprimer...
il y a certainement une manière plus élégante de faire ceci, genre se conencter à une API reseau et recuperer les parametres IP locales
http://www.cplusplus.com/reference/cstdlib/system/
il me semblait qu'on pouvait récuperer le contenu, mais la visiblement il ne renvoit pas de tableau... (à la différence de la fonction équivalente en C++)
donc ce que je te conseille de faire, c'est d'envoyer ta reponse directement dans un fichier texte avec l'opérateur > (ca donnera donc ca comme commande ipconfig>fichier.txt )
et ensuite, t'ira lire ton fichier, et le supprimer...
il y a certainement une manière plus élégante de faire ceci, genre se conencter à une API reseau et recuperer les parametres IP locales
dwyane346
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
18
10 févr. 2010 à 02:26
10 févr. 2010 à 02:26
prefere vivement la deuxieme solution et je rejette la premiere car franchement trop zarbie mais merci quand meme j ai trouve un moyen de recuperer laddress ip et le masque de sous reseau now vait cree un convertisseur qui me calculera le broadcast
Merci
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
10 févr. 2010 à 08:31
10 févr. 2010 à 08:31
donne ta solution STP, ça peut toujours servir (et ça m'intéresse).
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
11 févr. 2010 à 10:32
11 févr. 2010 à 10:32
tiens char... ca fait quelques années que je me dis qu'il faut que je m'interesse à la capture de trames... et en cherchant des trucs sur libpcap ce matin, je suis tombé la dessus.... ca donne les info (j'ai pas testé)...
ca necessite d'inclure libpcap, mais au moins c'est plus propre que ma precedente solution:
http://yuba.stanford.edu/~casado/pcap/section1.html
ca necessite d'inclure libpcap, mais au moins c'est plus propre que ma precedente solution:
http://yuba.stanford.edu/~casado/pcap/section1.html
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
11 févr. 2010 à 11:03
11 févr. 2010 à 11:03
Ok, simple et efficace. Mais pas standard :-(
Merci.
Merci.
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
11 févr. 2010 à 11:05
11 févr. 2010 à 11:05
j'attend comme toi la solution qu'il dit avoir trouvé ...
dwyane346
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
18
11 févr. 2010 à 22:28
11 févr. 2010 à 22:28
Oui je ne sais pas si je me suis bien exprime en disant que je prefere la seconde solution mais voila moi sa regle presque mon probleme sa me retourne mon addresse ip et le masque de sous reseau
voici le code je compile avc visual studio
voici le code je compile avc visual studio
#include <winsock2.h> #include <ws2tcpip.h> // Link to Iphlpapi.lib #include <iphlpapi.h> #include <stdio.h> #include <iostream> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"Iphlpapi.lib") // Note: could also use malloc() and free() #define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x)) #define FREE(x) HeapFree(GetProcessHeap(), 0, (x)) int main() { int i; // Variables used by GetIpAddrTable PMIB_IPADDRTABLE pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal = 0; IN_ADDR IPAddr; // Variables used to return error message LPVOID lpMsgBuf; // Before calling AddIPAddress we use GetIpAddrTable to get // an adapter to which we can add the IP. pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(sizeof (MIB_IPADDRTABLE)); if (pIPAddrTable) { // Make an initial call to GetIpAddrTable to get the // necessary size into the dwSize variable if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { printf("Not enough space, re-allocate...\n"); FREE(pIPAddrTable); pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(dwSize); if (pIPAddrTable == NULL) { printf("Memory re-allocation failed for GetIpAddrTable()\n"); exit(1); } else printf("Memory re-allocation for GetIpAddrTable() is OK!\n"); } else printf("Buffer is sufficient...\n"); } // Make a second call to GetIpAddrTable to get the actual data we want if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable() failed with error %d\n", dwRetVal); if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) & lpMsgBuf, 0, NULL)) { printf("\tError: %s", lpMsgBuf); LocalFree(lpMsgBuf); } exit(1); } else printf("GetIpAddrTable() should be fine!\n"); printf("\n\tNumber of entries: %ld\n", pIPAddrTable->dwNumEntries); for (i=0; i < (int) pIPAddrTable->dwNumEntries; i++) { printf("\n\tInterface Index[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwIndex); IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwAddr; printf("\tIP Address[%d]: \t%s\n", i, inet_ntoa(IPAddr) ); IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwMask; printf("\tSubnet Mask[%d]: \t%s\n", i, inet_ntoa(IPAddr) ); IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwBCastAddr; printf("\tBroadCast[%d]: \t%s (%ld%) \n", i, inet_ntoa(IPAddr), pIPAddrTable->table[i].dwBCastAddr); printf("\tReassembly size[%d]:\t%ld\n", i, pIPAddrTable->table[i].dwReasmSize); printf("\tType and State[%d]:", i); printf("\n"); } // Clean up/reset if (pIPAddrTable) { FREE(pIPAddrTable); pIPAddrTable = NULL; } return 0; }
dwyane346
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
18
12 févr. 2010 à 02:21
12 févr. 2010 à 02:21
Bon j implemente le calcul du broadcast mais en decimal ( pour info l ordinateur l accepte c a d \\192.168.1.255 n a pas de diference avec \\4278298816) j ai du lire un petit cour sur le net pour savoir comment se calcule le broadcast en faisant un ou binaire puis un Et binaire
l addresse reseau s obtient en faisant un ET binaire entre address ip de la machine et de address du mask reseau
net_addr = host_addr & net_mask;
puis le broadcast en faisant un OU binaire de address reseau et l inverse des bit du masque
dir_bcast_addr = net_addr | (~net_mask);
bon faut que je trouve un autre cour pour le transforme en forme xxx.xxx.xxx.xxx genre 192.168.1.1
voici deja le code
Pour gagner du temps s il y en a un parmis vous qui a fait du reseau , s il peut poster comment faire pour passer du decimal au IPV4 merci .
Je pense que se n est pas complique sufi de declarer 4 variables
et de shifter le broadcast genre
1ervar = add_broad >> 16;
bon je n ai pas encore lu sa car en ce qui me concerne l addresse du broadcast en decimal permet de faire fonctioner mon programme mais j aurais aime avoir des explications merci;
l addresse reseau s obtient en faisant un ET binaire entre address ip de la machine et de address du mask reseau
net_addr = host_addr & net_mask;
puis le broadcast en faisant un OU binaire de address reseau et l inverse des bit du masque
dir_bcast_addr = net_addr | (~net_mask);
bon faut que je trouve un autre cour pour le transforme en forme xxx.xxx.xxx.xxx genre 192.168.1.1
voici deja le code
#include <winsock2.h> #include <ws2tcpip.h> #include <iphlpapi.h> #include <stdio.h> #include <iostream> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"Iphlpapi.lib") using namespace std; // Note: could also use malloc() and free() #define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x)) #define FREE(x) HeapFree(GetProcessHeap(), 0, (x)) u_long give_the_broadcast() { int i; u_long host_addr; u_long net_mask; u_long net_addr; u_long dir_bcast_addr; // Variables used by GetIpAddrTable PMIB_IPADDRTABLE pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal = 0; IN_ADDR IPAddr; // Variables used to return error message LPVOID lpMsgBuf; // Before calling AddIPAddress we use GetIpAddrTable to get // an adapter to which we can add the IP. pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(sizeof (MIB_IPADDRTABLE)); if (pIPAddrTable) { // Make an initial call to GetIpAddrTable to get the // necessary size into the dwSize variable if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { printf("Not enough space, re-allocate...\n"); FREE(pIPAddrTable); pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(dwSize); if (pIPAddrTable == NULL) { printf("Memory re-allocation failed for GetIpAddrTable()\n"); exit(1); } else printf("Memory re-allocation for GetIpAddrTable() is OK!\n"); } else printf("Buffer is sufficient...\n"); } // Make a second call to GetIpAddrTable to get the actual data we want if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable() failed with error %d\n", dwRetVal); if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) & lpMsgBuf, 0, NULL)) { printf("\tError: %s", lpMsgBuf); LocalFree(lpMsgBuf); } exit(1); } else printf("GetIpAddrTable() should be fine!\n"); printf("\n\tNumber of entries: %ld\n", pIPAddrTable->dwNumEntries); for (i=0; i < (int) pIPAddrTable->dwNumEntries; i++) { IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwAddr; host_addr = inet_addr(inet_ntoa(IPAddr)); printf("\tIP Address[%d]: \t%s\n", i, inet_ntoa(IPAddr) ); IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwMask; net_mask = inet_addr(inet_ntoa(IPAddr)); printf("\tSubnet Mask[%d]: \t%s\n", i, inet_ntoa(IPAddr) ); net_addr = host_addr & net_mask; dir_bcast_addr = net_addr | (~net_mask); cout << "\t broadcast = \t\t" << dir_bcast_addr << endl; printf("\n"); } // Clean up/reset if (pIPAddrTable) { FREE(pIPAddrTable); pIPAddrTable = NULL; } return (dir_bcast_addr); } int main() { u_long broadcast; broadcast = give_the_broadcast(); cout << "L addresse en decimal du broadcast est \n" << broadcast<< endl; }
Pour gagner du temps s il y en a un parmis vous qui a fait du reseau , s il peut poster comment faire pour passer du decimal au IPV4 merci .
Je pense que se n est pas complique sufi de declarer 4 variables
et de shifter le broadcast genre
1ervar = add_broad >> 16;
bon je n ai pas encore lu sa car en ce qui me concerne l addresse du broadcast en decimal permet de faire fonctioner mon programme mais j aurais aime avoir des explications merci;
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
12 févr. 2010 à 08:35
12 févr. 2010 à 08:35
Merci pour la solution. Dommage c'est du 100% windows :-(
Il existe des fonctions toutes faites pour mettre en forme une adresse réseau.
http://www.manpagez.com/man/3/inet_ntoa/
inet_ntoa devrai fonctionné.
sinon, avec des snprintf et des opérations binaires :
I1.I2.I3.I4
int I1=add_broad && \0xff000000;
int I2=add_broad && \0x00ff0000;
etc.
Il existe des fonctions toutes faites pour mettre en forme une adresse réseau.
http://www.manpagez.com/man/3/inet_ntoa/
inet_ntoa devrai fonctionné.
sinon, avec des snprintf et des opérations binaires :
I1.I2.I3.I4
int I1=add_broad && \0xff000000;
int I2=add_broad && \0x00ff0000;
etc.
dwyane346
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
18
13 févr. 2010 à 00:45
13 févr. 2010 à 00:45
Merci j ai teste tes operations binaires que j ai essaye d affiche avec cout mais sa ne marche pas elle m affiche 1 partout j ai utilise cout car snprintf deja que je ne sais pas l utiliser ne marche par sous windows
Pour le inet_ntoa sa marche merci
Pour le inet_ntoa sa marche merci
dwyane346
Messages postés
147
Date d'inscription
dimanche 11 janvier 2009
Statut
Membre
Dernière intervention
6 septembre 2012
18
13 févr. 2010 à 02:50
13 févr. 2010 à 02:50
Voici le code final avec l affichage du broadcast en IVP4 j ai pas teste mais je pensse que sous linux c est juste les library que tu va change
#include <winsock2.h> #include <ws2tcpip.h> #include <iphlpapi.h> #include <stdio.h> #include <iostream> #pragma comment(lib,"ws2_32.lib") #pragma comment(lib,"Iphlpapi.lib") using namespace std; // Note: could also use malloc() and free() #define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x)) #define FREE(x) HeapFree(GetProcessHeap(), 0, (x)) u_long give_the_broadcast() { int i; u_long host_addr; u_long net_mask; u_long net_addr; u_long dir_bcast_addr; // Variables used by GetIpAddrTable PMIB_IPADDRTABLE pIPAddrTable; DWORD dwSize = 0; DWORD dwRetVal = 0; IN_ADDR IPAddr; // Variables used to return error message LPVOID lpMsgBuf; // Before calling AddIPAddress we use GetIpAddrTable to get // an adapter to which we can add the IP. pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(sizeof (MIB_IPADDRTABLE)); if (pIPAddrTable) { // Make an initial call to GetIpAddrTable to get the // necessary size into the dwSize variable if (GetIpAddrTable(pIPAddrTable, &dwSize, 0) == ERROR_INSUFFICIENT_BUFFER) { printf("Not enough space, re-allocate...\n"); FREE(pIPAddrTable); pIPAddrTable = (MIB_IPADDRTABLE *) MALLOC(dwSize); if (pIPAddrTable == NULL) { printf("Memory re-allocation failed for GetIpAddrTable()\n"); exit(1); } else printf("Memory re-allocation for GetIpAddrTable() is OK!\n"); } else printf("Buffer is sufficient...\n"); } // Make a second call to GetIpAddrTable to get the actual data we want if ( (dwRetVal = GetIpAddrTable( pIPAddrTable, &dwSize, 0 )) != NO_ERROR ) { printf("GetIpAddrTable() failed with error %d\n", dwRetVal); if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwRetVal, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) & lpMsgBuf, 0, NULL)) { printf("\tError: %s", lpMsgBuf); LocalFree(lpMsgBuf); } exit(1); } else printf("GetIpAddrTable() should be fine!\n"); printf("\n\t Number of entries: %ld\n", pIPAddrTable->dwNumEntries); for (i=0; i < (int) pIPAddrTable->dwNumEntries; i++) { IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwAddr; host_addr = inet_addr(inet_ntoa(IPAddr)); printf("\t IP Address[%d]: \t\t%s\n", i, inet_ntoa(IPAddr) ); IPAddr.S_un.S_addr = (u_long) pIPAddrTable->table[i].dwMask; net_mask = inet_addr(inet_ntoa(IPAddr)); printf("\t Subnet Mask[%d]: \t\t%s\n", i, inet_ntoa(IPAddr) ); net_addr = host_addr & net_mask; dir_bcast_addr = net_addr | (~net_mask); cout << "\t broadcast en decimale \t" << dir_bcast_addr << endl; IPAddr.S_un.S_addr = dir_bcast_addr; cout << "\t broadcast en IVP4 \t\t" << inet_ntoa(IPAddr) << endl; printf("\n"); } // Clean up/reset if (pIPAddrTable) { FREE(pIPAddrTable); pIPAddrTable = NULL; } return (dir_bcast_addr); } int main() { give_the_broadcast(); }