IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

fonctionnement des SOCKETS et RAW SOCKETS


Sujet :

Réseau C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut fonctionnement des SOCKETS et RAW SOCKETS
    bonjour,

    Je suis entrain de lire ce tuto a propos des RAW SOCKETS : http://melem.developpez.com/tutoriel...s/raw-sockets/

    Il y a un truc qui me perturbe, je ne vois nul par a quelle carte réseau est lié le socket : où est-ce défini ?


    Si j'ai deux applications ouvertes en même temps : une ouvert sur un RAW SOCKET de type IPPROTO_RAW et une ouvert sur un socket UDP standard. Lorsque je recevrais un paquet UDP, celui-ci sera transmis aux deux applications (duplication du paquet ?) ?

    Il est possible d'ouvrir deux socket UDP standard sur la même interface et le même port où il y a une protection de l'OS qui interdit de faire ça ?


    Merci d'avance,

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 601
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 601
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Les "types" ne sont pas physiques..

    Il y a d'une part une association par l'OS du numéro de port (le port physique) et un nom de service (donné par exemple dans /etc/services dans les systèmes unixoides)

    Et ensuite une association donnée par les programmes (le client et le serveur). Un même port pourrait être de plusieurs types.. Mais en pratque, vu qu'on y associe un service, en général, le type est fixe... Mais si c'est un numéro de socket "libre", et qu'il est libéré après la communication (pas de service, juste une connection client-serveur), rien n'empêche de faire 2 runs différents avec 2 types différents sur le même port physique..

    (il me semble bien , même si mes souvenirs sont un peu lointains)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    merci de ta réponse,

    Donc, si je comprends bien, chaque port à au moins un "service" qui lui est affecté via des paramêtres de configuration qui ne dépendent pas de l'application mais de l'os.

    Pour ouvrir un RAW SOCKET, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
    => le nom du service, c'est quoi ? IPPROTO_RAW ? .... ça veut donc dire qu'on ne peut pas sniffer sur deux cartes réseaux en même temps ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 601
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 601
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    Donc, si je comprends bien, chaque port à au moins un "service" qui lui est affecté via des paramêtres de configuration qui ne dépendent pas de l'application mais de l'os.
    NON...

    Ceci est vrai UNIQUEMENT pour certains ports/ numéros.. Définis internationalement, ou réservés localement pour un certain "service"...

    (un service, c'est un serveur qui attend indéfiniment une nouvelle connection, comme par exemple telnet. Pour ça, tu associes un nom et un numéro de port et un type (le serveur est fixe))

    Par exemple, sous mon Windows actuel, en ayant installé cygwin (je sais pas si c'est comme ça avec Windows sans) j'ai, dans Windows/system32/drivers/dsdn/etc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ftp                21/tcp                           #FTP. contr“le
    telnet             23/tcp
    ..
    nameserver         42/tcp    name                   #Serveur de nom d'h“te
    nameserver         42/udp    name                   #Serveur de nom d'h“te
    nicname            43/tcp    whois
    domain             53/tcp                           #Serveur de nom de domaine
    domain             53/udp                           #Serveur de nom de domaine
    ..
    gopher             70/tcp
    finger             79/tcp
    http               80/tcp    www www-http           #World Wide Web

    MAis en général tu as droit à au moins 32 bits possibles (un numéro de socket est un entier), et donc à 65535 possibilités.. Tu peux donc tout à fait dédier un numéro possible à TON service, et donc TON type de connection, ou bien au contraire réutiliser le même socket sans le déclarer en service, et lui faire changer de type suivant la connection client-serveur que tu souhiates..


    Citation Envoyé par boboss123 Voir le message
    Pour ouvrir un RAW SOCKET, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
    => le nom du service, c'est quoi ? IPPROTO_RAW ? .... ça veut donc dire qu'on ne peut pas sniffer sur deux cartes réseaux en même temps ?
    Non, regardes les exemples ci-dessus et relis la doc
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Il y a d'une part une association par l'OS du numéro de port (le port physique) et un nom de service (donné par exemple dans /etc/services dans les systèmes unixoides)
    Tu es sure que tu parles bien du port physique (carte réseau), là ? ... l'exemple de fichier que tu viens de poster, c'est plutôt une association "port UDP/TCP" <=> "service".


    J'ai beau relire la doc et compagnie, je ne vois toujours pas qu'elle carte réseau va être utilisée pour le socket lorsque je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 601
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 601
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    je ne vois toujours pas qu'elle carte réseau va être utilisée pour le socket lorsque je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = socket(PF_INET, SOCK_RAW, IPPROTO_RAW);
    Mais on s'en fiche...

    Tu as des ports sur ta carte réseau, qu'elle qu'elle soit... C'est pas ta carte qui a un type... Tu as en général une seule carte réseau par ordi...

    Ensuite, c'est un protocole, qui défini le type. ça n'a rien à voir avec le hardware..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    A c'est bon je crois que j'ai compris : pour associer un socket à une carte réseau, il faut utiliser la fonction bind() en spécifiant l'une des adresses IP de la carte réseau.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 601
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 601
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    eh oui..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Mais on s'en fiche...
    Mais non, on ne s'en fiche pas ... si tu as deux cartes réseaux, il faut bien savoir laquelle est utilisée si tu veux que ton appli fonctionne.

    Citation Envoyé par souviron34 Voir le message
    Tu as en général une seule carte réseau par ordi...
    Sur quasiment tous les PC portable, tu as au moins deux cartes réseaux (cable et wifi)

    Merci pour l'aide j'ai les informations que je recherchais

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 04/01/2007, 12h15
  2. pb de fonctionnement des sockets
    Par phoenixia dans le forum MFC
    Réponses: 1
    Dernier message: 02/06/2006, 18h42
  3. [C#] raw socket?
    Par Blo0d4x3 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/12/2004, 13h20
  4. Raw socket
    Par trax44 dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/11/2004, 19h26
  5. raw socket et langage c
    Par SlayDave dans le forum Développement
    Réponses: 2
    Dernier message: 29/08/2002, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo