C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как получить свой IP 1 / Общие вопросы / Сеть

Как получить свой IP
A: (SUnteXx)
Оригинальная ссылка: www.sources.ru

Вариант 1

Данная статья показывает, как можно определить свой IP (имеется в виду IPv4).
Начнем сразу с кода:
DWORD GetCurentIP()
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(1,1), &wsaData); // инициализируем socket'ы используя Ws2_32.dll для процесса

    char HostName[1024]; // создаем буфер для имени хоста
    DWORD m_HostIP = 0;

    if(!gethostname(HostName, 1024)) // получаем имя хоста
    {
        if(LPHOSTENT lphost = gethostbyname(HostName)) // получаем IP хоста, т.е. нашего компа
            m_HostIP = ((LPIN_ADDR)lphost->h_addr)->s_addr; // преобразуем переменную типа LPIN_ADDR в DWORD
    }
    WSACleanup(); // освобождаем сокеты, т.е. завершаем использование Ws2_32.dll
    return m_HostIP;
}
Если требуется создать строку из IP, то код будет выглядеть вот так:
DWORD GetCurentIP(LPSTR lpStringWithIP = 0)
// lpStringWithIP - поинтер на массив, состоящий из 17 символов
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(1,1), &wsaData); // инициализируем socket'ы используя Ws2_32.dll для процесса

    char HostName[1024]; // создаем буфер для имени хоста
    DWORD m_HostIP = 0;

    if(!gethostname(HostName, 1024)) // получаем имя хоста
    {
        if(LPHOSTENT lphost = gethostbyname(HostName)) // получаем IP хоста, т.е. нашего компа
            m_HostIP = ((LPIN_ADDR)lphost->h_addr)->s_addr; // преобразуем переменную типа LPIN_ADDR в DWORD
    }
    WSACleanup(); // освобождаем сокеты, т.е. завершаем использование Ws2_32.dll

    if (lpStringWithIP) // если поинтер на строку не нулевой
        strcpy(lpStringWithIP, inet_ntoa(*((in_addr*)lphost->h_addr_list[0]))); // то преобразуем IP в строку

    return m_HostIP;
}
Если надо получить сами числа, то код будет такой:
DWORD GetCurentIP(BYTE a1, BYTE a2, BYTE a3, BYTE a4)
// BYTE a1, BYTE a2, BYTE a3, BYTE a4 - биты адреса IP
{
    WSADATA wsaData;
    WSAStartup(MAKEWORD(1,1), &wsaData); // инициализируем socket'ы используя Ws2_32.dll для процесса

    char HostName[1024]; // создаем буфер для имени хоста
    DWORD m_HostIP = 0;

    if(!gethostname(HostName, 1024)) // получаем имя хоста
    {
        if(LPHOSTENT lphost = gethostbyname(HostName)) // получаем IP хоста, т.е. нашего компа
            m_HostIP = ((LPIN_ADDR)lphost->h_addr)->s_addr; // преобразуем переменную типа LPIN_ADDR в DWORD
    }
    WSACleanup(); // освобождаем сокеты, т.е. завершаем использование Ws2_32.dll

    a1=((LPIN_ADDR)lphost->h_addr)->s_b1; // присваиваем значение 1-го байта адреса
    a2=((LPIN_ADDR)lphost->h_addr)->s_b2; // присваиваем значение 2-го байта адреса
    a3=((LPIN_ADDR)lphost->h_addr)->s_b3; // присваиваем значение 3-го байта адреса
    a4=((LPIN_ADDR)lphost->h_addr)->s_b4; // присваиваем значение 4-го байта адреса

    /* // или можно еще так
    a1=lphost->h_addr_list[0];
    a2=lphost->h_addr_list[1];
    a3=lphost->h_addr_list[2];
    a4=lphost->h_addr_list[3]; */

    return m_HostIP;
}