2011-07-18 4 views
0

J'ai reçu un projet de cours à l'université (ingénierie réseau) qui consiste à écrire un renifleur de paquets capable de capturer et d'identifier les paquets IPv4, IPv6, TCP, UDP, IP, ICMP etc. et afficher leur contenu.Packet reniflant dans linux sans utiliser libpcap

A l'origine, il nous a été demandé d'utiliser libpcap pour cela, mais l'un des techniciens de l'université vient de nous informer qu'il n'est pas possible d'utiliser libpcap avec l'installation actuelle (Arch linux). Quelles autres façons de créer un renifleur de paquets en C qui n'utilise pas libpcap?

Je ne demande pas la réponse à ce projet, je demande juste la direction, où je devrais commencer?

Répondre

5

Je voudrais aller et demander à quelqu'un plus haut ce que vous êtes réellement censé faire. Il semble y avoir deux tâches complètement différentes: l'une consiste à analyser et à afficher les paquets réseau et l'autre à s'interfacer avec le système d'exploitation/le matériel pour capturer les paquets. Si vous êtes censé apprendre sur le premier, alors vous ne devriez probablement pas passer du temps sur le dernier.

+0

+1, je suis entièrement d'accord. –

+0

Oui, il s'avère que l'accent est l'analyse et l'affichage. En tant que tel, on nous a dit de simplement vider la sortie brute de tcpdump et ensuite l'analyser avec notre programme. – DanielGibbs

0

Pourquoi n'utilisez-vous pas WireShark? Il a des paquets pour ArchLinux et est vraiment amusant à travailler. Je l'ai utilisé moi-même avec des résultats favorables.

https://wiki.archlinux.org/index.php/Wireshark

+0

Je pense que l'auteur veut écrire un renifleur - ne pas utiliser un. – tr9sh

3

Au départ, nous ont été tenues d'utiliser libpcap pour ce faire, mais nous venons d'être informés par l'un des techniciens universitaires qu'il est impossible d'utiliser libpcap avec l'installation actuelle (Arch linux).

La première chose que je conseillerais est d'obtenir une réponse directe du tuteur du cours. Si le technicien veut dire libpcap n'est pas disponible, bien, vous devriez être capable de le compiler. Si le technicien veut dire (Arch, ou l'université) a supprimé les pilotes en mode promiscuous du noyau Linux, il n'y a pas beaucoup de choses que vous pouvez faire. De toute façon, vérifiez ce que vous entendez.

Si vous avez encore besoin de faire cela, qu'est-ce qui ne va pas avec la lecture de la source libpcap? pcap_loop est la fonction que vous recherchez, qui appelle read_op à partir d'une struct pcap_t. grep -irn "read_op = " * révèle plusieurs lecteurs possibles au niveau bas dans libpcap:

grep -irn "read_op = " * 
pcap-bpf.c:2231: p->read_op = pcap_read_bpf; 
pcap-bt-linux.c:172: handle->read_op = bt_read_linux; 
pcap.c:243: p->read_op = (read_op_t)pcap_not_initialized; 
pcap-can-linux.c:99: handle->read_op = can_read_linux; 
pcap-dag.c:795: handle->read_op = dag_read; 
pcap-dlpi.c:759: p->read_op = pcap_read_dlpi; 
pcap-libdlpi.c:217: p->read_op = pcap_read_libdlpi; 
pcap-linux.c:1198: handle->read_op = pcap_read_linux; 
pcap-linux.c:3167: handle->read_op = pcap_read_linux_mmap; 
pcap-netfilter-linux.c:338: handle->read_op = nflog_read_linux; 
pcap-nit.c:315: p->read_op = pcap_read_nit; 
pcap-pf.c:486: p->read_op = pcap_read_pf; 
pcap-septel.c:213: handle->read_op = septel_read; 
pcap-sita.c:941: handle->read_op = pcap_read_acn; 
pcap-snf.c:236: p->read_op = snf_read; 
pcap-snit.c:394: p->read_op = pcap_read_snit; 
pcap-snoop.c:381: p->read_op = pcap_read_snoop; 
pcap-usb-linux.c:341:   handle->read_op = usb_read_linux_mmap; 
pcap-usb-linux.c:355:  handle->read_op = usb_read_linux_bin; 
pcap-usb-linux.c:390:  handle->read_op = usb_read_linux; 
pcap-win32.c:687:  p->read_op = pcap_read_win32_dag; 
pcap-win32.c:694:  p->read_op = pcap_read_win32_npf; 
savefile.c:323: p->read_op = pcap_offline_read; 

Lequel votre système utilise dépend probablement le résultat de configure, mais aucun de ceux agiraient comme points de départ pour le travail comment cela fonctionne. N'ayez pas peur de démonter de gros projets comme celui-ci - quelqu'un d'autre a dit "google est votre ami". Eh bien, je pense que grep est votre ami.