ctypes et en passant un par référence à une fonction
Je suis en train d'utiliser libpcap en python3 à l'aide de ctypes.
compte tenu de la fonction suivante dans C
pcap_lookupnet(dev, &net, &mask, errbuf)
en python j'ai le texte suivant
pcap_lookupnet = pcap.pcap_lookupnet
mask = ctypes.c_uint32
net = ctypes.c_int32
if(pcap_lookupnet(dev,net,mask,errbuf) == -1):
print("Error could not get netmask for device {0}".format(errbuf))
sys.exit(0)
et l'erreur que j'obtiens est
File "./libpcap.py", line 63, in <module>
if(pcap_lookupnet(dev,net,mask,errbuf) == -1):
ctypes.ArgumentError: argument 2: <class 'TypeError'>: Don't know how to convert parameter 2
comment traitez-vous avec &bla valeurs ?
OriginalL'auteur user961346 | 2011-09-23
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour créer des instances pour
net
etmask
, et l'utilisationbyref
pour les passer.OriginalL'auteur David Heffernan
Vous avez probablement besoin d'utiliser
ctypes.pointer
, comme ceci:Voir le ctypes section tutoriel sur les pointeurs pour plus d'informations.
Je suis en supposant que vous avez créé ctypes procurations pour les autres arguments. Si
dev
nécessite une chaîne de caractères, par exemple, vous ne pouvez pas il suffit de passer une chaîne Python; vous devez créer unctypes_wchar_p
ou quelque chose le long de ces lignes.bpf_u_int32 est vraiment juste ... typedef u_int bpf_u_int32;
OriginalL'auteur DNS
ctypes.c_uint32
est un type. Vous avez besoin d'un exemple:Passer ensuite à l'aide de
ctypes.byref
:Vous pouvez récupérer la valeur à l'aide
mask.value
.OriginalL'auteur Mark Tolonen