Question

Je tente d'écrire une application utilisateur qui peut accrocher dans une pile de réseau d'OS, renifler des paquets volants ceux du passé et modifier que son intéressé.

Après beaucoup de recherche sur Google, il me semble que la méthode la plus simple (encore assez robuste) de le faire (sur toute plate-forme) est de Linux limitée officielle Documentation. Ses principales caractéristiques (comme indiqué par le premier lien sont)

  • réception de paquets en attente du sous-système nfnetlink_queue noyau
  • émission de verdicts et / ou réinjection paquets modifiés pour le noyau sous-système nfnetlink_queue

L'accent est mon propre. Comment exactement ce que je voulais dire aller à ce sujet? J'ai essayé de modifier le code exemple de fourni, mais peut-être que je suis mal compris quelque chose. Le code fonctionne en mode NFQNL_COPY_PACKET, donc je h la réception du paquet entier - mais mes modifications à il semble se limiter à ma propre application - comme on pouvait s'y attendre, compte tenu de la « copie » sémantique .

Mon sentiment est que je voulais utiliser NF_QUEUE en quelque sorte, mais je ne l'ai pas tout à fait grokked il. Tous les pointeurs?

(S'il y a un mécanisme plus simple pour ce faire, qui est aussi multi-plateforme, j'aimerais entendre parler!)

Était-ce utile?

La solution

Je ne peux pas croire que je manqué ce auparavant. Comme réticente que je dois poser des questions sur, je pensais que je ne travaillerais jamais celui-ci moi-même. :)

Je n'ai pas regardé le prototype de fonctionner correctement. Il se trouve dans la fonction « verdict » (décrit ci-dessous),

int nfq_set_verdict(struct nfq_q_handle *qh,
    u_int32_t id,
    u_int32_t verdict,
    u_int32_t data_len,
    const unsigned char *buf     
)

Les deux derniers paramètres sont pour que les données soient retour à la pile réseau. Évident avec le recul, mais je l'ai raté complètement la fonction print_pkt ne prend pas les données par paquets en tant que paramètre, mais il extrait du struct nfq_data.

La clé est de NF_ACCEPT le paquet et passer le dos de paquet modifié convenablement au noyau.

Autres conseils

Juste une supposition sauvage de creuser autour du code source: essayez d'ajouter explicitement la charge utile en utilisant nfnl_addattr_l(…, NFQA_PAYLOAD, …) mutilée

?
scroll top