Flux rss
Collection CommentCaMarche.net
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

Raw-sockets et calcul de checksum tcp

anonyme, le lundi 17 mars 2003 à 21:13:25
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>

#define IPHDR sizeof(struct iphdr)
#define TCPHDR sizeof(struct tcphdr)
#define PSEUDOHDR sizeof(struct pseudohdr)


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;

packet = (char *) malloc(IPHDR + TCPHDR);
buffer = (char *) malloc(IPHDR + TCPHDR);

ip = (struct iphdr *) packet;
tcp = (struct tcphdr *) (packet + IPHDR);
pseudo = (struct pseudohdr *) malloc(PSEUDOHDR);


ip->ihl = 5;
ip->version = 4;
ip->tos = 0;
ip->tot_len = IPHDR + TCPHDR;
ip->id = htons(getuid());
ip->ttl = 255;
ip->protocol = IPPROTO_TCP;
ip->saddr = source;
ip->daddr = dest;

pseudo->saddr = source;
pseudo->daddr = dest;
pseudo->useless = 0;
pseudo->protocol = IPPROTO_TCP;
pseudo->length = htons(TCPHDR);

tcp->source = htons(5000);
tcp->dest = htons(dport);
tcp->seq = htonl(random());
tcp->ack_seq = htonl(0);
tcp->doff = 5;
tcp->fin = 0;
tcp->syn = 1;
tcp->rst = 0;
tcp->psh = 0;
tcp->ack = 0;
tcp->urg = 0;
tcp->window = htons(512);
tcp->urg_ptr = htons(0);

tcp->check = in_cksum((unsigned short *)pseudo,TCPHDR+PSEUDOHDR);
ip->check = in_cksum((unsigned short *)ip, IPHDR);

if((fd = socket(AF_INET,SOCK_RAW,IPPROTO_RAW))<0){
perror("SOCK_RAW");
return(-1);
}

addy.sin_family = AF_INET;
addy.sin_port = tcp->dest;
addy.sin_addr.s_addr = ip->daddr;

printf("SYN packet sent\n");

if(sendto(fd,packet,ip->tot_len,0,(struct sockaddr *)&addy, sizeof(struct sockaddr)) < 0)
{
perror("sendto()");
return(-1);
}

close(fd);
return 0;
}

int main(int argc,char *argv[])
{
int port,n;
unsigned long src,dst;
if(argc < 4)
{
printf("usage: %s source destination port\n",argv[0]);
return 0;
}
else { src=resolve(argv[1]);
dst=resolve(argv[2]);
port=atoi(argv[3]); }
send_syn(src,dst,port);
return 0;
}
-------------------------------------------------------------------------------------------------------------------------------
Puisse une âme charitable résoudre mon problème.
Merci.
Répondre à anonyme  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 mat, le lundi 17 mars 2003 à 22:49:40
salut,

ç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.

a+
mat
Répondre à mat

Résultats pour raw sockets et calcul de checksum tcp

Télécharger MD5 L'utilitaire md5sum est un outil en ligne de commande permettant de calculer ce qu'on appelle l'empreinte d'un fichier. En anglais, fingerprint, message-digest ou encore checksum est une valeur de 128 bits correspondant à une somme de contrôle... www.commentcamarche.net/telecharger/telecharger-34055119-md5
[md5sum] Vérifier l'intégrité des téléchargements Somme MD5 Introduction I - Windows I-1 - Pour les puristes de la ligne de commande (sous "Dos") I-2 - Pour les inconditionnels de l'interface graphique "GUI" mst MD5 WinMD5 winMd5Sum II - GNU/LInux II-1 -Dans une console II-2 Pour les... www.commentcamarche.net/faq/sujet-41-md5sum-verifier-l-integrite-des-telechargements
VNC 4e - Connexion reset by peer (10054) (Résolu) VNC 4e - Connexion reset by peer (10054) La prise de mains à distance fonctionne et se fige au bout de quelques secondes avec le message "Connexion reset by peer". Quelqu'un connaît-il le problème ? www.commentcamarche.net/forum/affich-1765768-vnc-4e-connexion-reset-by-peer-10054

Résultats pour raw sockets et calcul de checksum tcp

CMOS CHECKSUM ERROR - DEFAULT LOADEDAu démarrage votre ordinateur affiche l'une des phrase suivantes : CMOS wrong CMOS MEMORY size WRONG CMOS Checksum Bad CMOS checksum error defaults loaded Warning! CPU has been changed please re-enter cpu settings in the cmos setup and... www.commentcamarche.net/faq/sujet-1198-cmos-checksum-error-default-loaded
[Excel] Chemin et nom de stockage de feuille de calculIndiquer automatiquement le chemin d'accès (path) et le nom de stockage de toute feuille de calcul Noter dans une cellule (A& par exemple) la formule : =cellule("nomfichier";A1) A chaque sauvegarde et/ou déplacement de fichier dans votre... www.commentcamarche.net/faq/sujet-962-excel-chemin-et-nom-de-stockage-de-feuille-de-calcul
Google - Fonction calculatriceGoogle dispose d'une calculatrice intégrée. Pour l'utiliser, il suffit simplemement d'entrer une expression dans le champ de saisie et de lancer la recherche ! Cette fonction est aussi accessible à partir de la barre Google ou des navigateurs... www.commentcamarche.net/faq/sujet-814-google-fonction-calculatrice

