Получить IP-адрес машины - PullRequest
       39

Получить IP-адрес машины

87 голосов
/ 17 октября 2008

Этот вопрос почти такой же, как ранее задаваемый Получить IP-адрес локального компьютера -Вопрос. Однако мне нужно найти IP-адрес (а) Linux Machine .

Итак: Как мне - программным способом на C ++ - определить IP-адреса сервера linux, на котором запущено мое приложение. Серверы будут иметь как минимум два IP-адреса, и мне нужен конкретный (тот, что в данной сети (общедоступный)).

Я уверен, что для этого есть простая функция, но где?


Чтобы прояснить ситуацию:

  • Сервер, очевидно, будет иметь "localhost": 127.0.0.1
  • Сервер будет иметь внутренний (управляющий) IP-адрес: 172.16.x.x
  • Сервер будет иметь внешний (общедоступный) IP-адрес: 80.190.x.x

Мне нужно найти внешний IP-адрес, чтобы привязать к нему мое приложение. Очевидно, что я также могу связываться с INADDR_ANY (и на самом деле это то, что я делаю в данный момент). Я бы предпочел определить публичный адрес.

Ответы [ 12 ]

0 голосов
/ 29 сентября 2012

Элегантное скриптовое решение для Linux можно найти по адресу: http://www.damnsmalllinux.org/f/topic-3-23-17031-0.html

0 голосов
/ 28 марта 2011

// Use a HTTP request to a well known server that echo's back the public IP address void GetPublicIP(CString & csIP) { // Initialize COM bool bInit = false; if (SUCCEEDED(CoInitialize(NULL))) { // COM was initialized bInit = true;

    // Create a HTTP request object
    MSXML2::IXMLHTTPRequestPtr HTTPRequest;
    HRESULT hr = HTTPRequest.CreateInstance("MSXML2.XMLHTTP");
    if (SUCCEEDED(hr))
    {
        // Build a request to a web site that returns the public IP address
        VARIANT Async;
        Async.vt = VT_BOOL;
        Async.boolVal = VARIANT_FALSE;
        CComBSTR ccbRequest = L"http://whatismyipaddress.com/";

        // Open the request
        if (SUCCEEDED(HTTPRequest->raw_open(L"GET",ccbRequest,Async)))
        {
            // Send the request
            if (SUCCEEDED(HTTPRequest->raw_send()))
            {
                // Get the response
                CString csRequest = HTTPRequest->GetresponseText();

                // Parse the IP address
                CString csMarker = "<!-- contact us before using a script to get your IP address -->";
                int iPos = csRequest.Find(csMarker);
                if (iPos == -1)
                    return;
                iPos += csMarker.GetLength();
                int iPos2 = csRequest.Find(csMarker,iPos);
                if (iPos2 == -1)
                    return;

                // Build the IP address
                int nCount = iPos2 - iPos;
                csIP = csRequest.Mid(iPos,nCount);
            }
        }
    }
}

// Unitialize COM
if (bInit)
    CoUninitialize();

}

...