Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить IP-адрес своей машины 
:(
    Опции темы
EnergoHokum
Дата 2.11.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



Есть ли функции/функция WinAPI, которой можно было бы получить IP машины, где запущена программа? Про WinSock знаю, но интересуют именно "родные" API-шные функции.
PM MAIL ICQ   Вверх
Andrey44
Дата 2.11.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



DWORD GetIPAddress(
  HWND hParent
);
 smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
EnergoHokum
Дата 2.11.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



Мне бы что-нить для консоли, эта программа будет в сервисе сидеть...
PM MAIL ICQ   Вверх
Andrey44
Дата 2.11.2007, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



А какая разница? 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
EnergoHokum
Дата 2.11.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



А где я в консоли HWND возьму?
PM MAIL ICQ   Вверх
Andrey44
Дата 2.11.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 8
Всего: 26



Ну попробуй просто передать 0 smile 
Или есть же по-моему функция GetConsoleWindow(.....)


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
dumb
Дата 2.11.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



Цитата(EnergoHokum @  2.11.2007,  10:26 Найти цитируемый пост)
интересуют именно "родные" API
что это такое ты подразумеваешь под "родными API", что winsock у тебя неродным получился? smile

Цитата(Andrey44 @  2.11.2007,  11:30 Найти цитируемый пост)
DWORD GetIPAddress(HWND hParent);
уже сама декларация в ступор вводит - нафига для получения адреса нужен хэндл окна?!.. да и не было такой вроде.. прояснилось:
Цитата

GetIPAddress
This function prompts the user for the IP address if the Serial Line Internet Protocol (SLIP) connection does not have a valid IP address.
...
Requirements
Header    netui.h
Library    Netui.lib
Windows Embedded CE    Windows CE 2.10 and later

короче мимо. вообще. smile

а правильный "суповой набор" - IP Helper
PM MAIL   Вверх
Pulse69
Дата 2.11.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 28.4.2006
Где: Хабаровск

Репутация: 8
Всего: 10



[offtopic]
Интересно, зачем вообще искать какие-то "родные API" для получения IP адреса, когда есть не менее "родной" WinSock API.
И вообще, когда это WinSock перестал быть "родным API"?
[/offtopic]

--------------------
Ctrl+Alt+Reset 
PM MAIL   Вверх
DominiK
Дата 2.11.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 11.3.2007
Где: Россия, Омск

Репутация: нет
Всего: нет



Цитата(Pulse69 @ 2.11.2007,  14:14)
[offtopic]
Интересно, зачем вообще искать какие-то "родные API" для получения IP адреса, когда есть не менее "родной" WinSock API.
И вообще, когда это WinSock перестал быть "родным API"?
[/offtopic]

Да да да.



GetCurrentIP(LPSTR lpStringWithIP)
{
    LPHOSTENT lphost;
    char HostName[1024]; 
    DWORD m_HostIP = 0;

    if(!gethostname(HostName, 1024)) 
    {
        if(lphost = gethostbyname(HostName)) 
            m_HostIP = ((LPIN_ADDR)lphost->h_addr)->s_addr; 
    }


    if (lpStringWithIP) 
        strcpy(lpStringWithIP, inet_ntoa(*((in_addr*)lphost->h_addr_list[0]))); 

    return m_HostIP;
}
Пользуйся.

Это сообщение отредактировал(а) DominiK - 2.11.2007, 19:40
PM MAIL   Вверх
EnergoHokum
Дата 2.11.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



Чичас буду посмотреть, как это работает. Только я под MinGW работаю, есть ли там такие функции...
PM MAIL ICQ   Вверх
EnergoHokum
Дата 2.11.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



В заголовочных файлах MinGW такой функции нет, придётся, наверное, пользовать WinSock.
PM MAIL ICQ   Вверх
jonie
Дата 3.11.2007, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



gethostbyname чушь. у меня не один интерфейс на машине.
рой в строну SnmpExtensionInit(), SnmpExtensionQuery (), SnmpExtensionTrap () SnmpExtensionInitEx()
в общем статья есть неплохая с исходником.
гугл найдет :
http://www.google.com/search?client=opera&...-8&oe=utf-8


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Pulse69
Дата 3.11.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 28.4.2006
Где: Хабаровск

Репутация: 8
Всего: 10



Цитата(jonie @  3.11.2007,  17:06 Найти цитируемый пост)
gethostbyname чушь. у меня не один интерфейс на машине.


Есть альтернативный вариант - getaddrinfo, которая получает полный список IP-адресов машины. SNMP для простого опрделения IP-адреса похоже на перебор.

Код

// testp.cpp : Defines the entry point for the console application.
//

#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>

#include <iostream>

// Прилинковать к библиотеке winsock
#pragma comment( lib, "ws2_32.lib" )

int main(int argc, char* argv[])
{
    WSADATA wsa;
    WSAStartup( MAKEWORD(2,2), &wsa );

    char host_name[NI_MAXHOST];
    gethostname( host_name, NI_MAXHOST );

    addrinfo *info;
    int ret = getaddrinfo(host_name, NULL, NULL, &info );
    
    struct sockaddr_in *addr_in_ptr = NULL;

    if( !ret && info )
    {
        for( addrinfo *pInfo = info; pInfo; pInfo = pInfo->ai_next )
        {
            if( pInfo->ai_addrlen == sizeof( sockaddr_in ) )
            {
                addr_in_ptr = (sockaddr_in*)pInfo->ai_addr;
                std::cout << "IP: " << inet_ntoa(addr_in_ptr->sin_addr) << std::endl;
            }
        }
    }

    WSACleanup();
    return 0;
}


--------------------
Ctrl+Alt+Reset 
PM MAIL   Вверх
EnergoHokum
Дата 6.11.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: 3
Всего: 6



Ага, пасибо! Стал ковыряться в книге "Сетевое программирование для UNIX" -- раскопал там эту функцию (getaddrinfo). А Winsock считаю неродным для винды потому, что он нагло спёрт у *BSD, да и костыли видны: WSAStartup, WSACleanup.
PM MAIL ICQ   Вверх
dumb
Дата 6.11.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 27
Всего: 158



Цитата(EnergoHokum @  6.11.2007,  10:26 Найти цитируемый пост)
А Winsock считаю неродным для винды потому, что он нагло спёрт у *BSD, да и костыли видны: WSAStartup, WSACleanup.
smile не сперт, не костыли. если следовать твоей логике, то для винды ничего родного нету и сама она "неродная".
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.