2015-10-07 1 views
2

J'essaie d'implémenter des paquets de relecture stockés dans des fichiers .pcap en utilisant libpcap. Le processus est très simple: je voudrais ouvrir le fichier pcap avec 'pcap_open_offline' puis passer les paquets à l'appareil ouvert avec pcap_open_live, et les envoyer avec pcap_inject à travers l'interface.pcap_inject sur une interface déconnectée

La carte réseau ne possède pas de câble Ethernet. Je sais que pcap_open_live ne dira pas si le périphérique ouvert prend en charge l'envoi, donc j'obtiens des erreurs de pcap_inject (errno 100). Doit on s'y attendre? Si j'utilise simplement tcpreplay de la ligne cmd, il se termine et ne présente aucune erreur, avec ou sans le câble Ethernet branché.

Quelqu'un sait comment tcpreplay/tcpedit gère les interfaces «mortes»? Est-ce que tcpreplay réécrit les en-têtes de paquets alors que j'essaie de les envoyer en raw? Toute aide est appréciée!

Je suis sur Ubuntu 14.04 et l'interface est adresse moins et en mode promisc:

auto eth1 
iface eth1 inet manual 
    up ifconfig eth1 promisc up 
    down ifconfig eth1 promisc down 

Répondre

1

Maintenant, la carte réseau ne dispose pas d'un câble Ethernet connecté.

Ensuite, quel résultat utile espérez-vous obtenir en envoyant des paquets sur cette carte réseau?

Je sais que pcap_open_live ne sera pas dire si l'appareil a ouvert des supports d'envoi

que l'appareil soit ou ne peut pas changer au fil du temps, de sorte que toute réponse que vous obtenez de pcap_open_live() pourrait être incorrect par le temps que vous essayez réellement d'envoyer le paquet.

si je reçois des erreurs de pcap_inject (errno 100)

Recherche de 100 sous Linux errno.h révèle:

#define ENETDOWN 100 /* Network is down */ 

Je suppose que le réseau Linux ne l'aime pas quand les gens essayez d'envoyer des paquets sur une interface qui est en panne avec un appel système send(), ce qui est fait par libpcap.

Est-ce normal?

Oui.

Si j'utilise simplement tcpreplay de la ligne cmd, il termine et présente aucune erreur

tcpreplay a tout un tas de mécanismes différents qu'il utilise pour envoyer des paquets. Voir sendpacket() dans le fichier source sendpacket.c dans la source tcpreplay. Certains d'entre eux pourraient, par exemple, laisser tomber silencieusement des paquets envoyés sur une interface morte, plutôt que de rapporter une erreur, et il pourrait utiliser un de ces mécanismes.

+0

Merci Guy! J'ai vérifié que même si tcpreplay ne signale aucune erreur, les paquets ont bien été supprimés.J'allais utiliser la carte réseau comme une sorte de renifleur, et ne traiter que les paquets des fichiers pcap, mais il recevait des paquets du câble ethernet ... Je suppose que je dois juste en faire un non-promisc – icdevppl

+0

ou je pourrais utiliser le dispositif de bouclage à cet effet .... souhaite qu'il y avait un livre de réseautage pour les nuls: P – icdevppl