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 :

ça ne bind pas :)


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut ça ne bind pas :)
    bonjour,
    je m'excuse de vous déranger pour ce pb mais je n'arrive pas à faire fonctionner le bind

    voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    int main(int argc, char *argv[]){
     
    	int ds, ret, i;
    	struct sockaddr_in *sok;
     
    	ds = socket(AF_INET,SOCK_STREAM,0);
     
    	sok = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in));
     
    	sok->sin_len = strlen("172.16.192.1");
    	sok->sin_family = AF_INET;
    	sok->sin_port=389;
     
    	for (i=0;i<8;i++) sok->sin_zero[i]=0;
     
    	sok->sin_addr.s_addr = inet_addr("172.16.192.1");
     
     
    	ret = bind(ds, (struct sockaddr *)&sok, sizeof(sok));
     
    	printf("retour bind = %d",ret);
     
    	return 0;
    	}
    et donc bind retourne -1

    par contre lorsque je tape depuis la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    telnet 172.16.192.1 389
    cela fonctionne

    merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    pour info la fonction socket renvoie la valeur 3 (je viens de modifier le code)

    je pense que c'est le numéro de socket mais ne suis pas sûre...

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    la fonction bind(), c'est pour réaliser un serveur TCP qui va accepter des connexions entrantes en provenance de clients.

    Visiblement, ce que tu veux faire, c'est un client qui se connecte à un serveur (172.16.192.1 port 389). Pour cela, tu ne dois pas utiliser bind() mais connect().
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    merci ram

    bah en fait mon programme doit se connecter à un serveur ldap, lui envoyer une requete et retourner le resultat.
    je pensais donc que la fonction bind était appropriée du fait que le numéro de port soit définit ds la structure sockaddr_in (mais pas ds la structure sockaddr)

    bon j'essaie donc de faire un connect comme tu l'as conseillé, voici mon bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    int main(int argc, char *argv[]){
    	int sock = socket(AF_INET, SOCK_STREAM, 0);
    	if(sock == -1){
    		perror("socket()");
    		exit(errno);
    		}
    	printf("retour socket = %d",sock);
     
    	struct sockaddr *ad;
    	ad = (struct sockaddr *)malloc(sizeof(struct sockaddr));
    	ad->sa_len = strlen("172.16.192.1");
    	ad->sa_family = AF_INET;
    	strlcpy(ad->sa_data, "172.16.192.1", strlen("172.16.192.1"));
     
    	int ret = connect(sock, (struct sockaddr *)&ad, sizeof(ad));
    	printf("retour connect = %d",ret);
    	if(ret == -1){
    		perror("socket()");
    		exit(errno);
    		}
    	return 0;
    	}
    et maintenant soit il attend des heures soit il répond :
    socket(): No route to host

    ou bien socket() connection timeout

    ds les 2 cas socket retourne la valeur 3 et forcémment le connect retourne -1

    sinon j'arrive à pinger et faire un traceroute sur l'adresse ip et le telnet fonctionne sans pb

    merci.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Le remplissage de la structure sockaddr n'est pas correct.

    Première question, pourquoi un malloc ? Tu ne veux pas utiliser un objet plein ? Les malloc, moins on les utilise, moins on a de risques de fuite de mémoire (d'ailleurs, tu ne fais pas le free).

    Ta struture sockaddr devrait se remplir comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct sockaddr ad;
    memset(&ad, 0, sizeof(ad));
    ad.sin_family = PF_INET;
    ad.sin_addr.s_addr = inet_addr("172.16.192.1");
    ad.sin_port = htonl(389);
     
    int ret = connect(sock, (struct sockaddr *)&ad, sizeof(ad));
     
    ...
    Code non testé mais c'est l'idée
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. [Spring MVC] taglib spring:bind qui ne binde pas
    Par Mohicane dans le forum Spring Web
    Réponses: 2
    Dernier message: 23/01/2008, 13h51
  2. [rmi] Pas de bind sur un Registry distant
    Par Batoche dans le forum Services Web
    Réponses: 2
    Dernier message: 10/12/2007, 15h21
  3. Réponses: 3
    Dernier message: 07/09/2007, 09h54
  4. [Tkinter] Probleme de Bind clavier : marche pas :(
    Par topzozo dans le forum Tkinter
    Réponses: 2
    Dernier message: 27/05/2007, 02h17
  5. Bind ou pas Bind?
    Par jonzuzu dans le forum MFC
    Réponses: 4
    Dernier message: 19/03/2004, 10h00

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