Capture d'un paquet
Bonsoir.
je travaille sur la distribution Centos 6.2.
j'ai ce programme qui montre comment utiliser le hook pour modifier le trafic réseau dans le noyau Linux en utilisant Netfilter :
je veux ajouter à cet exemple un #include <rtp.h> qui sert à capturer un paquet rtp en modifiant son en-tête tel que payload.
SVP pouvez-vous m'aider.
et merci d'avance.
je travaille sur la distribution Centos 6.2.
j'ai ce programme qui montre comment utiliser le hook pour modifier le trafic réseau dans le noyau Linux en utilisant Netfilter :
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <linux/tcp.h>
#include <linux/in.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
/* Port we want to drop packets on */
static const uint16_t port = 25;
/* This is the hook function itself */
static unsigned int hook_func(unsigned int hooknum,
struct sk_buff **pskb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
struct iphdr *iph = ip_hdr(*pskb);
struct tcphdr *tcph, tcpbuf;
if (iph->protocol != IPPROTO_TCP)
return NF_ACCEPT;
tcph = skb_header_pointer(*pskb, ip_hdrlen(*pskb), sizeof(*tcph), &tcpbuf);
if (tcph == NULL)
return NF_ACCEPT;
return (tcph->dest == port) ? NF_DROP : NF_ACCEPT;
}
/* Used to register our hook function */
static struct nf_hook_ops nfho = {
.hook = hook_func,
.hooknum = NF_IP_PRE_ROUTING,
.pf = NFPROTO_IPV4,
.priority = NF_IP_PRI_FIRST,
};
static __init int my_init(void)
{
return nf_register_hook(&nfho);
}
static __exit void my_exit(void)
{
nf_unregister_hook(&nfho);
}
module_init(my_init);
module_exit(my_exit);
je veux ajouter à cet exemple un #include <rtp.h> qui sert à capturer un paquet rtp en modifiant son en-tête tel que payload.
SVP pouvez-vous m'aider.
et merci d'avance.
A voir également:
- Capture d'un paquet
- Capture d'écran whatsapp - Accueil - Messagerie instantanée
- Capture d'écran samsung - Guide
- Faststone capture - Télécharger - Capture d'écran
- Capture d'écran mac - Guide
- Capture d'écran ipad - Guide
5 réponses
Je n'ai pas très bien compris à quel endroit tu étais bloqué. Si tu veux inclure <rtp.h> il faut installer la librairie correspondante. Pour trouver son nom si tu es sous debian ou un distribution qui en dérive tu peux utiliser apt-file :
Je ne sais pas quelle libraire est la plus appropriée dans ton cas, mais supposons que ce soit libortp-dev. Il suffit alors sous debian de l'installer via apt-get , aptitude, synaptic etc...
Ensuite dans ton programme il suffit d'inclure <ortp/rtp.h> puisqu'ici le header est dans /usr/include/ortp. Enfin au moment de compiler ton programme, il ne faut pas oublier de linker avec la librairie (compilation du fichier qui contient le main).
Ici la libraire s'appelle libortp.so, donc il suffit de rajouter l'option "-lortp".
Bonne chance
(mando@aldur) (~) $ apt-file search rtp.h | grep "/usr/include" | grep "rtp\.h$" libbitstream-dev: /usr/include/bitstream/ietf/rtp.h libccrtp-dev: /usr/include/ccrtp/rtp.h libh323plus-dev: /usr/include/openh323/rtp.h libopal-dev: /usr/include/opal/rtp/rtp.h libopenh323-dev: /usr/include/openh323/rtp.h libortp-dev: /usr/include/ortp/rtp.h libsrtp0-dev: /usr/include/srtp/rtp.h libuclmmbase1-dev: /usr/include/uclmmbase/rtp.h
Je ne sais pas quelle libraire est la plus appropriée dans ton cas, mais supposons que ce soit libortp-dev. Il suffit alors sous debian de l'installer via apt-get , aptitude, synaptic etc...
aptitude update aptitude safe-upgrade aptitude install rtp.h
Ensuite dans ton programme il suffit d'inclure <ortp/rtp.h> puisqu'ici le header est dans /usr/include/ortp. Enfin au moment de compiler ton programme, il ne faut pas oublier de linker avec la librairie (compilation du fichier qui contient le main).
(mando@aldur) (~) $ apt-file list libortp-dev | grep "\.so$" libortp-dev: /usr/lib/libortp.so
Ici la libraire s'appelle libortp.so, donc il suffit de rajouter l'option "-lortp".
gcc -W -Wall -c fichier1.c gcc -W -Wall -c fichier2.c gcc -W -Wall -o monprogramme main.c fichier1.o fichier2.o -lortp
Bonne chance
merci beaucoup pour la reponse.
le programme qui j'ai le posté, je veux le faire une modification.
je veux l'insérer le programme qui sert à capturer le paquet RTP en modifiant le payload.
le programme qui j'ai le posté, je veux le faire une modification.
je veux l'insérer le programme qui sert à capturer le paquet RTP en modifiant le payload.
Effectivement avec libpcap ou netfilter tu dois pouvoir récupérer les paquets dont tu as besoin.
Pour reforger le paquets à partir des headers mist en jeu. Pour ip, tcp, udp etc... tu dois déja tout avoir au niveau de la libc? Du coup, la seule chose dont tu as besoin , c'est de connaître la structure d'un paquet RTP (ce qui peut se faire visiblement via ortp).
http://ftp.igh.cnrs.fr/pub/nongnu/linphone/ortp/docs/index.html
http://ftp.igh.cnrs.fr/pub/nongnu/linphone/ortp/docs/payloadtype_8h.html
Pour reforger le paquets à partir des headers mist en jeu. Pour ip, tcp, udp etc... tu dois déja tout avoir au niveau de la libc? Du coup, la seule chose dont tu as besoin , c'est de connaître la structure d'un paquet RTP (ce qui peut se faire visiblement via ortp).
http://ftp.igh.cnrs.fr/pub/nongnu/linphone/ortp/docs/index.html
http://ftp.igh.cnrs.fr/pub/nongnu/linphone/ortp/docs/payloadtype_8h.html
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question