Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
В общем скомпилил пример из http://www.sources.ru/cpp/network/sniff_2k_xp.shtml
но вылетает в ошибку 10022 Прикреплённый файлTrafik.zip (6.54 Кбайт, скачиваний: 180) |
Сообщ.
#2
,
|
|
|
Либо не создается сокет либо он не привязывется к локальному адресу.
Чуток подправил код проверь его и на будующее проверяй что возвращяют функции int _tmain(int argc, _TCHAR* argv[]) { 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 ); if(s == INVALID_SOCKET) { sprintf( Buffer, "Oшибка: %d", WSAGetLastError() ); MessageBox( NULL, Buffer, "Ошибка", MB_ICONSTOP); return 1; } if(gethostname(name, sizeof(name)) == SOCKET_ERROR) { sprintf( Buffer, "Oшибка: %d", WSAGetLastError() ); MessageBox( NULL, Buffer, "Ошибка", MB_ICONSTOP); return 2; } phe = gethostbyname( name ); if(!phe) { sprintf( Buffer, "Oшибка: %d", WSAGetLastError() ); MessageBox( NULL, Buffer, "Ошибка", MB_ICONSTOP); return 3; } ZeroMemory( &sa, sizeof(sa) ); sa.sin_family = AF_INET; sa.sin_addr.s_addr = ((struct in_addr *)phe->h_addr_list[0])->s_addr; if(bind(s, (SOCKADDR *)&sa, sizeof(SOCKADDR)) == SOCKET_ERROR) { sprintf( Buffer, "Oшибка: %d", WSAGetLastError() ); MessageBox( NULL, Buffer, "Ошибка", MB_ICONSTOP); return 4; } // Включение promiscuous mode. if( ioctlsocket(s, SIO_RCVALL, &flag) == SOCKET_ERROR ){ sprintf( Buffer, "Oшибка: %d", WSAGetLastError() ); MessageBox( NULL, Buffer, "Ошибка", MB_ICONSTOP); } else // Бесконечный цикл приёма 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("%d", hibyte); // Вычисляем время жизни пакета. printf(" TTL:%d",hdr->iph_ttl); printf("\n"); } } closesocket( s ); WSACleanup(); return 0; } |
Сообщ.
#3
,
|
|
|
Я оставил проверку там где появлялась ошибка.
Проверил, твой и "мой" вариант работают когда есть подключение к интернет. А вот если пробовать отлаживать запустив Аппач, то тогда ошибку выдает! Странно как-то... |
Сообщ.
#4
,
|
|
|
у меня с 1 кодам не работает с 2 все замечательно работает, ищи проблемы у себя...
|
Сообщ.
#5
,
|
|
|
в MSDN ищем Windows Sockets Error Codes
и смотрим тама: Цитата WSAEINVAL 10022 Invalid argument. Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening. |
Сообщ.
#6
,
|
|
|
А как узнать момент подключения к интернету?
Т.е. чтобы не пропустить начало обмена пакетами, ну и естественно винду не тормозить (прога будет висеть в трее)? |
Сообщ.
#7
,
|
|
|
Цитата Vladimir_ @ А как узнать момент подключения к интернету? Т.е. чтобы не пропустить начало обмена пакетами, ну и естественно винду не тормозить (прога будет висеть в трее)? юзайте WMI (если ось не критична - от висты и выше) если критично..то подходит NDIS интерфейс и сетевые таблицы через апи.. удачи Вам (круглый) |
Сообщ.
#8
,
|
|
|
Цитата kolobok0 @ ...от висты и выше я бы попрапил win2000 |
Сообщ.
#9
,
|
|
|
А как узнать потеряно ли FTP-соединение?
И еще вопрос. А как изменить конкретный атрибут, например имеем: -rw-r--r-- на -rwxr--r-- |