IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

gérer 2 paquets dans la queue


Sujet :

Réseau C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Par défaut gérer 2 paquets dans la queue
    Bonjour;

    en faite je veux gérer 2 paquets dans la queue à partir du fichier nfqnl_test.c

    le problème c'est que j'arrive juste à gérer un seul paquet soit l'accepter ou bien le droper, le problème qui se pose c'est que j'ai deux paquets à l'entrée de ma machine venant de 2 machines différentes alors je veux accepter un paquet et droper l'autre, si quelqu'un sait comment faire peut m'aider .

    Merci

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Citation Envoyé par ayoub1989 Voir le message
    quelqu'un sait comment faire peut m'aider .
    On pourra quand on aura compris.

    nfqnl_test.c Ok mais le nom fichier sans le code, ca va pas nous aider.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <netinet/in.h>
    #include <linux/types.h>
    #include <linux/netfilter.h>		/* for NF_ACCEPT */
     
    #include <libnetfilter_queue/libnetfilter_queue.h>
     
    /* returns packet id */
    static u_int32_t print_pkt (struct nfq_data *tb)
    {
    	int id = 0;
    	struct nfqnl_msg_packet_hdr *ph;
    	struct nfqnl_msg_packet_hw *hwph;
    	u_int32_t mark,ifi; 
    	int ret;
    	unsigned char *data;
     
    	ph = nfq_get_msg_packet_hdr(tb);
    	if (ph) {
    		id = ntohl(ph->packet_id);
    		printf("hw_protocol=0x%04x hook=%u id=%u ",
    			ntohs(ph->hw_protocol), ph->hook, id);
    	}
     
    	hwph = nfq_get_packet_hw(tb);
    	if (hwph) {
    		int i, hlen = ntohs(hwph->hw_addrlen);
     
    		printf("hw_src_addr=");
    		for (i = 0; i < hlen-1; i++)
    			printf("%02x:", hwph->hw_addr[i]);
    		printf("%02x ", hwph->hw_addr[hlen-1]);
    	}
     
    	mark = nfq_get_nfmark(tb);
    	if (mark)
    		printf("mark=%u ", mark);
     
    	ifi = nfq_get_indev(tb);
    	if (ifi)
    		printf("indev=%u ", ifi);
     
    	ifi = nfq_get_outdev(tb);
    	if (ifi)
    		printf("outdev=%u ", ifi);
    	ifi = nfq_get_physindev(tb);
    	if (ifi)
    		printf("physindev=%u ", ifi);
     
    	ifi = nfq_get_physoutdev(tb);
    	if (ifi)
    		printf("physoutdev=%u ", ifi);
     
    	ret = nfq_get_payload(tb, &data);
    	if (ret >= 0)
    		printf("payload_len=%d ", ret);
     
    	fputc('\n', stdout);
     
    	return id;
    }
     
     
    static int cb(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
    	      struct nfq_data *nfa, void *data)
    {
    	u_int32_t id = print_pkt(nfa);
    	printf("entering callback\n");
    	return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
    }
     
    int main(int argc, char **argv)
    {
    	struct nfq_handle *h;
    	struct nfq_q_handle *qh;
    	struct nfnl_handle *nh;
    	int fd;
    	int rv;
    	char buf[4096] __attribute__ ((aligned));
     
    	printf("opening library handle\n");
    	h = nfq_open();
    	if (!h) {
    		fprintf(stderr, "error during nfq_open()\n");
    		exit(1);
    	}
     
    	printf("unbinding existing nf_queue handler for AF_INET (if any)\n");
    	if (nfq_unbind_pf(h, AF_INET) < 0) {
    		fprintf(stderr, "error during nfq_unbind_pf()\n");
    		exit(1);
    	}
     
    	printf("binding nfnetlink_queue as nf_queue handler for AF_INET\n");
    	if (nfq_bind_pf(h, AF_INET) < 0) {
    		fprintf(stderr, "error during nfq_bind_pf()\n");
    		exit(1);
    	}
     
    	printf("binding this socket to queue '0'\n");
    	qh = nfq_create_queue(h,  0, &cb, NULL);
    	if (!qh) {
    		fprintf(stderr, "error during nfq_create_queue()\n");
    		exit(1);
    	}
     
    	printf("setting copy_packet mode\n");
    	if (nfq_set_mode(qh, NFQNL_COPY_PACKET, 0xffff) < 0) {
    		fprintf(stderr, "can't set packet_copy mode\n");
    		exit(1);
    	}
     
    	fd = nfq_fd(h);
     
    	while ((rv = recv(fd, buf, sizeof(buf), 0)) && rv >= 0) {
    		printf("pkt received\n");
    		nfq_handle_packet(h, buf, rv);
    	}
     
    	printf("unbinding from queue 0\n");
    	nfq_destroy_queue(qh);
     
    #ifdef INSANE
    	/* normally, applications SHOULD NOT issue this command, since
    	 * it detaches other programs/sockets from AF_INET, too ! */
    	printf("unbinding from AF_INET\n");
    	nfq_unbind_pf(h, AF_INET);
    #endif
     
    	printf("closing library handle\n");
    	nfq_close(h);
     
    	exit(0);
    }
    ça c'estpour accepter le paquet, pour droper il suffit de remplacer NF_ACCEPT par NF_DROP

    Merci

Discussions similaires

  1. [HTML] formulaire gérer les espaces dans un champs texte
    Par renofx1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h17
  2. Réponses: 5
    Dernier message: 28/11/2005, 09h52
  3. Comment gérer le grec dans MySQL ?
    Par LadyArwen dans le forum Requêtes
    Réponses: 14
    Dernier message: 27/01/2005, 09h24
  4. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo