• Viernes 8 de Noviembre de 2024, 14:23

Autor Tema:  Como Saber Mi Ip Y Mascara De Subred  (Leído 2640 veces)

pilarm

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Como Saber Mi Ip Y Mascara De Subred
« en: Jueves 10 de Agosto de 2006, 22:00 »
0
Hola a todos, tengo una pequeña dudilla, :unsure:  no se como hacer para saber mi ip y mascara de subred o mejor aun para saber el id de la subred, para poder calcular los host que estan en esa subred!!!!

Si algeuin me puede ayudar o dar unos enlaces le sabria agradecer!!1

Gracias de antemano  :rolleyes:

Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Como Saber Mi Ip Y Mascara De Subred
« Respuesta #1 en: Viernes 11 de Agosto de 2006, 01:19 »
0
Cita de: "pilarm"
no se como hacer para saber mi ip y mascara de subred o mejor aun para saber el id de la subred, para poder calcular los host que estan en esa subred!!!!

:comp: para la direccion ip de la pc checate esta discucion http://foros.solocodigo.com/index.php?showtopic=5694
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

wako13

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Como Saber Mi Ip Y Mascara De Subred
« Respuesta #2 en: Viernes 11 de Agosto de 2006, 02:22 »
0
Hola:

Aquí va una forma de conseguir la mascara en todas las versiones de Windows excepto Windows95.

Si necesitas que funcione también en Win95 tienes que instalar la versión 2 de la libreria Winsock.
    [Winsock 2 update]
    http://www.microsoft.com/.../W95Sockets2/Default.asp

- Creamos un proyecto nuevo y le añadimos un TListBox (ListBox1) y un botón.

- Añadimos las siguientes cabeceras:
Código:
Código: Text
  1. #include <winsock2.h>
  2. #include <ws2tcpip.h>
  3.  

- Añadimos las siguientes declaraciones en la parte privada de la clase de nuestro form:
Código:
Código: Text
  1. private:   // User declarations
  2.  
  3.     // Donde recibiremos la lista de interfaces
  4.     INTERFACE_INFO m_interfaceInfo[32];
  5.  
  6.     int __fastcall GetInterfaceInfo(void);
  7.  

