8
votes

ctypes et passer un par référence à une fonction

J'essaie d'utiliser libpcap dans Python3 en utilisant CTYPES.

Compte tenu de la fonction suivante en C xxx

dans python, j'ai ce qui suit xxx

et l'erreur que je reçois est xxx

Comment gérez-vous des valeurs et des valeurs bla?


0 commentaires

3 Réponses :


2
votes

Vous devez probablement utiliser ctypes.pointer , comme celui-ci: xxx

voir la section du didacticiel CTYPES sur Pointeurs pour plus d'informations.

I ' m en supposant que vous ayez créé des mandataires CTTYPES pour les autres arguments. Si dev nécessite une chaîne, par exemple, vous ne pouvez pas simplement passer dans une chaîne Python; Vous devez créer un CTYPES_WCHAR_P ou quelque chose le long de ces lignes.


2 commentaires

Net et masque sont des types très spécifiques voir ci-dessous INT PCAP_LOOKUPNET (Const Char * Device, BPF_U_INT32 * NETP, BPF_U_INT32 * MASKP, CHAR * ERRBUF);


BPF_U_INT32 est vraiment juste ... Typedef u_int BPF_U_INT32;



2
votes

ctypes.c_uint32 est un type type . Vous avez besoin d'une instance: xxx

puis passe en utilisant ctypes.byref : xxx

Vous pouvez récupérer la valeur en utilisant mask.value .


0 commentaires

22
votes

Vous devez créer des instances pour net code> et masque code> et utiliser byref code> pour les transmettre.

mask = ctypes.c_uint32()
net = ctypes.c_int32()
pcap_lookupnet(dev, ctypes.byref(net), ctypes.byref(mask), errbuf)


1 commentaires

Stackoverflow dit pour éviter d'utiliser des commentaires tels que "Merci", mais j'ai passé beaucoup de temps à essayer de trouver une solution à cette question également. Alors merci! :)