2009-05-12 8 views
0

Je souhaite envoyer un e-mail à partir d'une application contenant l'adresse IP actuelle de la machine. J'ai le code email en place et cela fonctionne. J'ai juste besoin d'ajouter l'adresse ipaddress au corps de l'email (c'est-à-dire que je ne fais rien par programmation avec l'adresse IP).Récupération de l'adresse IP actuelle à partir d'une application (VC++ 2005)

J'espérais qu'il y avait un moyen très simple d'exécuter ipconfig via la commande système et de saisir le texte résultant.

Je préfère ne pas avoir à ouvrir une socket.

Merci,

Répondre

1

Ce code boucle toutes les cartes et vérifie le premier qui est en haut.

#include <afxtempl.h> 
#include <afxsock.h> 
#include <iphlpapi.h> 

u_long GetFirstIpAddressUp(SOCKET s) 
{ 
#define MAX_ADAPTERS 30 
#pragma comment(lib, "Iphlpapi.lib") 
    IP_ADAPTER_ADDRESSES AdapterAddresses[MAX_ADAPTERS];   
    PIP_ADAPTER_ADDRESSES pAdapterAddresses = AdapterAddresses;            
    DWORD dwBufLen = sizeof(AdapterAddresses); 
    if (GetAdaptersAddresses(AF_INET, 0, NULL, AdapterAddresses,&dwBufLen) == ERROR_SUCCESS) 
    { 
     do { 
      if ((pAdapterAddresses->OperStatus == IfOperStatusUp)) 
      { 
       sockaddr_in* pAdr = (sockaddr_in*)pAdapterAddresses->FirstUnicastAddress->Address.lpSockaddr; 
       return pAdr->sin_addr.S_un.S_addr; 
      } 
     pAdapterAddresses = pAdapterAddresses->Next; 
     } while(pAdapterAddresses); 
    } 
    return INADDR_ANY; // No adapters are up 
} 
0

je crois que vous pourriez avoir besoin de regarder dans Winsock2.h

1

EDIT: Eh bien, ça aide si je lis que vous utilisez VC++ et non C# .....

Vous pouvez donc ignorer ma réponse, ou peut-être utiliser comme guide ...

ici ya go:

using System; 
using System.Net; 


namespace testProgram 
{ 
    class Program 
    { 
     static void Main() 
     { 
      String strHostName = string.Empty; 
      // Getting Ip address of local machine... 
      // First get the host name of local machine. 
      strHostName = Dns.GetHostName(); 
      Console.WriteLine("Local Machine's Host Name: " + strHostName); 


      // Then using host name, get the IP address list.. 
      IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 
      IPAddress[] addr = ipEntry.AddressList; 

      for (int i = 0; i < addr.Length; i++) 
      { 
       Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString()); 
      } 
      Console.ReadLine(); 

     } 
    } 

} 

cela vous donnera toutes les informations dont vous avez besoin et puis certains, vous pouvez analyser ce que vous avez besoin et n'avez pas besoin.

0

Certainement GetAddrInfo œuvres dans votre cas, mais je pensais que je vous signale que si vous voulez tous les plus juste de lire l'adresse IP, vous pouvez utiliser les fenêtres IP Helper api pour faire la plupart de ce que l'utilitaire ipconfig fait.

1

J'ai mis à jour le code "Jason Heine" (je ne sais pas comment étiqueter un nom) en C++. maintenant ça devrait marcher. à propos, à lui. donc ce que je reçois:

using namespace System; 
using namespace System::Net; 

void main(){ 
    String ^strHostName = String::Empty; 
    // Getting Ip address of local machine... 
    // First get the host name of local machine. 
    strHostName = Dns::GetHostName(); 
    Console::WriteLine("Local Machine's Host Name: " + strHostName); 

    // Then using host name, get the IP address list.. 
    IPHostEntry^ ipEntry = Dns::GetHostEntry(strHostName); 
    array<IPAddress^> ^addr = ipEntry->AddressList; 

    for (int i = 0; i < addr->Length; i++) 
    { 
     Console::WriteLine("IP Address {0}: {1} ", i, addr[i]->ToString()); 
    } 
    Console::ReadKey(); 
} 

J'espère que cela vous aidera.

Testé sur mon PC avec wifi et LAN connecten et peu de cars virtuels pour "VMware Player" et je reçois 4 IPv6 et puis foloved par 4 IPv4. Si vous n'avez besoin que d'IPv4, vous pouvez utiliser:

using namespace System; 
using namespace System::Net; 

void main(){ 
    String ^strHostName = String::Empty; 
    // Getting Ip address of local machine... 
    // First get the host name of local machine. 
    strHostName = Dns::GetHostName(); 
    Console::WriteLine("Local Machine's Host Name: " + strHostName); 

    // Then using host name, get the IP address list.. 
    IPHostEntry^ ipEntry = Dns::GetHostEntry(strHostName); 
    array<IPAddress^> ^addr = ipEntry->AddressList; 

    for (int i = 0; i < addr->Length; i++) 
    { 
     if(addr[i]->ToString()->Length < 20){ 
      Console::WriteLine("IP Address {0}: {1} ", i, addr[i]->ToString()); 
     } 
    } 
    Console::ReadKey(); 
} 

Ensuite, je reçois seulement IPv4. juste des chiffres commencent à partir de 4. Mais pour moi c'est ok. vous pouvez ajouter une nouvelle variable pour recalculer la numérotation :)