Résultats pour raw sockets et calcul de checksum tcp

[C] [Socket] Temps limite d'un connect() (Résolu)Bonsoir, Alors voilà mon soucis, J'ai un socket qui se connecte en tcp sur une machine distante mais au moment où la fonction connect() s'execute, le programme est en attente et la suite ne s'execute pas avant quelques minutes. Mais... www.commentcamarche.net/forum/affich-1864990-c-socket-temps-limite-d-un-connect
[C sous UNIX] Sockets TCP/IP sous UNIX (Résolu)Bonjour, Je suis en DUT informatique et je dois faire un petit chat en C sous UNIX (et un jeu en réseau également) Je suis complètement perdu, on a pas encore vu les sockets. Est-ce que vous pourriez m'aider ? Merci de votre réponse www.commentcamarche.net/forum/affich-2886485-c-sous-unix-sockets-tcp-ip-sous-unix
[Lang C] PB Operateur Logique (Résolu)Bonjour à vous, Voilà j'ai effectué un programme en C pour un bouleau, celui ci sert à calculer un Checksum. La chose est simple, j'ai tout d'abord une chaine de caractères. Je mets ensuite chacun de ces caractères dans un tableau. une... www.commentcamarche.net/forum/affich-7216968-lang-c-pb-operateur-logique

Résultats pour raw sockets et calcul de checksum tcp

Télécharger MST MD5L'utilitaire md5sum est un utilitaire permettant de calculer l'empreinte du fichier déposé sur son interface. L'empreinte (en anglais, fingerprint, message-digest ou encore checksum) est une valeur de 128 bits correspondant à une somme de contrôle... www.commentcamarche.net/telecharger/telecharger-34055120-mst-md5
Télécharger Ma Calculatrice Windows propose par défaut une calculatrice avec des fonctions dites scientifiques mais tout de même incomplètes. MaCalculatrice est une calculatrice beaucoup plus complète et évoluée. C'est une calculatrice graphique et comprend divers modules... www.commentcamarche.net/telecharger/telecharger-34055817-ma-calculatrice
Télécharger The Love Calculator L'amour est un grand mot, alors tous les moyens sont bons pour la trouver. Le nom de chacun peut en dire beaucoup sur la compatibilité entre deux personnes. The Love Calculator est un programme qui calcul l'affinité entre deux individus. Ce n'est pas... www.commentcamarche.net/telecharger/telecharger-34056038-the-love-calculator

Résultats pour raw sockets et calcul de checksum tcp

WWE SmackDown vs. RAW 2009vs .,Développeur:Yuke's Media Creations,Nb. de joueurs hors-ligne:1-6,Other Names:WWE SmackDown 2009,WWE SmackDown versus RAW 2009,Genre:Combat www.commentcamarche.net/guide-achat/wwe-smackdown-vs-raw-2009-1092733-fiche-technique
WWE SmackDown vs. RAW 2009vs .,Nb. de joueurs hors-ligne:1-4,Genre :Wrestling,Other Names:WWE SmackDown 2009,WWE SmackDown versus RAW 2009,Développeur:Yuke's Media Creations www.commentcamarche.net/guide-achat/wwe-smackdown-vs-raw-2009-1092691-fiche-technique
WWE SmackDown! vs. RAW 2009vs .,Nb. de joueurs hors-ligne:1-2,Genre:Combat,Other Names:WWE SmackDown 2009,WWE SmackDown versus RAW 2009,Développeur:Tose Software www.commentcamarche.net/guide-achat/wwe-smackdown-vs-raw-2009-1090379-fiche-technique

Résultats pour raw sockets et calcul de checksum tcp

Les fonctions de l'API SocketLes fonctions des sockets en détail La fonction socket() La création d'un socket se fait grâce à la fonction socket() : int socket(famille,type,protocole) famille représente la famille de protocole utilisé (AF_INET pour TCP/IP utilisant une... www.commentcamarche.net/contents/sockets/sockfonc.php3
Assemblage d'un PC - Montage du processeurLe processeur Le processeur est le circuit intégré clé de l'ordinateur, réalisant les principaux calculs. Les processeurs existent en différents formats pouvant être classés en deux familles : Les processeurs sur Socket ; Les processeurs sur... www.commentcamarche.net/contents/assemblage/montage-processeur.php3
TCP/IPQue signifie TCP/IP? TCP/IP est une suite de protocoles. Le sigle TCP/IP signifie «Transmission Control Protocol/Internet Protocol» et se prononce «T-C-P-I-P». Il provient des noms des deux protocoles majeurs de la suite de protocoles, c'est-à... www.commentcamarche.net/contents/internet/tcpip.php3