Programmation prises udp premières dans C sous Linux

Prises udp brutes

prises udp premières sont utilisées pour envoyer des paquets UDP construits manuellement. L'en-tête udp peut être trouvée dans la RFC 768 et a une structure très simple, comme indiqué ci-dessous.







La longueur est la longueur de l'en-tête UDP + données en octets. Ainsi, l'en-tête udp est lui-même 8 octets de long et les données peuvent être jusqu'à 65536 octets de long. La somme de contrôle est calculée de la même manière que la somme de contrôle d'un en-tête TCP, en utilisant un pseudo en-tête.

L'exemple de code indiqué ici est pour Linux. support raw socket n'est pas entièrement disponible dans la prise de fenêtres api (Winsock). Il est là, mais avec beaucoup de restrictions.

Les exemples présentés ici construiraient l'en-tête IP ainsi que la prise udp. Donc, il est plus comme un paquet IP brut qui encapsule les données de format UDP à l'intérieur lui-même.







Un socket UDP brut peut être créée en utilisant simplement la fonction de prise

Dans une telle prise, l'en-tête IP doit être fournie par le noyau. L'application doit fournir l'en-tête UDP + données. Si l'option IP_HDRINCL est définie sur elle, l'application devra fournir l'en-tête IP aussi.

Voici le programme complet qui utilise une prise udp raw pour envoyer des données.

Exécutez le programme avec l'utilisateur root / privilèges. Lors de l'utilisation ubuntu sudo.

Si vous avez seulement besoin de construire l'en-tête UDP puis utilisez IPPROTO_UDP comme protocole. Comme Firestarter peuvent pare-feux de bloquer ces paquets bruts de transmission, afin de les désactiver avant de tester le programme.

Une application commune des prises udp premières est basée udp tracerouting où une application envoie des paquets UDP avec des valeurs croissantes de l'en-tête IP ttl. Nous verrons un exemple d'un tel programme dans un autre article.

la somme de contrôle IP est calculé comme suit
iph-> = vérifier csum ((datagramme court *) non signé, iph-> tot_len);

le second paramètre est la longueur d'en-tête IP qui indique à quel point l'ensemble datagrammes devrait être utilisé pour calculer la somme de contrôle, qui est seulement l'en-tête IP dans ce cas.







Articles Liés