Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.
Как получить свой 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;
 
 }



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS