Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IP компа 
:(
    Опции темы
aMiGo!
Дата 19.6.2003, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Кто знает, как узнать IP соединенного по модему компа, как это делает XP.

Это сообщение отредактировал(а) aMiGo! - 19.6.2003, 00:56
--------------------
With the best regards, Anton
PM MAIL   Вверх
shedon
Дата 19.6.2003, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Как это делает XP не знаю, но это можно узнать перехватив IP пакет. И прочитав его заголовок.


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
aMiGo!
Дата 19.6.2003, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



я в этом не разбираюсь, но разве в каждом загловке пакета есть IP?, если есть, то как его прехватить?

Это сообщение отредактировал(а) aMiGo! - 19.6.2003, 13:07
--------------------
With the best regards, Anton
PM MAIL   Вверх
shedon
Дата 19.6.2003, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Код

WSADATA     wsadata;   // Инициализация WinSock.
 unsigned long        flag = 1;  // Флаг PROMISC Вкл/выкл.

 // инициализация
 WSAStartup(MAKEWORD(2,2), &wsadata);
 s = socket( AF_INET, SOCK_RAW, IPPROTO_IP ); //  s = socket(PF_PACKET, SOCK_RAW, htons(IPPROTO_IP));
 gethostname(name, sizeof(name));
 phe = gethostbyname( name );
 ZeroMemory( &sa, sizeof(sa) );
 sa.sin_family = AF_INET;
 sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
 bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));

 // Включение promiscuous mode.
 ioctlsocket(s, SIO_RCVALL, &flag);

 // Цикл приёма IP-пакетов.
 while( f_thread )
 {
   int count;
   count = recv( s, Buffer, sizeof(Buffer), 0 );
   // обработка IP-пакета
   if( count >= sizeof(IPHeader) )
   {
 IPHeader* hdr = (IPHeader *)Buffer;

 // Преобразуем в понятный вид адрес отправителя.

 sa1.s_addr = hdr->iph_src;
 m_string = inet_ntoa(sa1);
  }
}
//.......
//.......


Ну здесь ещё много чего можно понаписать в общем если это протокол UDP или TCP, то адресс отправителя будет в m_string.



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
aMiGo!
Дата 19.6.2003, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Биг спасибо ту shedon!
--------------------
With the best regards, Anton
PM MAIL   Вверх
aMiGo!
Дата 19.6.2003, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поспешил я с убеждениями, shedon, ну ты и наворотил тут smile.gif, кое-как, все поправил, но что такое IPHeader??, его даже MSDK не знает.
--------------------
With the best regards, Anton
PM MAIL   Вверх
Guest_shedon
Дата 19.6.2003, 15:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я просто выдернул этот кусок кода из недоднлоннаго снифера, а IPHeader забыл.
Код

//Структура заголовка IP-пакета

typedef struct IPHeader {
 UCHAR   iph_verlen;   // версия и длина заголовка
 UCHAR   iph_tos;      // тип сервиса
 USHORT  iph_length;   // длина всего пакета
 USHORT  iph_id;       // Идентификация
 USHORT  iph_offset;   // флаги и смещения
 UCHAR   iph_ttl;      // время жизни пакета
 UCHAR   iph_protocol; // протокол
 USHORT  iph_xsum;     // контрольная сумма
 ULONG   iph_src;      // IP-адрес отправителя
 ULONG   iph_dest;     // IP-адрес назначения
} IPHeader;

  Вверх
aMiGo!
Дата 19.6.2003, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот теперь СПАСИБО! smile.gif
--------------------
With the best regards, Anton
PM MAIL   Вверх
Guest_shedon
Дата 19.6.2003, 15:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Please
  Вверх
aMiGo!
Дата 19.6.2003, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Люди, никак не могу разобраться, у меня по исходнику shedon'а m_string заполнен, чем-то страшным ужасным, там IP'шником даже не пахнет и работает через раз, может кто кинет 100% работающий исходник.
--------------------
With the best regards, Anton
PM MAIL   Вверх
shedon
Дата 20.6.2003, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Код

#include <conio.h>
#include <stdio.h>
#include <winsock2.h>

#define MAX_PACKET_SIZE    0x10000
#define SIO_RCVALL         0x98000001
// Буфер для приёма данных
char Buffer[MAX_PACKET_SIZE]; // 64 Kb

//Структура заголовка IP-пакета

typedef struct IPHeader {
 UCHAR   iph_verlen;   // версия и длина заголовка
 UCHAR   iph_tos;      // тип сервиса
 USHORT  iph_length;   // длина всего пакета
 USHORT  iph_id;       // Идентификация
 USHORT  iph_offset;   // флаги и смещения
 UCHAR   iph_ttl;      // время жизни пакета
 UCHAR   iph_protocol; // протокол
 USHORT  iph_xsum;     // контрольная сумма
 ULONG   iph_src;      // IP-адрес отправителя
 ULONG   iph_dest;     // IP-адрес назначения
} IPHeader;

char src[10];
char dest[10];
char ds[15];
unsigned short lowbyte;
unsigned short hibyte;

void main()
{
 WSADATA     wsadata;   // Инициализация WinSock.
 SOCKET      s;         // Cлущающий сокет.
 char        name[128]; // Имя хоста (компьютера).
 HOSTENT*    phe;       // Информация о хосте.
 SOCKADDR_IN sa;        // Адрес хоста
 IN_ADDR sa1;        //
 unsigned long        flag = 1;  // Флаг PROMISC Вкл/выкл.

 // инициализация
 WSAStartup(MAKEWORD(2,2), &wsadata);
 s = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
 gethostname(name, sizeof(name));
 phe = gethostbyname( name );
 ZeroMemory( &sa, sizeof(sa) );
 sa.sin_family = AF_INET;
 sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr;
 bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR));
 
 // Включение promiscuous mode.
 ioctlsocket(s, SIO_RCVALL, &flag);

 // Бесконечный цикл приёма IP-пакетов.
 while( !_kbhit() )
 {
   int count;
   count = recv( s, Buffer, sizeof(Buffer), 0 );
   // обработка IP-пакета
   if( count >= sizeof(IPHeader) )
   {
     IPHeader* hdr = (IPHeader *)Buffer;
     //Начинаем разбор пакета...

strcpy(src,"Пакет: ");
CharToOem(src,dest);
printf(dest);
// Преобразуем в понятный вид адрес отправителя.
printf("From ");
sa1.s_addr = hdr->iph_src;
printf(inet_ntoa(sa1));

// Преобразуем в понятный вид адрес получателя.
printf(" To ");
sa1.s_addr = hdr->iph_dest;
printf(inet_ntoa(sa1));

// Вычисляем протокол. Полный список этих констант
// содержится в файле winsock2.h
printf(" Prot: ");
if(hdr->iph_protocol == IPPROTO_TCP) printf("TCP ");
if(hdr->iph_protocol == IPPROTO_UDP) printf("UDP ");

// Вычисляем размер. Так как в сети принят прямой порядок
// байтов, а не обратный, то прийдётся поменять байты местами.
printf("Size: ");
lowbyte = hdr->iph_length>>8;
hibyte = hdr->iph_length<<8;
hibyte = hibyte + lowbyte;
printf("%s",itoa(hibyte,"",10));

// Вычисляем время жизни пакета.
printf(" TTL:%s",itoa(hdr->iph_ttl,"",10));
printf("\n");

   }
 }

 closesocket( s );
 WSACleanup();
}

Для успешной компиляции, необходимо подключить к проекту файл ws2_32.lib.

Должен работать 100%. Только под Win2K/XP


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
stab
Дата 20.6.2003, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



может лучше RasGetProjectionInfo ? если надо получить хендл соединения, то RasEnumConnections


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
aMiGo!
Дата 20.6.2003, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Должен работать 100%. Только под Win2K/XP


а что делать в 9x??
--------------------
With the best regards, Anton
PM MAIL   Вверх
Baa
Дата 20.6.2003, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
а что делать в 9x??

Это извращение - использовать сниффер...
Надо использовать RasApi, и никак иначе.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
aMiGo!
Дата 20.6.2003, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я тоже так считаю, но как именно ее использовать, может кинешь пару сорцев..
--------------------
With the best regards, Anton
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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