Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Страницы: (4) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Как в Windows 9x можно перехватывать все пакеты локальной сети, используя winsock?
|
Сообщ.
#3
,
|
|
|
Написано, что надо переключить интерфейс на прием всех пакетов проходящих через интерфейс - promiscuous mode:
PromiscuousMode=1; ioctlsocket(hSocket, SIO_RCVALL, PromiscuousMode); Но в winsock2.h нет SIO_RCVALL. Пишу на Visual C++ 6.0 |
Сообщ.
#4
,
|
|
|
Цитата progr @ Но в winsock2.h нет SIO_RCVALL. Пишу на Visual C++ 6.0 обнови Platform SDK Цитата progr @ Как в Windows 9x можно перехватывать все пакеты локальной сети, используя winsock? http://rsdn.ru/article/net/sniffer.xml Libpcap (WinPCAP) http://www.tcpdump.org/ или придется писать NDIS/TDI драйвер |
Сообщ.
#5
,
|
|
|
progr
SIO_RCVALL использует также функция WSAIoctl() А для SIO_RCVALL надо Mstcpip.h |
Сообщ.
#6
,
|
|
|
Но способ с переводом в promiscuous mode работает только начиная с Windows 2000 как я понял.
Добавлено А мне нужно, чтобы это работало и более ранних версиях windows. |
Сообщ.
#7
,
|
|
|
а что за локалка - на хабах, или свитчах?
|
Сообщ.
#8
,
|
|
|
Сеть из нескольких компов и больше ничего.
|
Сообщ.
#9
,
|
|
|
progr
Цитата способ с переводом в promiscuous mode работает только начиная с Windows 2000 Не думаю - в Win98 реализована таже спецификация WinSock 2.2 Правда, в Visual Studio 6.0 нет Mstcpip.h, зато он есть в Borland CBuilder 6. Вот его полный текст: // Copyright (c) Microsoft Corporation. All rights reserved. #if _MSC_VER > 1000 #pragma once #endif /* Argument structure for SIO_KEEPALIVE_VALS */ struct tcp_keepalive { u_long onoff; u_long keepalivetime; u_long keepaliveinterval; }; // New WSAIoctl Options #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR,2) #define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR,3) #define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4) #define SIO_ABSORB_RTRALERT _WSAIOW(IOC_VENDOR,5) #define SIO_UCAST_IF _WSAIOW(IOC_VENDOR,6) #define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR,7) #define SIO_INDEX_BIND _WSAIOW(IOC_VENDOR,8) #define SIO_INDEX_MCASTIF _WSAIOW(IOC_VENDOR,9) #define SIO_INDEX_ADD_MCAST _WSAIOW(IOC_VENDOR,10) #define SIO_INDEX_DEL_MCAST _WSAIOW(IOC_VENDOR,11) // Values for use with SIO_RCVALL* options #define RCVALL_OFF 0 #define RCVALL_ON 1 #define RCVALL_SOCKETLEVELONLY 2 |
Сообщ.
#10
,
|
|
|
Просто я написал пример, на который Mfcer__ дал ссылку и пример этот не работает. К тому же в той же статье с примером написано, что способ с переводом сетевой карты в promiscuous mode в windows 9x не работает.
|
Сообщ.
#11
,
|
|
|
Цитата progr @ Просто я написал пример, на который Mfcer__ дал ссылку и пример этот не работает. К тому же в той же статье с примером написано, что способ с переводом сетевой карты в promiscuous mode в windows 9x не работает. winpcap должна работать под win9x |
Сообщ.
#12
,
|
|
|
progr
Цитата promiscuous mode в windows 9x не работает. Я прочел тоже эту статью и не нашел убедительных доводов К тому же термины RAW/IP RAW/TCP/UDP совершенно бессмысленны в смысле возможной поддержки со стороны системы Система должна поддерживать только RAW-сокеты, и это все. Что мы будем формировать - это не ее дело. Другое дело, что программное обеспечение не содержит какие-то хедеры, функции и т.д. - но это дело поправимое со стороны программиста. |
Сообщ.
#13
,
|
|
|
Я хотел бы без использования winpcap. Я подключил Mstcpip.h, но такой же облом. ioctlsocket(s,SIO_RCVALL,&flag) возвращает -1
|
Сообщ.
#14
,
|
|
|
progr
Цитата ioctlsocket(s,SIO_RCVALL,&flag) возвращает -1 1. ioctlsocket() - это спецификация Winsock 1.1, а она RAW не поддерживает 2. Надо использовать уже указанную WSAIoctl() 3.-1 ничего не говорит о виде ошибки, после неудачного вызова всегда надо вызывать WSAGetLastError(), которая и сообщит об истинной причине - это правило написания сетевых программ №1 |
Сообщ.
#15
,
|
|
|
А ты не мог бы дать пример правильного вызова WSAIoctl. А WSAGetLastError возвращает WSAEINVAL (Invalid argument) при использовании ioctlsocket.
|