Socket en promiscuous mode
Bonjour,
Je viens vers vous car je suis en train de programmer qui permet de sniffer les trames IP en localhost via les winsock (SOCK_RAW).
Lorsque je l'exécute sur mon PC sous windows7, tout marche mais la ou est le problème c'est que le programme doit tourner sous un windows XP.
voici le code me permettant d'initialiser l'écoute
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET s = socket(PF_INET, SOCK_RAW, IPPROTO_IP);
if(s == INVALID_SOCKET)
cout << "Error socket" << endl;
else
{
ULONG u_addr;
u_addr = inet_addr("127.0.0.1");
SOCKADDR_IN i;
ZeroMemory(&i, sizeof(i));
i.sin_family = AF_INET;
i.sin_addr.s_addr = u_addr;
if (bind(s, (SOCKADDR *)&i, sizeof(i)) == SOCKET_ERROR)
cout << "Error bind" << endl;
else
{
fd_set readfs; // pour le select
SOCKADDR_IN from;
int from_len = sizeof(from);;
char buffer[512];
DWORD dwInBuffer = 1, dwBytesReturned;
if(WSAIoctl(s, SIO_RCVALL, &dwInBuffer, sizeof(dwInBuffer), NULL, 0, &dwBytesReturned, NULL, NULL) == SOCKET_ERROR)
cout << "error ioctl " << WSAGetLastError() << endl; |
Le problème sur XP est la mise en place du mode promiscuité en localhost (fonctionne pour une ip externe) via la fonction
Code:
WSAIoctl(s, SIO_RCVALL, &dwInBuffer, sizeof(dwInBuffer), NULL, 0, &dwBytesReturned, NULL, NULL)
Y aurait-il une option me permettant de mettre mon socket en mode promiscuité pour le localhost sous XP?
Merci d'avance