pcap_compile()
compile une chaîne dans un programme de filtrage sous la forme d'une struct bpf_program
. En théorie, je pourrais enregistrer la forme compilée du programme et le fournir à pcap_setfilter()
sur une interface réseau différente ou même sur une machine différente.Comment portable est la sortie de pcap_compile?
Cela fonctionnera-t-il? Le formulaire bpf_program
est-il portable sur différentes interfaces? Différents processus? Différentes architectures? Ou est-il plus sûr de compiler l'expression chaque fois que je veux l'utiliser?
Basé sur l'existence de pcap_open_dead()
je suppose qu'il est quelque peu portable, mais ce qui est sûr et ce qui ne semble pas être épelé partout dans la documentation.
Merci, c'est très utile. Pour clarifier: qu'en est-il des différentes interfaces/périphériques sur la même machine? – benzado
Différentes interfaces sur la même machine devraient être bien, je pense. Cependant, je ne suis pas entièrement sûr de toutes les implémentations. Je suis en fait hésitant sur différents/types/d'interfaces, comme ethernet/loopback/ieee1394. J'ai un soupçon qui pourrait ne pas fonctionner, même si cela fait plus d'un an que je n'ai piraté aucun de ces codes et que ça me fuit la tête. – McPherrinM
Différentes interfaces * avec le même type d'en-tête de couche liaison * peuvent exécuter le même code BPF. Différentes interfaces avec des types d'en-tête de couche de liaison * différents *, par ex. Ethernet vs. 802.11 vs. PPP, peut * PAS * exécuter le même code BPF (bien, ils peuvent exécuter le même code BPF, mais le code ne fonctionnera pas correctement comme un filtre sur les interfaces avec un type d'en-tête de couche liaison différent de celui pour lequel le code BPF a été compilé). –