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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции для работы с Ethernet адаптером 
:(
    Опции темы
Microbe
Дата 10.11.2004, 15:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите плс как в Borland'e работать с Ethernet адаптером, желательно с помощью API функций... В программе надо получить кадры, пришедшие на сетевую карту и анализировать их... лабы, млин smile smile
  Вверх
shedon
Дата 10.11.2004, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Microbe @ 10.11.2004, 12:02)
. В программе надо получить кадры, пришедшие на сетевую карту и анализировать их

Если надо просто отлавливать все сообщения пришедшие на сетевуху, то переводи её в режим promiscuous и лови пакеты.
Код

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

#pragma comment(lib, "ws2_32")

#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();
}



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


Unregistered











Thx, тока проблема в том, что нужно отлавливать все кадры ethernet'а а не только IP-пакеты... и анализировать кадр smile
  Вверх
shedon
Дата 10.11.2004, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Посмотри тут


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


Unregistered











smile Хорошая ссылочка. только жаль что мы не для линуха пишем.. =))))
вот еще бы оно в виндозе работало...
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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