prog reseseaux

prog reseseaux - C - Programmation

Marsh Posté le 18-12-2004 à 11:26:45    

Bonjour a tous,
J'essaie de faire des petits bouts de programme pour tester des connection en ip mais je bute sur un pbl.
Si sur une machine linux mandrake on dispose d'un modem comment associer une socket a une liaison modem. La fonction bind() elle ne fait que l'association @ip a une socket moi je cherche a forcer sur tel ou tel interface phisique. Quand il s'agit de passer par une carte reseau le pbl est plus simple puisque l@ip est sur celle ci mais pour forcer sur un modem. Et comment va un prog en envoyer des commandes AT au moedm.

Reply

Marsh Posté le 18-12-2004 à 11:26:45   

Reply

Marsh Posté le 31-12-2004 à 11:23:28    


Tu confonds laision physique et liaison logiciel,
un modem te permet d'établir une connexion, Ethernet via PPP ou PPTP ou L2TP ou d'autre. Après tu encapsules ce que tu veux.  
 
Ton modem va établir une connexion qui permettra d'obtenir une interface, et ensuite seulement tu pourras appeler bind.

Reply

Marsh Posté le 31-12-2004 à 11:39:25    

ppp regroupe les couches réseau et liaison. Pour ce qui est du routage, c'est le noyau qui se débrouille.
Bref tu te contente juste de passer un drapeau approprié à la routine socket, il me semble tu n'a pas vraiment la possibilité ni d'interet à faire autrement, dumoins me semble t'il...

Reply

Marsh Posté le 03-01-2005 à 22:10:14    

Je connais tous ces principes, mais si je dispose de eux liaison, par exemple de deux modem sur deux ports com donc je dispose de deux liaison phisiques por etablir des commucations. Si je veut forcer sur une des deux interfaces le seul moyen que je connaisse actuellement sans passer par unn equipement reseau c'est de disposer deux deux @ip, une pour chaque liaison et avec bind d'associer ma soket a une des deux. Dans ce cas est ce que les ports  com peuvent recevoir des @ip com les cartes reseaux? Ou alors comment fait on?
 

Reply

Marsh Posté le 03-01-2005 à 22:35:11    

fait un effort sur l'orthographe c'est incompréhensible.
 
Il suffit de mettre le bon ifindex dans la sockaddr_ll.
Tu obtiens les ifindex des cartes réseaux detectés via des iocontrol.

Reply

Marsh Posté le 04-01-2005 à 01:03:39    

Je n'ai jamais entendu parler de sockaddr_ll et les ioctl je connais patiquement que le nom j'ai jamais utilise cette fonction. Peu tu me renseigner je vais faire  des recherches en attendant merci.

Reply

Marsh Posté le 04-01-2005 à 15:43:32    

Soit tu crées une socket pour TCP (SOCK_STREAM) ou UDP (SOCK_DGRAM) et tu laisses le système traité le paquet par sa pile IP, soit tu crées une socket en mode raw (SOCK_RAW) qui attaque le paquet au niveau 2 et tu dois tout faire toi même.
 
 

Code :
  1. #define DEVICENAME "eth0"
  2. struct ifreq ifr;
  3. struct sockaddr_ll sock;
  4. int sockfd, counter;
  5. strcpy(ifr.ifr_name, DEVICENAME);
  6. sockfd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
  7. if(sockfd <= 0) perror("error creating raw socket. Are you root ?\n" );
  8. if(ioctl(sockfd, SIOCGIFINDEX, &ifr) < 0) perror("error with IOCTL\n" );
  9. sock.sll_ifindex = ifr.ifr_ifindex;


 
dans ton paquet tu dois t'occuper des entetes de niveau 2 et 3. voir les struct ether_header et iphdr. Tu envois ensuite le paquet sur l'interface que tu as décidé (DEVICENAME).
Vu que tu bypass la pile IP du système tu dois t'assurer que les paquets que tu as crées sont corrects. Tu envois ensuite de cette façon ton paquet :  
 

Code :
  1. counter = sendto(sockfd, packet, size, 0,
  2.                    (struct sockaddr*) &sock, sizeof(struct sockaddr_ll));


 
Tout ça est expliqué dans les man socket et netdevice, avec les #include qui vont bien.

Reply

Marsh Posté le 04-01-2005 à 19:00:30    

ça fonctionne aussi avec les winsock ça ?
Car il me semblait que l'accès est assez limité pour tout ce qui est bas niveau ...

Reply

Marsh Posté le 04-01-2005 à 20:40:15    

Il y a des rawsock depuis windows 2000, mais je n'ai jamais eu l'occasion de programmer avec. En même temps ça ne me manque pas trop :D

Reply

Marsh Posté le 04-01-2005 à 21:31:54    

Mais ou trouvez vous toutes vos infos? Moi je n'arrete pas de m'acheter des docs (le dernier: programmation systeme en C sous linux de Christophe BLAESS) il y a tout une partie qui traite des sockets et de la communication reseaux mais tous ces details ne sont pas traites.
Pour les pages Man j'iabeaucoups de problemes a les interpreter puisque je n'ai pas une tres bonne pratique de l'anglais. Si tu connais des livres qui traitent de la programmation reseaux et comment maitriser le graphisme (mais en essayant de programmer directement X11) en c sous unix ou linux ou meme des liens mais de preference en fr ce serait sympa de me les communiquer.
Merci A+++

Reply

Marsh Posté le 04-01-2005 à 21:31:54   

Reply

Marsh Posté le 04-01-2005 à 21:51:12    

J'ai utilisé les rawsock pour la première fois en maitrise.
 
L'anglais est obligatoire en info.
Tu peux quand même te débrouiller si tu es une quiche irrécupérable en anglais avec les pages man qui ont été traduites
par exemple, avec google j'ai de la chance :  
http://dpobel.free.fr/man/html/
 
pour le graphisme je ne sais me servir que d'OpenGL avec glut donc je ne peux pas t'aider.

Reply

Marsh Posté le 04-01-2005 à 21:56:54    

pour le graphisme sous linux il y a GTK pour les interface de programme (boutton, menu deroulant ... ), c'est facile de trouver de la doc ;)
Et il y a SDL pour faire du graphisme que je qualifierait orienté image/dessin ;)

Reply

Marsh Posté le 04-01-2005 à 23:33:45    

GTK je connais mais sous unix il n'y a pas.
SDL je sais pas je faits des  recherches ou si tu as des lien envoie les moi merci.

Reply

Marsh Posté le 05-01-2005 à 19:16:10    

Quand tu parle de unix tu parle de linux ou des unix en genral?
 
Parce que GTK est sous linux, c'est d'ailleurs sur cette plateforme qu'il a été créé au depart.
Sinon pour unix en general je ne sais pas.
 
Pour SDL voir le site officiel: www.libsdl.org mais je previens de suite si ce que tu veut faire c'est de l'interface utilisateur laisse tomber et prend GTK

Reply

Marsh Posté le 07-01-2005 à 22:40:27    

Oui quand je d'unix c'est sous une machine hp ou sun. Je ne cherche pas a faire de l'interface utilisateur mais plutot a faire des ronds des lignes ou des formes geometrique quelconques, si on peut faire du fenetrage utilisateur pourquoi pas mais dans un premier temps ce n'est pas mon objectif, pour cela je sais qu'il existe un truc qui s'appel MOTIF. Ce qui m'interesse c'est de savoir s'il existe des methodes pour faire du graphisme en C sous unix et comprendre comment fonctionne le protocole X11.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed