Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
2-1156236491
misha_gr
2006-08-22 12:48
2006.09.10
Директивы компилятора


4-1147767225
aleks_z
2006-05-16 12:13
2006.09.10
SetupApi


2-1156174355
her
2006-08-21 19:32
2006.09.10
RichEdit.Lines.Add


15-1155808965
sleept
2006-08-17 14:02
2006.09.10
еще раз про пхп


3-1152217283
sholom
2006-07-07 00:21
2006.09.10
Это mysql не позволяет или комп?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский