salut tout le monde;
j'essaie d'envoyer des paquets TCP avec sock raw il n' ya pas d'erreurs mais je ne les capte pas avec le sniffer Ethereal.
Ce même programme marchait avec UDP et ICMP.Je veux remplir les champs des entêtes IP et TCP moi même c'est pour ça que j'utilise sock raw!!
Est ce que c'est un problème au niveau des sockets?
Voici une partie du programme en MFC.
int optval;
SOCKET sock=WSASocket(AF_INET, SOCK_RAW, IPPROTO_TCP, NULL, 0,0);
setsockopt(sock, IPPROTO_IP, 2, (char *)&optval, sizeof(optval));
SOCKADDR_IN sin;
char packet[8192];
iphdr *ip=(iphdr*)packet;
tcphdr *tcp=(tcphdr*)(packet+sizeof(struct iphdr));
ip->verlen=79;//différent de 79 car il n'y a pas le champ option
ip->tos=0;
ip->id=1;
ip->offset=0;
ip->ttl=(unsigned char)255;
ip->protocol=0x06;
UpdateData(TRUE);
ip->saddr=inet_addr(m_ipsource); //remplacez par votre ip...
ip->daddr=inet_addr(m_ip); //remplacez par le pc à pinger
//champ option
ip->code=7;
ip->lenopt=39;//au max on peut insérer 9 adresses ip
ip->pointeur=40;
tcp->dport=80;
tcp->seqnum=0;
tcp->acknum=1;
tcp->flags=0x0002;
tcp->window=16906;
tcp->urgPointer=0;
ip->tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));
sin.sin_family=AF_INET;
sendto(sock,packet,sizeof(struct iphdr)+sizeof(struct tcphdr),0,(SOCKADDR*)&sin,sizeof(sin));