Pb socket niveau 2

Pb socket niveau 2 - C - Programmation

Marsh Posté le 05-07-2005 à 07:50:30    

Salut,
j'essaye de creer un forgeur de paquet au niveau 2, mais j'ai un petit problem.Mon packet est correctement envoyé, mais je ne recois pas de reponse(pour un echo ping par ex.).
 
j'utilise une sockaddr déclaré :
       

Code :
  1. struct sockaddr interface = { AF_INET, "lo" }(ou "eth0" )


je rempli des structures du type :
       

Code :
  1. struct ethhdr eth
  2. struct iphdr ip
  3. struct icmphdr icmp


je stock le tout dans un buffer(packet[124])
la socket est déclarée :
       

Code :
  1. int sockets
  2. sockets=socket(AF_INET, SOCK_PACKET, htons(ETH_P_802_3)) (ou ETH_P_ALL)


et j'utilise sendto :
     

Code :
  1. sendto(sockets,&packet, sizepacket, 0, &interface,sizeof(struct sockaddr))


 
Ma socket est elle mal déclarée ?
faut-il rajouter a la fin du paquet un checksum ethernet ?
 
Quelqu'un peut-il m'aider.

Reply

Marsh Posté le 05-07-2005 à 07:50:30   

Reply

Marsh Posté le 05-07-2005 à 09:27:37    

t'es niveau 3 là


Message édité par Taz le 05-07-2005 à 09:27:52
Reply

Marsh Posté le 05-07-2005 à 10:38:01    

non niveau 2
SOCK_PACKET permet de remplacer le couche 2, avec struct ethhdr par exemple.

Reply

Marsh Posté le 05-07-2005 à 17:09:53    

       SOCK_PACKET
               Obsolete  and should not be used in new programs; see packet(7).

Reply

Marsh Posté le 06-07-2005 à 13:41:28    

je viens d'essayer avec une socket déclaré :
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
et avec une sockaddr_ll pour le sendto(comme indiqué dans packet(7))
mon packet est correctement envoyé mais toujours pas de reponse.

Reply

Marsh Posté le 09-07-2005 à 18:38:49    

Problême résolu.
Pour info : l'erreur ne venait pas de SOCK_PACKET.

Reply

Sujets relatifs:

Leave a Replay

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