OVH Cloud OVH Cloud

Envoyer des datagrammes UDP ?

9 réponses
Avatar
Zouplaz
Bonjour, je cherche un moyen de provoquer l'envoi de datagrammes UDP à
partir d'un poste linux...

Je sais que ce protocole est utilisé par de nombreux services (DNS par ex.)
mais comme je voudrais tester (heu à vrai dire, coder) la partie UDP de ma
pile TCP/IP j'ai besoin de recevoir des datagrammes UDP à la demande


Comment puis-je faire ?

Merci

9 réponses

Avatar
Zouplaz
Fatal Error - :

On 23 Oct 2004 11:01:55 GMT, Zouplaz wrote:

Bonjour, je cherche un moyen de provoquer l'envoi de datagrammes UDP à
partir d'un poste linux...

Je sais que ce protocole est utilisé par de nombreux services (DNS par
ex.) mais comme je voudrais tester (heu à vrai dire, coder) la partie
UDP de ma pile TCP/IP j'ai besoin de recevoir des datagrammes UDP à la
demande


Comment puis-je faire ?


Heuuu... Programmer ?





Je cherche à tester mon code, si je programme je ne suis plus sûr de
rien... Où seront les bugs ? Côté pile , côté face ?


Avatar
Jacques Caron
On 23 Oct 2004 11:01:55 GMT, Zouplaz wrote:

Bonjour, je cherche un moyen de provoquer l'envoi de datagrammes UDP à
partir d'un poste linux...

Je sais que ce protocole est utilisé par de nombreux services (DNS par
ex.) mais comme je voudrais tester (heu à vrai dire, coder) la partie UDP
de ma pile TCP/IP j'ai besoin de recevoir des datagrammes UDP à la
demande


Ca m'inquiète quand quelqu'un qui veut coder une pile TCP/IP ne sait pas
comment envoyer un paquet UDP...

man socket, man udp, man sendto, man perlipc...

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
T0t0
"Zouplaz" wrote in message
news:
Bonjour, je cherche un moyen de provoquer l'envoi de datagrammes UDP à
partir d'un poste linux...


hping.

Sous windows, frameip.exe.


--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG

Avatar
Jacques Caron
On 23 Oct 2004 12:44:16 GMT, Zouplaz wrote:

Je cherche à tester mon code, si je programme je ne suis plus sûr de
rien... Où seront les bugs ? Côté pile , côté face ?


Programmer ne veut pas forcément dire réimplémenter une couche UDP des
deux côtés, mais utiliser l'implémentation existante.

Mais puisque DNS utilise UDP, la solution la plus simple pour envoyer des
datagrammes UDP (si le contenu des paquets n'est pas important) est
probablement:

dig toto.com. @<adresse IP du serveur à tester>

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
Jacques Caron
On Sat, 23 Oct 2004 18:41:59 +0200, Emmanuel Delahaye
wrote:

Nan, le monsieur, il cherche à valider son code avec une outil qui
fonctionne, comme un générateur de trame... Mais c'est vrai que la
formumation prètait à confusion...


Ben avec UDP, un générateur de trame c'est quand même pas super dur:
#!/usr/bin/perl -w
use strict;
use Socket;

socket(SOCKET,PF_INET,SOCK_DGRAM,getprotobyname('udp')) or die "socket:
$!";
defined(send(SOCKET,"message",0,sockaddr_in(53,inet_aton("127.0.0.1"))))
or die "send: $!";

remplacer message, 53 et 127.0.0.1 par les valeurs adéquates.

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
Emmanuel Delahaye
Jacques Caron wrote on 23/10/04 :
On 23 Oct 2004 11:01:55 GMT, Zouplaz wrote:

Bonjour, je cherche un moyen de provoquer l'envoi de datagrammes UDP à
partir d'un poste linux...

Je sais que ce protocole est utilisé par de nombreux services (DNS par
ex.) mais comme je voudrais tester (heu à vrai dire, coder) la partie UDP
de ma pile TCP/IP j'ai besoin de recevoir des datagrammes UDP à la
demande


Ca m'inquiète quand quelqu'un qui veut coder une pile TCP/IP ne sait pas
comment envoyer un paquet UDP...


Nan, le monsieur, il cherche à valider son code avec une outil qui
fonctionne, comme un générateur de trame... Mais c'est vrai que la
formumation prètait à confusion...

--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html

"C is a sharp tool"


Avatar
Zouplaz
Jacques Caron - :

On Sat, 23 Oct 2004 18:41:59 +0200, Emmanuel Delahaye
wrote:

Nan, le monsieur, il cherche à valider son code avec une outil qui
fonctionne, comme un générateur de trame... Mais c'est vrai que la
formumation prètait à confusion...


Ben avec UDP, un générateur de trame c'est quand même pas super dur:
#!/usr/bin/perl -w
use strict;
use Socket;

socket(SOCKET,PF_INET,SOCK_DGRAM,getprotobyname('udp')) or die
"socket: $!";
defined(send(SOCKET,"message",0,sockaddr_in(53,inet_aton("127.0.0.1")))
) or die "send: $!";

remplacer message, 53 et 127.0.0.1 par les valeurs adéquates.

Jacques.


Oui mais là, tu envois des données brutes (sans rapport avec un protocole
particulier) et pire, sans attendre une quelconque réponse. Ca ne sert à
rien pour valider le code de mon implémentation UDP.

Je préfère ton idée d'utiliser le protocole DNS avec dig, ce qui correspond
parfaitement à mes besoins.


Avatar
Jacques Caron
On 25 Oct 2004 10:18:28 GMT, Zouplaz wrote:

Oui mais là, tu envois des données brutes (sans rapport avec un protocole
particulier) et pire, sans attendre une quelconque réponse. Ca ne sert à
rien pour valider le code de mon implémentation UDP.


Ca permet de valider au minimum la réception: tu envoies un datagramme
quelconque, et tu vérifies si à l'autre bout du reçois exactement la même
chose, et que ça a passé tous les tests (checksums, numéro de port...).

Pour l'inverse c'est pas beaucoup plus compliqué de recevoir des paquets
UDP:
#!/usr/bin/perl -w
use strict;
use Socket;

my $buf;
socket(SOCKET,PF_INET,SOCK_DGRAM,getprotobyname('udp')) or die "socket:
$!";
bind(SOCKET,sockaddr_in(8765,inet_aton("127.0.0.1"))) or die "bind: $!";
while (recv(SOCKET,$buf,1500,0))
{
print "$bufn";
}

On pourra avoir envie de mettre:
print "".(unpack "H*",$buf)."n";
à la place du print "$bufn"; pour avoir la version hexa, sinon on peut
piper dans hd. Evidemment, comme précédemment, on remplace 8765 et
127.0.0.1 par les valeurs appropriées.

Je préfère ton idée d'utiliser le protocole DNS avec dig, ce qui
correspond parfaitement à mes besoins.


L'inconvénient est que dans ce cas du testes ton implémentation UDP *et*
ton implémentation DNS en même temps... Et tu auras plus de mal à vérifier
les cas extrêmes: datagrammes UDP à découper en plusieurs paquets IP par
exemple.

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/

Avatar
Zouplaz
Jacques Caron - :


Je préfère ton idée d'utiliser le protocole DNS avec dig, ce qui
correspond parfaitement à mes besoins.


L'inconvénient est que dans ce cas du testes ton implémentation UDP
*et* ton implémentation DNS en même temps... Et tu auras plus de mal
à vérifier les cas extrêmes: datagrammes UDP à découper en plusieurs
paquets IP par exemple.




C'est pas un problème car je vais devoir implémenter une mini résolution de
nom (dans l'autre sens client -> serveur) donc ça me permet d'expérimenter
un peu... Et puis, travailler avec des données réelles est plus efficace
(la réception UDP fonctionne déjà, il faut donc que j'ai un poil plus loin)

En plus, ethereal m'indique les datagrammes UDP mal formés quelque soit le
protocole (DNS en l'occurence)...