Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

Анализ и обработка служебной информации   Найти похожие ветки 

 
ms_odin   (2006-04-21 09:36) [0]

День добрый, Мастера!
Прошу подсказать с направлением поисков:
для отладки девайса, связь с которым осуществляется через Ethernet, необходимо обрабатывать ВСЮ информацию, приходящую от него, т.е. и заголовки протоколов TCP и IP. Однако та же функция recvfrom из состава Winsock2, позволяет получить только непосредственно целевую информацию, котрая и находится в буфере приема.
Приведу пример: я передаю 1 Байт. функция recvfrom вернет значение 1 и этот байт в буфере. Но ведь передаваемый по сети пакет был как минимум 43 Байта!?
Вопрос: а как можно обратиться к заголовку, скажем, IP - пакета, чтобы посмотреть: версию, длину заголовка, флаги, TTL и все остальное?


 
Сергей М. ©   (2006-04-21 09:43) [1]

socket( AF_INET, SOCK_RAW, IPPROTO_IP );


 
ms_odin   (2006-04-21 11:09) [2]

Простите, не очень понятно:

function socket( const af, struct, protocol: Integer ): TSocket; stdcall;


Эта функция меняет свои значения при каждом из принятых пакетов? Ведь заголовки каждый раз меняются. И когда ее вызывать - после recv?


 
Сергей М. ©   (2006-04-21 13:11) [3]

Эта ф-ция создает гнездо для работы с "грязными" данными, при этом прием-передача инф-ции осуществляется на уровне IP, т.е. то что тебе как раз нужно - заголовки и пр.


 
SPACE!!   (2006-04-23 21:08) [4]

Если для отладки, то  можно просто поискать хороший снифер ...
Насчет сырых сокетов, то для семейсвта ОС Windows не ниже 2000 .
Есть другие способы.


 
ms_odin   (2006-04-24 09:35) [5]

To Сергей М.
Спасибо за ответ, но мне все-равно не совсем понятно, как обратиться к этим самым "грязным" данным. Читаю мануал, там пишут:
The Windows Sockets socket function creates a socket which is bound to a specific service provider.

SOCKET socket (

   int af,
   int type,
   int protocol
  );
...
Connectionless, message-oriented sockets allow sending and receiving of datagrams to and from arbitrary peers using sendto and recvfrom. If such a socket is connected to a specific peer, datagrams can be sent to that peer using send and can be received only from this peer using recv.

Прием пакета осуществляю так:

var
 WSAData        : TWSAData;
 SockAddr        : TSockAddr;
 LenSockAddr   : INTEGER;
 RxSocket        : TSocket;
begin
WSAStartup($0002, WSAData);    // инициализируем WinSock
RxSocket:= Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);          // открываем сокет для работы через UDP
SockAddr.sin_family     := AF_INET;
 SockAddr.sin_port       := Htons(Port);
 SockAddr.sin_addr.s_addr:= inet_addr(Addr);
 LenSockAddr:= SizeOf(SockAddr);
 bind(RxSocket, @SockAddr, LenSockAddr);                       // связываем сокет с адресом
 Result:= RecvFrom(RxSocket, pBuf^, $FFFF, 0, SockAddr, LenSockAddr);
 CloseSocket(RxSocket);
 WSACleanup;
end;

Но указатель на принятый буфер содержит непосредственно переданную информацию, без служебки. Не могли бы Вы посоветовать, как к ней обратиться, или подсказать направление поисков?

To SPACE!!

Если для отладки, то  можно просто поискать хороший снифер ...
Насчет сырых сокетов, то для семейсвта ОС Windows не ниже 2000 .
Есть другие способы.

Простите, не очень понял ответ насчет сырых сокетов. :-)
Снифер не нужен - надо программулину писать.
Спасибо


 
Сергей М. ©   (2006-04-24 10:10) [6]


> Прием пакета осуществляю так:
> ...
> RxSocket:= Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); // открываем сокет для работы через UDP


А следует иначе:

RxSocket:= Socket(AF_INET, SOCK_RAW, IPPROTO_IP); // открываем сокет для работы непосредственно с IP


 
ms_odin   (2006-04-24 15:23) [7]

Огромное спасибо!
Действительно, неправильно указывал тип протокла в Socket: смутило в примере, которым пользовался, буквы IP в константе  IPPROTO_UDP - даже не подумал, что указываю не тот протокол.
Все заработало, еще раз спасибо.



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
2-1155856952
SerJaNT
2006-08-18 03:22
2006.09.10
Handle активного окна


15-1155806124
Rouse_
2006-08-17 13:15
2006.09.10
Каждому спамеру по бульдозеру :)


15-1155712155
TUser
2006-08-16 11:09
2006.09.10
КСЕ


1-1153919069
DK2006
2006-07-26 17:04
2006.09.10
Clipboard


8-1140529733
hh_speed
2006-02-21 16:48
2006.09.10
как узнать частоту кадров у AVI