begin process at 2012 05 30 11:12:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Raw Socket, debug ok, release pas ok


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Raw Socket, debug ok, release pas ok

mardi 20 décembre 2005 à 02:42:15 | Raw Socket, debug ok, release pas ok

Galmiza

Salutations,

J'ai créé un socket comme suit pour sniffer les paquets destinés à mon ip (les if SOCKET_ERROR ont été otés ici):

    m_Sock = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
    bind( m_Sock, (SOCKADDR*) &m_Sin, sizeof(m_Sin) );
    WSAIoctl( m_Sock, SIO_RCVALL, &m_Optval, sizeof(m_Optval), NULL, 0, &m_dwBytesRet, NULL, NULL ) ;

Pas de problème en debug, le sniffer recoit des paquets.
Par contre, en release, la creation du socket reussit mais aucun paquet n'est intercepté.

Comment résoudre ce problème ?

Merci

mardi 20 décembre 2005 à 12:51:14 | Re : Raw Socket, debug ok, release pas ok

Galmiza

Il n'y a pas de bug donc pas d'overflow dans les mémoires que j'ai allouées, juste des paquets non reçus :(. Je n'ai pas envie de devoir compiler en debug et encore moins de découper le programme.en 2 pour faire une partie en debug et l'autre en release.

mardi 20 décembre 2005 à 18:19:51 | Re : Raw Socket, debug ok, release pas ok

aardman

Membre Club
Salut,
Met tout le code utile parceque la avec ces 3 lignes on peut pas dire grand chose..
Comment remplis tu m_Sin ?
mercredi 21 décembre 2005 à 01:46:38 | Re : Raw Socket, debug ok, release pas ok

Galmiza

/*-------------*/
// Constructor //
/*-------------*/
CSniffer::CSniffer(HWND h)
{
    m_hList = h;
    m_ppRawData = NULL;
    m_dwNumPackets = 0;

    WSAStartup( MAKEWORD(2,0), &m_Wsa );

    // Get local IP
    hostent * host;
    char szHostName[256];
    in_addr myaddr_in;
    gethostname(szHostName, sizeof(szHostName));
    host = gethostbyname(szHostName);
    memcpy(&myaddr_in, host->h_addr, host->h_length);

    // Config du socket
    m_Sin.sin_family        =    AF_INET;
    m_Sin.sin_addr.s_addr    =    inet_addr(inet_ntoa(myaddr_in)) ;

    // Création
    m_Sock = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
    bind( m_Sock, (SOCKADDR*) &m_Sin, sizeof(m_Sin) );

    // Receive every data
    WSAIoctl( m_Sock, SIO_RCVALL, &m_Optval, sizeof(m_Optval), NULL, 0, &m_dwBytesRet, NULL, NULL ) ;
}



Et ensuite pour chopper les données:

    while (1)
    {
        memset( m_packet, 0, sizeof( m_packet ) ) ;
        recv( m_Sock, m_packet, sizeof(m_packet), 0 );
       .....
    }

En debug pas de problème, la fonction recv fonctionne, par contre en release, le programme reste bloqué dessus.

En ajoutant
    unsigned long ul = 1;
    ioctlsocket(m_Sock, FIONBIO, (unsigned long *) &ul);
pour eviter que la fonction recv soit bloquante le debug recoit une multitude de paquets 'vides' dont les autres paquets attendus, alors qu'en release, TOUS les paquets sont 'vides'.


Je programme sous VC++ 6.0 Windows XP Home Edition.

mercredi 21 décembre 2005 à 01:59:23 | Re : Raw Socket, debug ok, release pas ok

Galmiza

Hop !

Ce sniffer est sujet du même problème chez moi: ok en debug plus ok en release.
http://www.cppfrance.com/code.aspx?id=21797

Pitiéééé    ;-)
mercredi 21 décembre 2005 à 10:20:01 | Re : Raw Socket, debug ok, release pas ok

cosmobob

salut
un bug pas reproductible par ceux a qui tu demandes est pas corrigeable par ceux a qui tu demandes.
Copie colle tout ton code, ou bien mets le .rar quelque part ou on puisse y acceder.

Dis toi que si ca marche en debug, mais pas en release ca vient forcément de ton code qui est buggé, et pas d'un mystere de l'univers.

deja ca:

    while (1)
    {
        memset( m_packet, 0, sizeof( m_packet ) ) ;
        recv( m_Sock, m_packet, sizeof(m_packet), 0 );
       .....
    }
c'est moyen (tu testes pas la valeur de retour de recv)

