Accéder au contenu.
Menu Sympa

technique - Re: [TECH] Programmation socket, AF_INET, bind, udp

Objet : Liste pour les discussions techniques (liste à inscription publique)

Archives de la liste

Re: [TECH] Programmation socket, AF_INET, bind, udp


Chronologique Discussions 
  • From: Mathieu Ignacio <mignacio AT april.org>
  • To: Liste de diffusion technique <technique AT april.org>
  • Subject: Re: [TECH] Programmation socket, AF_INET, bind, udp
  • Date: Sat, 01 Nov 2008 16:30:01 +0100

Benoît Ganne wrote:
Ben normalement tu peux filtrer dans le noyau les paquets qui
t'intéressent via BPF (BSD Packet Filter) dont l'équivalent sous Linux
est LPF (Linux Packet Filter). En fait l'interface Linux est binairement
compatible avec celle de BSD, donc c'est normalement cross-system (BSD
<-> Linux).
Bonne idée, je vais regarder ça. Merci.

Tu peux voir des exemples d'utilisation de BPF/LPF dans le code de pump
par exemple, un client DHCP léger pour UNIX (il l'utilise précisément
pour recevoir les paquets DHCP :), ça peut donc reservir).
Par contre là j'ai des doutes, pump ouvre bien les socket en PF_PACKET, mais il me semble qu'il fait lui même un bête tri à posteriori.


Autre possiblité, utiliser libpcap, la librairie de tcpdump et de
wireshark qui masquent un peu (un peu seulement) la complexité de BPF
avec l'avantage de faciliter le portage entre les plateformes. Il existe
des bindings python pour libpcap comme http://code.google.com/p/pypcap/,
http://sourceforge.net/projects/pylibpcap ou
http://oss.coresecurity.com/projects/pcapy.html.
Enfin, as-tu regardé du côté de scapy
(http://www.secdev.org/projects/scapy/) ? C'est une boîte à outil très
puissante d'analyse/filtrage des paquets pour python, je pense que ça te
simplifierait pas mal la tâche.
Je trouve ces outils intéressants, mais trop lourds pour faire un programme simple qui va récuperer 3 paquets dans la journée...


J'ai donc essayé d'utiliser une socket PF_PACKET, et je n'ai aucun problème lorsque l'interface est monté, mais mon recv/recvfrom me renvoit une erreur "Network is down" si l'interface est down. Quelqu'un a-t-il un pointeur sur une doc qui pourrait m'aider à résoudre ce problème ? J'ai bien essayé de récupérer les bouts de code C de pump et udhcpc pour faire qlq tests, mais je ne code plus des masses en C depuis quelques années (python forever !), et le remplissage des structures sockets me pose bien des problèmes.

Merci pour tout.
a+.


--
Mathieu
http://matou.isanerd.net/





Archives gérées par MHonArc 2.6.16.

Haut de le page