Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[libpcap] pcap_inject() ?

8 réponses
Avatar
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

8 réponses

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


--
Stephane
Avatar
JKB
Le Wed, 25 Apr 2012 16:27:20 +0100,
Stephane Chazelas écrivait :
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
Avatar
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?

--
Stephane
Avatar
JKB
Le Wed, 25 Apr 2012 18:19:58 +0100,
Stephane Chazelas écrivait :
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
Avatar
Bruno Ducrot
Bonjour,

Le 25-04-2012, JKB a écrit :
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 ?
Avatar
JKB
Le 03 May 2012 13:53:42 GMT,
Bruno Ducrot écrivait :
Bonjour,

Le 25-04-2012, JKB a écrit :
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
Avatar
Bruno Ducrot
Le 03-05-2012, JKB a écrit :
Le 03 May 2012 13:53:42 GMT,
Bruno Ducrot écrivait :
Bonjour,

Le 25-04-2012, JKB a écrit :
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 ?
Avatar
JKB
Le 03 May 2012 15:34:15 GMT,
Bruno Ducrot écrivait :
Le 03-05-2012, JKB a écrit :
Le 03 May 2012 13:53:42 GMT,
Bruno Ducrot écrivait :
Bonjour,

Le 25-04-2012, JKB a écrit :
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