- Implementamos la función GetInterfaceInfo:
Código:
Código: Text
  1. //---------------------------------------------------------------------------
  2. // Devuelve el numero de interfaces
  3. //  -1 en caso de error
  4. //---------------------------------------------------------------------------
  5. int __fastcall TForm1::GetInterfaceInfo(void)
  6. {
  7.     typedef WINSOCK_API_LINKAGE int WSAAPI (*PFWSAIoctl)(SOCKET, DWORD,
  8.             LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED,
  9.             LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  10.  
  11.     WSADATA wsaData;
  12.     if (WSAStartup(0x0002, &wsaData))
  13.         return -1;
  14.  
  15.     // Como no indicas que versión de C++Builder usas
  16.     //   cargamos dinámicamente la siguiente librería,
  17.     //   si estas usando BCB5/6 puedes enlazarla estáticamente
  18.     //   tienes ws2_32.lib en el subdirectorio ...\lib\Psdk
  19.     HINSTANCE hLib = LoadLibrary("ws2_32.dll");
  20.     if (!hLib)
  21.         return -1;
  22.  
  23.     // Obtenemos la direccion de "WSAIoctl" dinamicamente
  24.     PFWSAIoctl fWSAIoctl = (PFWSAIoctl)GetProcAddress(hLib, "WSAIoctl");
  25.     if (!fWSAIoctl)
  26.     {
  27.         FreeLibrary(hLib);
  28.         return -1;
  29.     }
  30.  
  31.     int s = socket(AF_INET, SOCK_RAW, 0);
  32.     DWORD dwBytesReturned;
  33.     int n = fWSAIoctl(s, SIO_GET_INTERFACE_LIST, NULL, 0,
  34.                       (LPVOID)&m_interfaceInfo, sizeof(m_interfaceInfo),
  35.                       &dwBytesReturned, NULL, NULL);
  36.  
  37.     n = (dwBytesReturned > 0) ? dwBytesReturned / sizeof(INTERFACE_INFO) : 0;
  38.  
  39.     closesocket(s);
  40.     FreeLibrary(hLib);
  41.     WSACleanup();
  42.  
  43.     return n;
  44. }
  45.  
  46.  
- Y finalmente el siguiente código en el OnClick del botón:
Código:
Código: Text
  1. void __fastcall TForm1::Button1Click(TObject *Sender)
  2. {
  3.   ListBox1->Clear();
  4.   int num = GetInterfaceInfo();
  5.   for (int i=0; i<num; ++i)
  6.   {
  7.     String addr = inet_ntoa(m_interfaceInfo[i].iiAddress.AddressIn.sin_addr);
  8.     String mask = inet_ntoa(m_interfaceInfo[i].iiNetmask.AddressIn.sin_addr);
  9.     DWORD flags = m_interfaceInfo[i].iiFlags;
  10.  
  11.     ListBox1->Items->Add("Addr:  " + addr);
  12.     ListBox1->Items->Add("Mask:  " + mask);
  13.     ListBox1->Items->Add("Flags:"
  14.         + String(flags & IFF_UP           ? " IFF_UP"           : "")
  15.         + String(flags & IFF_BROADCAST    ? " IFF_BROADCAST"    : "")
  16.         + String(flags & IFF_LOOPBACK     ? " IFF_LOOPBACK"     : "")
  17.         + String(flags & IFF_POINTTOPOINT ? " IFF_POINTTOPOINT" : "")
  18.         + String(flags & IFF_MULTICAST    ? " IFF_MULTICAST"    : "") );
  19.  
  20.     ListBox1->Items->Add("---");
  21.   }
  22. }
  23.  
  24.  

Conozco otras maneras de hacerlo, pero requieren de Windows 98 o superior.

-----------------------------------------------------------------------------------------------

Aquí tienes otra manera de conseguir los datos. Tal como esta funciona en el BCB6 y en todas las versiones de Windows excepto el 95.

En otras versiones de C++Builder habría que cargar dinámicamente la dll necesaria o generar la librería de importación correspondiente y además crear las estructuras y tipos necesarios ya que el resto de versiones no trae las cabeceras necesarias, al menos desde el BCB4 para atrás, no recuerdo si el BCB5 ya las tenia actualizadas.

- Añadimos un TListBox (ListBox1) a nuestro proyecto y luego las lineas siguientes:
Código:
Código: Text
  1. #include <iphlpapi.h>
  2. // Corregir aquí la ruta segun donde tengamos instalado nuestro BCB
  3. #pragma link "c:/borland/cbuilder6/lib/psdk/iphlpapi.lib"
  4.  

- Y finalmente el siguiente código en el constructor del form:
Código:
Código: Text
  1. __fastcall TForm1::TForm1(TComponent* Owner)
  2.     : TForm(Owner)
  3. {
  4.     IP_ADAPTER_INFO AdapterInfo[20], *pAdapterInfo;
  5.     ULONG bufferLen = sizeof(AdapterInfo);
  6.  
  7.     pAdapterInfo = AdapterInfo;
  8.     GetAdaptersInfo(pAdapterInfo, &bufferLen);
  9.  
  10.     while(pAdapterInfo)
  11.     {
  12.         String sName = pAdapterInfo->Description;
  13.         String sIp   = pAdapterInfo->IpAddressList.IpAddress.String;
  14.         String sMask = pAdapterInfo->IpAddressList.IpMask.String;
  15.  
  16.         ListBox1->Items->Add("Adaptador: " + sName);
  17.         ListBox1->Items->Add("IP:        " + sIp);
  18.         ListBox1->Items->Add("Mascara:   " + sMask);
  19.         ListBox1->Items->Add("---");
  20.  
  21.         pAdapterInfo = pAdapterInfo->Next;
  22.     }
  23. }
  24.  

Fíjate en la documentación de la función GetAdaptersInfo y la estructura IP_ADAPTER_INFO donde obtenemos más información de la que se muestra en el ejemplo.


Autor del Código

_Leo
Ubicación: Lanzarote - Islas Canarias (España)

pilarm

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Como Saber Mi Ip Y Mascara De Subred
« Respuesta #3 en: Viernes 11 de Agosto de 2006, 05:23 »
0
Muchisimas gracias!!!!

Voy a probrar si me sirve!!!

Cuando puedas me das tu e-mail por aqui para agregarte y estar en contacto, plis
 :hola: