Question

Je suis relativement nouveau en Python et je rencontre des problèmes de programmation avec Scapy, l'outil de manipulation de réseau Python. Cependant, je ne peux pas dire s'il s'agit autant d'un problème Scapy que d'un problème de débutant en Python. Sur le site scapy , ils donnent un exemple de programme auquel je ne suis pas en mesure de exécuter ma propre machine:

#! /usr/bin/env python

import sys
from scapy import sr1,IP,ICMP

p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
    p.show()

Ce que je reçois:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    from scapy import sr1,IP,ICMP
ImportError: cannot import name sr1

Ma question est donc la suivante: lors de l’installation des bibliothèques Python, dois-je changer mon chemin ou quelque chose de similaire? Aussi, y a-t-il quelque chose que je peux utiliser dans l'interprète pour me dire le contenu du paquet scapy? Je peux très bien utiliser à partir de scapy import * , mais comme je n'ai aucune idée de ce qu'il contient, il est difficile de l'utiliser.

Était-ce utile?

La solution

Avec l’avertissement de Federico Ramponi "Vous devez utiliser scapy comme un interprète, et non comme une bibliothèque", je souhaite répondre aux parties de la question qui ne sont pas spécifiques à Scapy.

Q: lors de l'installation des bibliothèques Python, dois-je modifier mon chemin ou quelque chose de similaire?

R: Je pense que vous parlez de changer PYTHONPATH à l'échelle du système. Ce n'est généralement pas nécessaire ou une bonne idée.

Les bibliothèques Python tierces doivent être installées dans des répertoires système, tels que /usr/lib/python2.5/site-packages , ou installées localement, auquel cas vous pouvez définir < code> PYTHONPATH dans votre Makefile ou dans un script shell de pilote.

Q: De plus, puis-je utiliser quelque chose dans l'interprète pour me dire le contenu du paquet scapy?

A: Vous pouvez faire quelque chose comme ceci:

>>> import scapy
>>> dir(scapy)

Ou même mieux:

>>> import scapy
>>> help(scapy)

Question bonus posée dans un commentaire.

Q: Est-ce que "import scapy" est identique à "à partir de import scapy * '?

A: import scapy lie le nom scapy dans l'espace de noms local à l'objet de module scapy. OTOH, de scapy import * ne lie pas le nom du module, mais tous les noms publics définis dans le module scapy sont liés dans l'espace de noms local.

Voir les paragraphes 6 et 7 du Manuel de référence Python, 6.12. déclaration d'importation .

Autres conseils

J'ai eu le même problème, dans l'utilisation de scapy v2.x

 from scapy.all import * 

à la place de la v1.x

 from scapy import *

tel qu'écrit ici

Profitez-en =)

Il vous dit qu'il ne peut pas trouver SR1 dans Scapy. Vous ne savez pas à quel point vous êtes novice, mais l'interprète est toujours votre ami. Lancez l'interprète (saisissez simplement "python" sur la ligne de commande), puis à l'invite (> >), tapez (mais ne tapez pas les >, ils s'afficheront d'eux-mêmes):

>>> import scapy
>>> from pprint import pformat
>>> pformat(dir(scapy))

La dernière ligne devrait imprimer beaucoup de choses. Voyez-vous «sr1», «IP» et «ICMP» n'importe où? Sinon, l'exemple est en cause.

Essayez aussi help (scapy)

C'est à peu près tout ce que je peux vous aider sans installer scapy et sans regarder moi-même votre fichier source.

Le package scapy est un outil de manipulation et de surveillance du réseau. Je suis curieux de savoir ce que vous essayez de faire avec cela. C'est impoli d'espionner vos amis. : -)

coventry@metta:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip
coventry@metta:~/src$ unzip -qq scapy-latest.zip 
warning [scapy-latest.zip]:  61 extra bytes at beginning or within zipfile
  (attempting to process anyway)
coventry@metta:~/src$ find scapy-2.0.0.10 -name \*.py | xargs grep sr1
scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
scapy-2.0.0.10/scapy/layers/inet6.py:from scapy.sendrecv import sr,sr1,srp1
scapy-2.0.0.10/scapy/layers/snmp.py:            r = sr1(IP(dst=dst)/UDP(sport=RandShort())/SNMP(community=community, PDU=SNMPnext(varbindlist=[SNMPvarbind(oid=oid)])),timeout=2, chainCC=1, verbose=0, retry=2)
scapy-2.0.0.10/scapy/layers/inet.py:from scapy.sendrecv import sr,sr1,srp1
scapy-2.0.0.10/scapy/layers/inet.py:            p = sr1(IP(dst=target, options="\x00"*40, proto=200)/"XXXXYYYYYYYYYYYY",timeout=timeout,verbose=0)
scapy-2.0.0.10/scapy/sendrecv.py:def sr1(x,filter=None,iface=None, nofilter=0, *args,**kargs):

Selon la dernière ligne, sr1 est une fonction définie dans scapy.sendrecv . Quelqu'un devrait signaler un problème de documentation à l'auteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top