Bonjour,
je souhaite réaliser un programme (sous gnu/linux) permettant d'envoyer un paquet TCP SYN vers le port d'un hôte distant, mais le calcul de checksum TCP me pose problème (ethereal me signale qu'il est inval ide, et par conséquent, l'hôte distant ne répond jamais au paquet SYN que je lui envoie).
Voilà le code source:
-------------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <netdb.h>
struct pseudohdr {
unsigned long saddr;
unsigned long daddr;
char useless;
unsigned char protocol;
unsigned short length;
};
unsigned long resolve(char *name){
struct hostent * hip;
hip = gethostbyname(name);
if (!hip)
{
perror("unknown host");
return(-1);
}
return *(unsigned long *)hip -> h_addr;
}
unsigned short in_cksum(unsigned short *addr, int len)
{
register int sum = 0;
u_short answer = 0;
register u_short *w = addr;
register int nleft = len;
while (nleft > 1)
{
sum += *w++;
nleft -= 2;
}
if (nleft == 1)
{
*(u_char *) (&answer) = *(u_char *) w;
sum += answer;
}
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return (answer);
}
int send_syn(unsigned long source,unsigned long dest,int dport)
{
int fd;
char *packet,*buffer;
struct iphdr *ip;
struct tcphdr *tcp;
struct pseudohdr *pseudo;
struct sockaddr_in addy;
ça c'est vraiment bien ce que tu fais. Je t'aurais aidé avec plaisir mais j'ai décroché des sockets raw. Je suppose que tu connais l'UNIX SOCKET FAQ, (http://www.developerweb.net/sock-faq/), vas-y refaire un tour, je me rappelle qu'elle est excellente.
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.