0

マシンの現在のIPアドレスを含むアプリケーションからメールを送信したいと思います。

メールコードを用意しましたが、機能します。電子メールの本文にIPアドレスを追加する必要があります(つまり、プログラムでIPアドレスを使用して何もしていません)。

システムコマンドを介してipconfigを実行し、結果のテキストを取得するような、本当に簡単な方法があることを期待していました。

ソケットを開ける必要はありません。

ありがとう、

4

6 に答える 6

1

gethostbyname(非推奨)またはそれ以降のいずれかを使用してくださいgetaddrinfo。MSDNリンクには例も含まれています。

于 2009-05-12T20:35:33.680 に答える
1

編集:まあ、それはあなたがVC ++を使用していてc#....を使用していないことを読んだ場合に役立ちます。

だからあなたは私の応答を無視するか、多分それをガイドとして使うことができます...

ここに行く:

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();

        }
    }

}

これにより、必要なすべての情報が得られ、必要な情報と不要な情報を解析できます。

于 2009-05-12T20:37:16.000 に答える
1

このコードは、すべてのアダプターをループし、最初のアダプターが稼働しているかどうかを確認します。

#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
}
于 2009-05-12T21:06:03.130 に答える
1

「JasonHeine」(名前にタグを付ける方法がわからない)コードをc++に更新しました。今では動作するはずです。ちなみに彼にthnx。だからこれは私が得るものです:

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();
}

これがお役に立てば幸いです。

私のPCでwifiとLAN接続、および「VMware Player」用のいくつかの仮想カードでテストしたところ、4つのIPv6を取得し、4つのIPv4に愛されました。IPv4のみが必要な場合は、次を使用できます。

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();
}

次に、IPv4のみを取得します。数字は4から始まります。でも私にとっては大丈夫です。新しい変数を追加して、番号付けを再計算できます:)

于 2014-08-01T23:58:32.023 に答える
0

winsock2.hを調べる必要があるかもしれないと思います

于 2009-05-12T20:31:51.487 に答える
0

確かにgetaddrinfoはあなたのケースで機能しますが、ipを読むだけではなく、Windows IPHelperapiを使用してipconfigユーティリティが行うことのほとんどを 実行できることをお伝えしたいと思います。

于 2009-05-12T21:07:34.267 に答える