allez a +
mercredi 21 décembre 2005 à 18:52:43 | Re : Raw Socket, debug ok, release pas ok

Galmiza

Ailowe,

Hou que si, c'est reproductible, facilement même, inévitablement malheureusement .
C'est la deuxième fois que j'ai besoin d'inclure un sniffer dans un de mes projets et c'est aussi la deuxième fois que j'ai le problème, je ne souviens plus de quelles sources j'ai fait des copier coller mais elles étaient différentes.
Je  n'ai d'ailleurs pas trouvé de sniffer qui fonctionne en release.

C'est évident que ce sont les programmes qui bugge car les fontions réseaux sont déjà compilées donc ne peuvent être source de cette différence debug-release.
Mon code (le plus simple) liste dans un report list windows les paquets IP reçus. C'est quasiement le même que celui dont j'ai donné la source, en plus compliqué.
La faute est peut-être due à mon compilateur.
Je vous serais reconnaissant de tester le programme " http://www.cppfrance.com/code.aspx?id=21797" en release avec vos compilateurs.

Je peux si vraiment vous le voulez uploader mon code sur mon site mais je ne vois pas trop l'utilité.


! Joyeux Noël !

mercredi 21 décembre 2005 à 19:23:28 | Re : Raw Socket, debug ok, release pas ok

aardman

Membre Club
Salut,
Ce sniffer est sujet au meme probleme que toi car le code est quasiment identique.
Effectivement chez moi cela ne fonctionne pas en release, mais il ne faut pas accuser le compilateur ou meme les apis, cela vient forcement du code.

L'exemple de sniffer que l'ont peut trouver dans l'ebook que je distribue très (trop ?) souvent fonctionne très bien en debug et en release:
http://betouchi.free.fr/doc_et_ebook/prog_reseau/exemples-network2.zip
dans le chapitre 7.


mercredi 21 décembre 2005 à 19:56:09 | Re : Raw Socket, debug ok, release pas ok

Galmiza

Merci beaucoup !

Ca fonctionne mais je ne comprends pas pourquoi ... j'ai seulement changer
m_Sock = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
en
m_Sock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);

Désolé je n'avais pas trouvé cet exemple en cherchant les sniffers sur cppfrance.

Rassure-toi je n'ai pas accusé les API, juste emis l'hyothèse que mon compilateur pouvait me jouer des tours (il est instable sur mon PC, j'avais du le réinstallé car il bloquait pendant le linking 2 fois sur 3). Si, j'ai fini de raconter ma vie.

Merci encore @+ et le fameux Joyeux Noël !



Cette discussion est classée dans : ok, socket, debug, sock, raw


Répondre à ce message

Sujets en rapport avec ce message

socket raw [ par moi zork ] Bonjour,Je suis entrain de m'entrainer sur les socket raw et je bute sur :#include #include using namespace std;int main (void){    int sock;  sock = winsock 2 listen [ par lektrosonic ] Bonjour, ceci est mon bou de code, je veu mette le socket en mode listen, mais de ke je le fait, ca plante...ce bout de code est sous win32 et la fene Bind echouant.. [ par lektrosonic ] Bonsoir, deux applications, bon pour etre original: serveur et client.Chacune de leur cote effectue ce code:Serveur:----------------------   if(WSASta Bug mysql.sock [ par yugimaniaque ] Bonjour, quand je lance mon application j'ai un problème, sa m'affiche cette erreur: Can't connect to local Mysql server through socket '/tmp/mysql.so RECV() TELNET [ par kiki67100 ] Bonjour j'ai fait un serveur en c++ Mais le probleme c'est que mon code lit le recv() de telnet caractere par caractere et moi je voudrais phrase par Socket en c avec winsock2.h [ par juju11288 ] Bonjour a tous je voudrai pour le moment arriver a faire un client serveur en c qui parle entre eux avec le protocole TCP/IP. Je fait les deux  progra probleme de send en C avec socket [ par thorn74 ] bonjour je suis actuellement en IUT info et G un  projet a faire mais je bloque je doit fair eun petit programme ou lorsqu'un ordinateur se connecte a [GRAVE]!! TOUTES MES APPLI winsock marche pu [ par sebastienmz ] Salut tout le mondeje suis devant un cas assé dure :ce matin je démare mon pc.. le lance mon google search (la source que j'ai posté) et la imppossibl Connexion SOCKET_ERROR [ par fredsor ] Salut a tous,Je réalise un ptit programme au sein duquel je me connecte a un serveur distant, afin de récupérer via une methode GET des informations n


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales