[libpcap] pcap_inject() ?

Le
JKB
Bonjour à tous,

Je suis en train d'essayer de corriger des bugs dans un bout de code
assez court et vraiment mal écrit qui utilise la libcpap.

Ce programme prend une trame ethernet et la tronçonne pour l'envoyer
sur une interface spécifique. À l'autre bout du lien, il récupère
les bouts pour régénérer une trame éthernet.

Problème : le type qui a écrit ce bout de code utilise pcap_inject()
à chaque fois qu'un bout de paquet arrive même si la trame ethernet
n'est pas complète.

Je suppose que pcap_inject() s'attend à avoir un paquet 'raw'
_entier_ et non un bout, non ? Je n'ai pas trouvé dans la doc si
pcap_inject() est assez intelligent pour attendre que le paquet soit
effectivement complet pour l'envoyer.

Je pose la question pour avoir un avis parce que le programme en
question merdoie et sa transformation (vue la façon dont il est
écrit) risque de me prendre pas mal de temps :-(

Cordialement,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse
=> http://grincheux.de-charybde-en-scylla.fr
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #24429661
2012-04-25 14:54:08 +0000, JKB:
Bonjour à tous,

Je suis en train d'essayer de corriger des bugs dans un bout de code
assez court et vraiment mal écrit qui utilise la libcpap.

Ce programme prend une trame ethernet et la tronçonne pour l'envoyer
sur une interface spécifique. À l'autre bout du lien, il récupère
les bouts pour régénérer une trame éthernet.

Problème : le type qui a écrit ce bout de code utilise pcap_inject()
à chaque fois qu'un bout de paquet arrive même si la trame ethernet
n'est pas complète.

Je suppose que pcap_inject() s'attend à avoir un paquet 'raw'
_entier_ et non un bout, non ? Je n'ai pas trouvé dans la doc si
pcap_inject() est assez intelligent pour attendre que le paquet soit
effectivement complet pour l'envoyer.

Je pose la question pour avoir un avis parce que le programme en
question merdoie et sa transformation (vue la façon dont il est
écrit) risque de me prendre pas mal de temps... :-(


[...]

strace/tusc/truss... (ou gdb) devraient pouvoir te dire ce que
se passe dans l'appli et tshark/snoop/tcpdump... sur l'interface.


--
Stephane
JKB
Le #24429651
Le Wed, 25 Apr 2012 16:27:20 +0100,
Stephane Chazelas
2012-04-25 14:54:08 +0000, JKB:
Bonjour à tous,

Je suis en train d'essayer de corriger des bugs dans un bout de code
assez court et vraiment mal écrit qui utilise la libcpap.

Ce programme prend une trame ethernet et la tronçonne pour l'envoyer
sur une interface spécifique. À l'autre bout du lien, il récupère
les bouts pour régénérer une trame éthernet.

Problème : le type qui a écrit ce bout de code utilise pcap_inject()
à chaque fois qu'un bout de paquet arrive même si la trame ethernet
n'est pas complète.

Je suppose que pcap_inject() s'attend à avoir un paquet 'raw'
_entier_ et non un bout, non ? Je n'ai pas trouvé dans la doc si
pcap_inject() est assez intelligent pour attendre que le paquet soit
effectivement complet pour l'envoyer.

Je pose la question pour avoir un avis parce que le programme en
question merdoie et sa transformation (vue la façon dont il est
écrit) risque de me prendre pas mal de temps... :-(


[...]

strace/tusc/truss... (ou gdb) devraient pouvoir te dire ce que
se passe dans l'appli et tshark/snoop/tcpdump... sur l'interface.



Je n'ai accès ni à l'un ni à l'autre. C'est sur un arm petit bras
avec très peu de mémoire... Sinon, ce ne serait pas drole.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Stephane Chazelas
Le #24429941
2012-04-25 15:32:54 +0000, JKB:
[...]
> strace/tusc/truss... (ou gdb) devraient pouvoir te dire ce que
> se passe dans l'appli et tshark/snoop/tcpdump... sur l'interface.

Je n'ai accès ni à l'un ni à l'autre. C'est sur un arm petit bras
avec très peu de mémoire... Sinon, ce ne serait pas drole.


[...]

iptables logs?

--
Stephane
JKB
Le #24430511
Le Wed, 25 Apr 2012 18:19:58 +0100,
Stephane Chazelas
2012-04-25 15:32:54 +0000, JKB:
[...]
> strace/tusc/truss... (ou gdb) devraient pouvoir te dire ce que
> se passe dans l'appli et tshark/snoop/tcpdump... sur l'interface.

Je n'ai accès ni à l'un ni à l'autre. C'est sur un arm petit bras
avec très peu de mémoire... Sinon, ce ne serait pas drole.


[...]

iptables logs?



C'est une idée si j'arrive à installer la chose et qu'il n'y a pas
trop de dépendances (la mémoire de masse est aussi très limitée...).

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Bruno Ducrot
Le #24449811
Bonjour,

Le 25-04-2012, JKB
Bonjour à tous,

Je suis en train d'essayer de corriger des bugs dans un bout de code
assez court et vraiment mal écrit qui utilise la libcpap.

Ce programme prend une trame ethernet et la tronçonne pour l'envoyer
sur une interface spécifique. À l'autre bout du lien, il récupère
les bouts pour régénérer une trame éthernet.

Problème : le type qui a écrit ce bout de code utilise pcap_inject()
à chaque fois qu'un bout de paquet arrive même si la trame ethernet
n'est pas complète.

Je suppose que pcap_inject() s'attend à avoir un paquet 'raw'
_entier_ et non un bout, non ? Je n'ai pas trouvé dans la doc si
pcap_inject() est assez intelligent pour attendre que le paquet soit
effectivement complet pour l'envoyer.



Je serais vraiment surpris que pcap_inject() puisse etre assez intelligent pour
attendre que le paquet soit complet.

Par contre, si le code ressemble a ceci :

if (pcap_inject(p, buf, size) == -1) {
pcap_perror(p, "pcap_inject: ");
...
...
...
}

tu obtiendrais d'eventuels messages d'erreurs te permettant d'aller plus loin.


A plus,

--
Bruno Ducrot

A quoi ca sert que Ducrot hisse des carcasses ?
JKB
Le #24449941
Le 03 May 2012 13:53:42 GMT,
Bruno Ducrot
Bonjour,

Le 25-04-2012, JKB
Bonjour à tous,

Je suis en train d'essayer de corriger des bugs dans un bout de code
assez court et vraiment mal écrit qui utilise la libcpap.

Ce programme prend une trame ethernet et la tronçonne pour l'envoyer
sur une interface spécifique. À l'autre bout du lien, il récupère
les bouts pour régénérer une trame éthernet.

Problème : le type qui a écrit ce bout de code utilise pcap_inject()
à chaque fois qu'un bout de paquet arrive même si la trame ethernet
n'est pas complète.

Je suppose que pcap_inject() s'attend à avoir un paquet 'raw'
_entier_ et non un bout, non ? Je n'ai pas trouvé dans la doc si
pcap_inject() est assez intelligent pour attendre que le paquet soit
effectivement complet pour l'envoyer.



Je serais vraiment surpris que pcap_inject() puisse etre assez intelligent pour
attendre que le paquet soit complet.

Par contre, si le code ressemble a ceci :

if (pcap_inject(p, buf, size) == -1) {
pcap_perror(p, "pcap_inject: ");
...
...
...
}

tu obtiendrais d'eventuels messages d'erreurs te permettant d'aller plus loin.



C'est bien la première chose que j'ai faite... sans succès
d'ailleurs...

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Bruno Ducrot
Le #24450151
Le 03-05-2012, JKB
Le 03 May 2012 13:53:42 GMT,
Bruno Ducrot
Bonjour,

Le 25-04-2012, JKB
Bonjour à tous,

Je suis en train d'essayer de corriger des bugs dans un bout de code
assez court et vraiment mal écrit qui utilise la libcpap.

Ce programme prend une trame ethernet et la tronçonne pour l'envoyer
sur une interface spécifique. À l'autre bout du lien, il récupère
les bouts pour régénérer une trame éthernet.

Problème : le type qui a écrit ce bout de code utilise pcap_inject()
à chaque fois qu'un bout de paquet arrive même si la trame ethernet
n'est pas complète.

Je suppose que pcap_inject() s'attend à avoir un paquet 'raw'
_entier_ et non un bout, non ? Je n'ai pas trouvé dans la doc si
pcap_inject() est assez intelligent pour attendre que le paquet soit
effectivement complet pour l'envoyer.



Je serais vraiment surpris que pcap_inject() puisse etre assez intelligent pour
attendre que le paquet soit complet.

Par contre, si le code ressemble a ceci :

if (pcap_inject(p, buf, size) == -1) {
pcap_perror(p, "pcap_inject: ");
...
...
...
}

tu obtiendrais d'eventuels messages d'erreurs te permettant d'aller plus loin.



C'est bien la première chose que j'ai faite... sans succès
d'ailleurs...



Aie, je m'en doutais.

Peut-etre faudrait-il jouer avec pcap_set_snaplen() et/ou
pcap_set_buffer_size() afin d'etre certain de recuperer les paquets en
entier. Sinon, tu peux m'envoyer (mon Reply-To est valide) le bout de
code incrimine si bien entendu celui-ci n'est pas confidentiel.

J'y jetterai un oeil.

A plus,

--
Bruno Ducrot

A quoi ca sert que Ducrot hisse des carcasses ?
JKB
Le #24450301
Le 03 May 2012 15:34:15 GMT,
Bruno Ducrot
Le 03-05-2012, JKB
Le 03 May 2012 13:53:42 GMT,
Bruno Ducrot
Bonjour,

Le 25-04-2012, JKB
Bonjour à tous,

Je suis en train d'essayer de corriger des bugs dans un bout de code
assez court et vraiment mal écrit qui utilise la libcpap.

Ce programme prend une trame ethernet et la tronçonne pour l'envoyer
sur une interface spécifique. À l'autre bout du lien, il récupère
les bouts pour régénérer une trame éthernet.

Problème : le type qui a écrit ce bout de code utilise pcap_inject()
à chaque fois qu'un bout de paquet arrive même si la trame ethernet
n'est pas complète.

Je suppose que pcap_inject() s'attend à avoir un paquet 'raw'
_entier_ et non un bout, non ? Je n'ai pas trouvé dans la doc si
pcap_inject() est assez intelligent pour attendre que le paquet soit
effectivement complet pour l'envoyer.



Je serais vraiment surpris que pcap_inject() puisse etre assez intelligent pour
attendre que le paquet soit complet.

Par contre, si le code ressemble a ceci :

if (pcap_inject(p, buf, size) == -1) {
pcap_perror(p, "pcap_inject: ");
...
...
...
}

tu obtiendrais d'eventuels messages d'erreurs te permettant d'aller plus loin.



C'est bien la première chose que j'ai faite... sans succès
d'ailleurs...



Aie, je m'en doutais.

Peut-etre faudrait-il jouer avec pcap_set_snaplen() et/ou
pcap_set_buffer_size() afin d'etre certain de recuperer les paquets en
entier. Sinon, tu peux m'envoyer (mon Reply-To est valide) le bout de
code incrimine si bien entendu celui-ci n'est pas confidentiel.

J'y jetterai un oeil.



C'est gentil, mais je ne peux malheureusement pas...

Cordialement,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Publicité
Poster une réponse
Anonyme