diff --git a/scapy/all.py b/scapy/all.py index 15dd3ca43adf01673140a43fc75d3bcd46e58b35..9d6e5b5d3f80e7ab619869b98242d468bcc23b18 100644 --- a/scapy/all.py +++ b/scapy/all.py @@ -7,41 +7,41 @@ Aggregate top level objects from all Scapy modules. """ -from base_classes import * -from config import * -from dadict import * -from data import * -from error import * -from themes import * -from arch import * - -from plist import * -from fields import * -from packet import * -from asn1fields import * -from asn1packet import * - -from utils import * -from route import * +from scapy.base_classes import * +from scapy.config import * +from scapy.dadict import * +from scapy.data import * +from scapy.error import * +from scapy.themes import * +from scapy.arch import * + +from scapy.plist import * +from scapy.fields import * +from scapy.packet import * +from scapy.asn1fields import * +from scapy.asn1packet import * + +from scapy.utils import * +from scapy.route import * if conf.ipv6_enabled: - from utils6 import * - from route6 import * -from sendrecv import * -from supersocket import * -from volatile import * -from as_resolvers import * + from scapy.utils6 import * + from scapy.route6 import * +from scapy.sendrecv import * +from scapy.supersocket import * +from scapy.volatile import * +from scapy.as_resolvers import * -from ansmachine import * -from automaton import * -from autorun import * +from scapy.ansmachine import * +from scapy.automaton import * +from scapy.autorun import * -from main import * +from scapy.main import * -from layers.all import * +from scapy.layers.all import * -from asn1.asn1 import * -from asn1.ber import * -from asn1.mib import * +from scapy.asn1.asn1 import * +from scapy.asn1.ber import * +from scapy.asn1.mib import * -from pipetool import * -from scapypipes import * +from scapy.pipetool import * +from scapy.scapypipes import * diff --git a/scapy/ansmachine.py b/scapy/ansmachine.py index d73bd421c323f5f17817e1b4855f9008ba1da824..7f570cbfc87703d71b6b090f5723cfd522f98a42 100644 --- a/scapy/ansmachine.py +++ b/scapy/ansmachine.py @@ -11,9 +11,9 @@ Answering machines. ## Answering machines ## ######################## -from sendrecv import send,sendp,sniff -from config import conf -from error import log_interactive +from scapy.sendrecv import send,sendp,sniff +from scapy.config import conf +from scapy.error import log_interactive class ReferenceAM(type): def __new__(cls, name, bases, dct): diff --git a/scapy/arch/__init__.py b/scapy/arch/__init__.py index 058f0f17913affa3cc4ecefdda9a2b72477706c0..389a22b2c8dc9f5d6ca798dbb33eb2a758ddce77 100644 --- a/scapy/arch/__init__.py +++ b/scapy/arch/__init__.py @@ -9,8 +9,10 @@ Operating system specific functionality. import sys,os,socket + from scapy.error import * import scapy.config +from scapy.pton_ntop import inet_pton try: from matplotlib import get_backend as matplotlib_get_backend @@ -79,19 +81,19 @@ ARM_64 = not WINDOWS and (os.uname()[4] == 'aarch64') if LINUX: - from linux import * + from scapy.arch.linux import * if scapy.config.conf.use_pcap or scapy.config.conf.use_dnet: - from pcapdnet import * + from scapy.arch.pcapdnet import * elif BSD: - from bsd import LOOPBACK_NAME - from unix import read_routes, read_routes6, in6_getifaddr + from scapy.arch.bsd import LOOPBACK_NAME + from scapy.arch.unix import read_routes, read_routes6, in6_getifaddr scapy.config.conf.use_pcap = True scapy.config.conf.use_dnet = True - from pcapdnet import * + from scapy.arch.pcapdnet import * elif SOLARIS: - from solaris import * + from scapy.arch.solaris import * elif WINDOWS: - from windows import * + from scapy.arch.windows import * if scapy.config.conf.iface is None: scapy.config.conf.iface = LOOPBACK_NAME diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py index 0b2b9b9e78e4562a2c31e1e8f19f7db3630475a6..a9908bfc798b4f40f474d86a943b0eba38079db8 100644 --- a/scapy/arch/linux.py +++ b/scapy/arch/linux.py @@ -11,6 +11,7 @@ from __future__ import with_statement import sys,os,struct,socket,time from select import select from fcntl import ioctl + import scapy.utils import scapy.utils6 from scapy.packet import Packet, Padding @@ -18,7 +19,7 @@ from scapy.config import conf from scapy.data import * from scapy.supersocket import SuperSocket import scapy.arch -from scapy.error import warning, Scapy_Exception +from scapy.error import warning, Scapy_Exception, log_interactive, log_loading from scapy.arch.common import get_if diff --git a/scapy/arch/pcapdnet.py b/scapy/arch/pcapdnet.py index 13ec1fae7fafbc7b11cc5ad64eb59eb7d91f7764..ae628bce73a648b5aea76703166527d8b152be3b 100755 --- a/scapy/arch/pcapdnet.py +++ b/scapy/arch/pcapdnet.py @@ -8,16 +8,16 @@ Packet sending and receiving with libdnet and libpcap/WinPcap. """ import time,struct,sys +import socket if not sys.platform.startswith("win"): from fcntl import ioctl + from scapy.data import * from scapy.config import conf from scapy.utils import warning, mac2str from scapy.supersocket import SuperSocket -from scapy.error import Scapy_Exception +from scapy.error import Scapy_Exception, log_loading import scapy.arch -import socket - if conf.use_winpcapy: #mostly code from https://github.com/phaethon/scapy translated to python2.X @@ -145,17 +145,17 @@ if conf.use_winpcapy: return pcap_datalink(self.pcap) def fileno(self): if sys.platform.startswith("win"): - error("Cannot get selectable PCAP fd on Windows") + log_loading.error("Cannot get selectable PCAP fd on Windows") return 0 return pcap_get_selectable_fd(self.pcap) def setfilter(self, f): filter_exp = create_string_buffer(f) if pcap_compile(self.pcap, byref(self.bpf_program), filter_exp, 0, -1) == -1: - error("Could not compile filter expression %s" % f) + log_loading.error("Could not compile filter expression %s" % f) return False else: if pcap_setfilter(self.pcap, byref(self.bpf_program)) == -1: - error("Could not install filter %s" % f) + log_loading.error("Could not install filter %s" % f) return False return True def setnonblock(self, i): diff --git a/scapy/arch/solaris.py b/scapy/arch/solaris.py index 3117076a277ab5a90a36c124f00f4bf3a24dc478..13d23497a23aa474d0baa7f9ed16faae08158c38 100644 --- a/scapy/arch/solaris.py +++ b/scapy/arch/solaris.py @@ -13,4 +13,4 @@ socket.IPPROTO_GRE = 47 LOOPBACK_NAME="lo0" -from unix import * +from scapy.arch.unix import * diff --git a/scapy/arch/unix.py b/scapy/arch/unix.py index 1449df3732347c5f7c22d9042a4fa0de814c830f..624844d4762716c528570d621a72b0f049c2436d 100644 --- a/scapy/arch/unix.py +++ b/scapy/arch/unix.py @@ -9,7 +9,9 @@ Common customizations for all Unix-like operating systems other than Linux import sys,os,struct,socket,time from fcntl import ioctl -from scapy.error import warning +import socket + +from scapy.error import warning, log_interactive import scapy.config import scapy.utils from scapy.utils6 import in6_getscope, construct_source_candidate_set @@ -17,8 +19,6 @@ from scapy.utils6 import in6_isvalid, in6_ismlladdr, in6_ismnladdr import scapy.arch from scapy.config import conf -import socket - ################## ## Routes stuff ## diff --git a/scapy/arch/windows/__init__.py b/scapy/arch/windows/__init__.py index b28551171bee2c7f05cecc8fe7fa668177664302..3884dac7d71579b41107175d3451aec69f4dcdda 100755 --- a/scapy/arch/windows/__init__.py +++ b/scapy/arch/windows/__init__.py @@ -19,7 +19,6 @@ from scapy.utils import atol, itom, inet_aton, inet_ntoa, PcapReader from scapy.base_classes import Gen, Net, SetGen import scapy.plist as plist from scapy.sendrecv import debug, srp1 -from scapy.layers.l2 import Ether, ARP from scapy.data import MTU, ETHER_BROADCAST, ETH_P_ARP conf.use_pcap = False @@ -211,7 +210,7 @@ def get_windows_if_list(): ] def get_ip_from_name(ifname, v6=False): - for descr, ipadrr in exec_query(['Get-WmiObject', + for descr, ipaddr in exec_query(['Get-WmiObject', 'Win32_NetworkAdapterConfiguration'], ['Description', 'IPAddress']): if descr == ifname.strip(): diff --git a/scapy/as_resolvers.py b/scapy/as_resolvers.py index 24573c209de83491f4b34479dbd6186f6f5eff1b..a1f3b7961320a204477151f5e1a2f2ec4cb43900 100644 --- a/scapy/as_resolvers.py +++ b/scapy/as_resolvers.py @@ -9,7 +9,7 @@ Resolve Autonomous Systems (AS). import socket -from config import conf +from scapy.config import conf class AS_resolver: server = None diff --git a/scapy/asn1/asn1.py b/scapy/asn1/asn1.py index 6823d45ba0e406d7685e8962cb714a75c10d2a46..55d7ab6b0f77cd90f882455588855d6e5b5c73f2 100644 --- a/scapy/asn1/asn1.py +++ b/scapy/asn1/asn1.py @@ -12,7 +12,7 @@ import random from datetime import datetime from scapy.config import conf from scapy.error import Scapy_Exception, warning -from scapy.volatile import RandField +from scapy.volatile import RandField, RandIP from scapy.utils import Enum_metaclass, EnumElement, binrepr class RandASN1Object(RandField): diff --git a/scapy/asn1/ber.py b/scapy/asn1/ber.py index f1cdcc64e9038a42a50bdccd7bdf4067ae33d38d..bfe74726eaf6c6742a52fa5f0dfcdf57bb336143 100644 --- a/scapy/asn1/ber.py +++ b/scapy/asn1/ber.py @@ -11,7 +11,7 @@ Basic Encoding Rules (BER) for ASN.1 from scapy.error import warning from scapy.utils import binrepr,inet_aton,inet_ntoa -from asn1 import ASN1_Decoding_Error,ASN1_Encoding_Error,ASN1_BadTag_Decoding_Error,ASN1_Codecs,ASN1_Class_UNIVERSAL,ASN1_Error,ASN1_DECODING_ERROR,ASN1_BADTAG +from scapy.asn1.asn1 import ASN1_Decoding_Error,ASN1_Encoding_Error,ASN1_BadTag_Decoding_Error,ASN1_Codecs,ASN1_Class_UNIVERSAL,ASN1_Error,ASN1_DECODING_ERROR,ASN1_BADTAG ################## ## BER encoding ## diff --git a/scapy/asn1fields.py b/scapy/asn1fields.py index 78d4399a873d3dba13aea900bb0731886337af50..7c37d14f92ffe8f6d2e4b16a54cc602109ae23fc 100644 --- a/scapy/asn1fields.py +++ b/scapy/asn1fields.py @@ -8,12 +8,13 @@ Classes that implement ASN.1 data structures. """ -from asn1.asn1 import * -from asn1.ber import * -from asn1.mib import * -from volatile import * -from base_classes import BasePacket -from utils import binrepr +from scapy.asn1.asn1 import * +from scapy.asn1.ber import * +from scapy.asn1.mib import * +from scapy.volatile import * +from scapy.base_classes import BasePacket +from scapy.utils import binrepr +from scapy import packet class ASN1F_badsequence(Exception): pass @@ -376,7 +377,7 @@ class ASN1F_SEQUENCE_OF(ASN1F_field): return self.i2m(pkt, s) def randval(self): - return fuzz(self.asn1pkt()) + return packet.fuzz(self.asn1pkt()) def __repr__(self): return "<%s %s>" % (self.__class__.__name__, self.name) @@ -496,7 +497,7 @@ class ASN1F_CHOICE(ASN1F_field): explicit_tag=exp) return BER_tagging_enc(s, explicit_tag=self.explicit_tag) def randval(self): - return RandChoice(*(fuzz(x()) for x in self.choices.itervalues())) + return RandChoice(*(packet.fuzz(x()) for x in self.choices.itervalues())) class ASN1F_PACKET(ASN1F_field): holds_packets = 1 @@ -579,7 +580,3 @@ class ASN1F_FLAGS(ASN1F_BIT_STRING): pretty_s = ", ".join(self.get_flags(pkt)) return pretty_s + " " + repr(x) return repr(x) - - -# This import must come last to avoid problems with cyclic dependencies -import packet diff --git a/scapy/asn1packet.py b/scapy/asn1packet.py index 1b83c3a3e2f29152208717fcf8006da5546b3e5c..5d7b56a39ff043e2274784600522fde960581581 100644 --- a/scapy/asn1packet.py +++ b/scapy/asn1packet.py @@ -7,7 +7,8 @@ Packet holding data in Abstract Syntax Notation (ASN.1). """ -from packet import * +from scapy.base_classes import Packet_metaclass +from scapy.packet import Packet class ASN1Packet_metaclass(Packet_metaclass): def __new__(cls, name, bases, dct): diff --git a/scapy/automaton.py b/scapy/automaton.py index 1dde1dacfbad1e159b904309d8f3cc2753e9f5f7..247fa9d1b8cd18011b207b8e97611c137291abbf 100644 --- a/scapy/automaton.py +++ b/scapy/automaton.py @@ -12,12 +12,12 @@ import types,itertools,time,os,sys,socket,traceback from select import select from collections import deque import thread -from config import conf -from utils import do_graph -from error import log_interactive -from plist import PacketList -from data import MTU -from supersocket import SuperSocket +from scapy.config import conf +from scapy.utils import do_graph +from scapy.error import log_interactive +from scapy.plist import PacketList +from scapy.data import MTU +from scapy.supersocket import SuperSocket class ObjectPipe: def __init__(self): diff --git a/scapy/autorun.py b/scapy/autorun.py index a45349497708b8dfec3fbb9b66b9dd43475b2ff8..b3b5c568e0edeb05ff0ec9ad8e5a0c384ad810b8 100644 --- a/scapy/autorun.py +++ b/scapy/autorun.py @@ -8,10 +8,10 @@ Run commands when the Scapy interpreter starts. """ import code,sys -from config import conf -from themes import * -from error import Scapy_Exception -from utils import tex_escape +from scapy.config import conf +from scapy.themes import * +from scapy.error import Scapy_Exception +from scapy.utils import tex_escape ######################### diff --git a/scapy/base_classes.py b/scapy/base_classes.py index 7575bf6bfaae82d01d229337347d303ca4818af3..a810c085cecac7c6a582957e744786a030fd7dbc 100644 --- a/scapy/base_classes.py +++ b/scapy/base_classes.py @@ -12,8 +12,6 @@ Generators and packet meta classes. ################ import re,random,socket -import config -import error import types class Gen(object): @@ -202,6 +200,7 @@ class Packet_metaclass(type): for f in newcls.fields_desc: if hasattr(f, "register_owner"): f.register_owner(newcls) + from scapy import config config.conf.layers.register(newcls) return newcls @@ -216,6 +215,7 @@ class Packet_metaclass(type): try: cls = cls.dispatch_hook(*args, **kargs) except: + from scapy import config if config.conf.debug_dissector: raise cls = config.conf.raw_layer @@ -238,7 +238,7 @@ class NewDefaultValues(Packet_metaclass): and it should still work. """ def __new__(cls, name, bases, dct): - from error import log_loading + from scapy.error import log_loading import traceback try: for tb in traceback.extract_stack()+[("??",-1,None,"")]: diff --git a/scapy/config.py b/scapy/config.py index 7f99e3d88b79f02d106084df98073871a7903c08..3f4fe8e6f0d1d64b92bf44e43f1a684aa121e82f 100755 --- a/scapy/config.py +++ b/scapy/config.py @@ -8,10 +8,11 @@ Implementation for of the configuration object. """ import os,time,socket,sys -from data import * -import base_classes -import themes -from error import log_scapy + +from scapy.data import * +from scapy import base_classes +from scapy import themes +from scapy.error import log_scapy ############ ## Config ## @@ -279,7 +280,7 @@ def _prompt_changer(attr,val): prompt = conf.prompt try: ct = val - if isinstance(ct, AnsiColorTheme) and ct.prompt(""): + if isinstance(ct, themes.AnsiColorTheme) and ct.prompt(""): ## ^A and ^B delimit invisible caracters for readline to count right. ## And we need ct.prompt() to do change something or else ^A and ^B will be ## displayed diff --git a/scapy/contrib/HomePlugAV.py b/scapy/contrib/HomePlugAV.py index 1717f442ab53f1ed6141b35285ba666f901995d5..704720f3f3e9d39e51148a314fc6864bdccbf35b 100644 --- a/scapy/contrib/HomePlugAV.py +++ b/scapy/contrib/HomePlugAV.py @@ -1,4 +1,7 @@ -from scapy.all import * +from scapy.packet import * +from scapy.fields import * +from scapy.layers.l2 import Ether + """ Copyright (C) HomePlugAV Layer for Scapy by FlUxIuS (Sebastien Dudek) """ diff --git a/scapy/contrib/bgp.py b/scapy/contrib/bgp.py index 61655e3712e9214dfc869a9a7dbe1117b0892a50..e6b86308e43fd3a836c0576e1f68bc443c8fab76 100644 --- a/scapy/contrib/bgp.py +++ b/scapy/contrib/bgp.py @@ -165,5 +165,6 @@ bind_layers( BGPHeader, BGPHeader, type=4) if __name__ == "__main__": + from scapy.main import interact interact(mydict=globals(), mybanner="BGP addon .05") diff --git a/scapy/contrib/carp.py b/scapy/contrib/carp.py index 3831aae47f60bc75dc4868845c1862382e67ccd2..aba858fcef49844ff9468600ecef09d2f5f91bbe 100644 --- a/scapy/contrib/carp.py +++ b/scapy/contrib/carp.py @@ -2,11 +2,12 @@ # scapy.contrib.description = CARP # scapy.contrib.status = loads +import struct, hmac, hashlib + from scapy.packet import * from scapy.layers.inet import IP from scapy.fields import BitField, ByteField, XShortField, IntField, XIntField -from scapy.utils import checksum -import struct, hmac, hashlib +from scapy.utils import checksum, inet_aton class CARP(Packet): name = "CARP" diff --git a/scapy/contrib/eigrp.uts b/scapy/contrib/eigrp.uts index 77379679392821234c69ba34144b1d54470ef265..c19a56b7db419f8f024bf98c185a43a18418eb2d 100644 --- a/scapy/contrib/eigrp.uts +++ b/scapy/contrib/eigrp.uts @@ -60,6 +60,7 @@ f = EigrpIP6Field("ipaddr", "2000::", length=128) f.i2len(None, "") == 16 = EIGRPGuessPayloadClass function: Return Parameters TLV +from scapy.contrib.eigrp import _EIGRPGuessPayloadClass isinstance(_EIGRPGuessPayloadClass("\x00\x01"), EIGRPParam) = EIGRPGuessPayloadClass function: Return Authentication Data TLV diff --git a/scapy/contrib/gsm_um.py b/scapy/contrib/gsm_um.py index 923d80b79d321068d54941f993f0e44088311b67..36b6a4111198b0d1c668cbfb2ab3dfbedd2f3aef 100644 --- a/scapy/contrib/gsm_um.py +++ b/scapy/contrib/gsm_um.py @@ -35,7 +35,9 @@ from types import StringType #from time import sleep import socket logging.getLogger("scapy").setLevel(1) -from scapy.all import * + +from scapy.packet import * +from scapy.fields import * # This method is intended to send gsm air packets. It uses a unix domain # socket. It opens a socket, sends the parameter to the socket and @@ -2229,7 +2231,7 @@ def startCc(CallControlCapabilities_presence=0): packet = a / b if CallControlCapabilities_presence is 1: c = CallControlCapabilitiesHdr(ieiCCC=0x15, eightBitCCC=0x0) - packet = paclet / c + packet = packet / c return packet @@ -12789,4 +12791,5 @@ class AttachType(Packet): if __name__ == "__main__": + from scapy.main import interact interact(mydict=globals(), mybanner="Scapy GSM-UM (Air) Addon") diff --git a/scapy/contrib/icmp_extensions.py b/scapy/contrib/icmp_extensions.py index d86ac2ce4e8242461002cd43c275c7e01412203a..56820898d65356203e778288ee2267fc9cf90e3c 100644 --- a/scapy/contrib/icmp_extensions.py +++ b/scapy/contrib/icmp_extensions.py @@ -1,8 +1,10 @@ -from scapy.contrib.mpls import MPLS +import scapy +from scapy.packet import Packet, bind_layers from scapy.fields import * +from scapy.layers.inet import IP, ICMP from scapy.layers.inet6 import IP6Field -from scapy.packet import Packet, bind_layers from scapy.utils import warning +from scapy.contrib.mpls import MPLS class ICMPExtensionObject(Packet): diff --git a/scapy/contrib/igmp.py b/scapy/contrib/igmp.py index cc3dadc8c6fe9743227a8f011281efc19815dd8b..fe7b225bdd54f37083ae5f6d39f74115ba6e1041 100644 --- a/scapy/contrib/igmp.py +++ b/scapy/contrib/igmp.py @@ -7,7 +7,9 @@ # TODO: scapy 2 has function getmacbyip, maybe it can replace igmpize # at least from the MAC layer -from scapy.all import * +from scapy.packet import * +from scapy.fields import * +from scapy.layers.inet import * #-------------------------------------------------------------------------- def isValidMCAddr(ip): diff --git a/scapy/contrib/igmpv3.py b/scapy/contrib/igmpv3.py index dfdcf3a1a9061fb5111d8f9b71eb83e66115f889..dd41f992a20f8b32f54d2dcb784dabf34efaced9 100644 --- a/scapy/contrib/igmpv3.py +++ b/scapy/contrib/igmpv3.py @@ -6,6 +6,9 @@ # scapy.contrib.status = loads from scapy.packet import * +from scapy.fields import * +from scapy.layers.inet import * +from scapy.contrib.igmp import isValidMCAddr """ Based on the following references http://www.iana.org/assignments/igmp-type-numbers @@ -25,7 +28,6 @@ from scapy.packet import * # #import sys, socket, struct, time -from scapy.all import * print "IGMPv3 is still under development - Nov 2010" diff --git a/scapy/contrib/ikev2.py b/scapy/contrib/ikev2.py index 07d4dbb2a1661675406352f045d97a4cf61e8ad3..9b3f394ef4c21d3ffc2156551ba35bc74537e2a4 100644 --- a/scapy/contrib/ikev2.py +++ b/scapy/contrib/ikev2.py @@ -5,17 +5,17 @@ # scapy.contrib.description = IKEv2 # scapy.contrib.status = loads -from scapy.all import * import logging +import struct ## Modified from the original ISAKMP code by Yaron Sheffer <yaronf.ietf@gmail.com>, June 2010. -import struct from scapy.packet import * from scapy.fields import * from scapy.ansmachine import * from scapy.layers.inet import IP,UDP +from scapy.layers.isakmp import ISAKMP from scapy.sendrecv import sr # see http://www.iana.org/assignments/ikev2-parameters for details @@ -358,4 +358,5 @@ def ikev2scan(ip): # conf.debug_dissector = 1 if __name__ == "__main__": + from scapy.main import interact interact(mydict=globals(), mybanner="IKEv2 alpha-level protocol implementation") diff --git a/scapy/contrib/isis.py b/scapy/contrib/isis.py index 34325657db6e071f30cdccd243591242d54f6562..c37dd163d8db1294ac8c6c5880a0d553985d53a7 100644 --- a/scapy/contrib/isis.py +++ b/scapy/contrib/isis.py @@ -46,19 +46,13 @@ """ import struct +import random from scapy.config import conf -from scapy.fields import Field, FlagsField, ByteField, ByteEnumField, \ - FieldLenField, ShortField, PacketListField, XIntField, \ - XShortField, ConditionalField, ThreeBytesField, IntField, BitField, IPField, \ - FieldListField, MACField, BitFieldLenField, IPPrefixField, IP6PrefixField,\ - BoundStrLenField +from scapy.fields import * +from scapy.packet import * from scapy.layers.clns import network_layer_protocol_ids, register_cln_protocol from scapy.layers.inet6 import IP6ListField -from scapy.packet import Packet, bind_layers -from scapy.utils import fletcher16_checkbytes -from scapy.volatile import RandString, RandByte -import random EXT_VERSION = "v0.0.1" @@ -772,4 +766,4 @@ bind_layers(ISIS_CommonHdr, ISIS_L2_LSP, hdrlen=27, pdutype=20) bind_layers(ISIS_CommonHdr, ISIS_L1_CSNP, hdrlen=33, pdutype=24) bind_layers(ISIS_CommonHdr, ISIS_L2_CSNP, hdrlen=33, pdutype=25) bind_layers(ISIS_CommonHdr, ISIS_L1_PSNP, hdrlen=17, pdutype=26) -bind_layers(ISIS_CommonHdr, ISIS_L2_PSNP, hdrlen=17, pdutype=27) \ No newline at end of file +bind_layers(ISIS_CommonHdr, ISIS_L2_PSNP, hdrlen=17, pdutype=27) diff --git a/scapy/contrib/modbus.py b/scapy/contrib/modbus.py index 8f4e83dac019490385927f5688b54ad50e96ea4d..a6be7ff50fe1ab7314badf30285f17134b62bcd1 100644 --- a/scapy/contrib/modbus.py +++ b/scapy/contrib/modbus.py @@ -16,7 +16,9 @@ # Copyright (C) 2016 Arthur Gervais, Ken LE PRADO, Sébastien Mainand -from scapy.all import * +from scapy.packet import * +from scapy.fields import * +from scapy.layers.inet import * # TODO: implement serial specific function codes diff --git a/scapy/contrib/mpls.py b/scapy/contrib/mpls.py index 7f1f85a3e7b6d739b6724c90fb58ff63745fccfc..640a0c57239e903a0b488589de58d0ae12a8e4a9 100644 --- a/scapy/contrib/mpls.py +++ b/scapy/contrib/mpls.py @@ -3,10 +3,11 @@ # scapy.contrib.description = MPLS # scapy.contrib.status = loads -from scapy.packet import Packet,bind_layers +from scapy.packet import Packet, bind_layers, Padding from scapy.fields import BitField,ByteField -from scapy.layers.l2 import Ether -from scapy.layers.l2 import GRE +from scapy.layers.inet import IP +from scapy.layers.inet6 import IPv6 +from scapy.layers.l2 import Ether, GRE class MPLS(Packet): name = "MPLS" diff --git a/scapy/contrib/openflow.py b/scapy/contrib/openflow.py index 3e5fcf73281471fa8dde592b43091e5342285129..dd11630acfd95fbb7c618996cf18c63631a58aa3 100755 --- a/scapy/contrib/openflow.py +++ b/scapy/contrib/openflow.py @@ -12,8 +12,9 @@ # scapy.contrib.status = loads import struct -from scapy.all import * -from scapy.utils import binrepr +from scapy.fields import * +from scapy.layers.l2 import * +from scapy.layers.inet import * ### If prereq_autocomplete is True then match prerequisites will be ### automatically handled. See OFPMatch class. diff --git a/scapy/contrib/openflow3.py b/scapy/contrib/openflow3.py index 5df721adab6f75220e8639c4d2bbdec5b42e355f..9ef88587def5ea291872e34b3176f80911688122 100755 --- a/scapy/contrib/openflow3.py +++ b/scapy/contrib/openflow3.py @@ -12,7 +12,9 @@ # scapy.contrib.status = loads import struct -from scapy.all import * +from scapy.fields import * +from scapy.layers.l2 import * +from scapy.layers.inet import * ### If prereq_autocomplete is True then match prerequisites will be ### automatically handled. See OFPMatch class. diff --git a/scapy/contrib/ospf.py b/scapy/contrib/ospf.py index 66c79b3ef1b83b3cbae24c59357d472b82ef59cf..7b10cea6f1d8b6104253e93ddce10567601c255f 100644 --- a/scapy/contrib/ospf.py +++ b/scapy/contrib/ospf.py @@ -24,7 +24,10 @@ GNU General Public License for more details. """ -from scapy.all import * +from scapy.packet import * +from scapy.fields import * +from scapy.layers.inet import * +from scapy.layers.inet6 import * EXT_VERSION = "v0.9.2" @@ -746,4 +749,5 @@ DestIP6Field.bind_addr(OSPFv3_Hdr, "ff02::5") if __name__ == "__main__": + from scapy.main import interact interact(mydict=globals(), mybanner="OSPF extension %s" % EXT_VERSION) diff --git a/scapy/contrib/send.py b/scapy/contrib/send.py index 23f8c1cdcd45a98019b96050992799bb18499d92..676158a4373d2bec7443984cde3f90afe4897966 100644 --- a/scapy/contrib/send.py +++ b/scapy/contrib/send.py @@ -8,9 +8,11 @@ # scapy.contrib.description = SEND # scapy.contrib.status = loads +import socket + from scapy.packet import * from scapy.fields import * -from scapy.layers.inet6 import icmp6typescls, _ICMPv6NDGuessPayload +from scapy.layers.inet6 import icmp6typescls, _ICMPv6NDGuessPayload, Net6 send_icmp6typescls = { 11: "ICMPv6NDOptCGA", 12: "ICMPv6NDOptRsaSig", diff --git a/scapy/contrib/skinny.py b/scapy/contrib/skinny.py index 41cbaa0afb49abe58b60fd0aaf3b7370e9bb84fa..1ed02e42f31ef4bbc6ae4f7fc97e7955dc7049a5 100644 --- a/scapy/contrib/skinny.py +++ b/scapy/contrib/skinny.py @@ -22,8 +22,9 @@ ## ## ############################################################################# -from scapy.all import * -import __builtin__ +from scapy.packet import * +from scapy.fields import * +from scapy.layers.inet import TCP ##################################################################### # Helpers and constants @@ -474,7 +475,7 @@ class Skinny(Packet): name="Skinny" fields_desc = [ LEIntField("len", None), LEIntField("res",0), - LEIntEnumField("msg",0, skinny_messages) ] + LEIntEnumField("msg",0, skinny_messages_cls) ] def post_build(self, pkt, p): if self.len is None: @@ -495,5 +496,6 @@ bind_layers(TCP, Skinny, { "dport": 2000 } ) bind_layers(TCP, Skinny, { "sport": 2000 } ) if __name__ == "__main__": + from scapy.main import interact interact(mydict=globals(),mybanner="Welcome to Skinny add-on") diff --git a/scapy/contrib/spbm.py b/scapy/contrib/spbm.py index efd4848823e0c0ae8a1d60c06f962a5ed1bc11fb..44ae942d3247791e3ec7989331f5fa2869295367 100644 --- a/scapy/contrib/spbm.py +++ b/scapy/contrib/spbm.py @@ -19,8 +19,8 @@ # spb_example = backboneEther/backboneDot1Q/backboneServiceID/customerEther/customerDot1Q/customerIP/customerUDP/"Payload" from scapy.packet import Packet, bind_layers -from scapy.layers.l2 import Ether from scapy.fields import * +from scapy.layers.l2 import Ether, Dot1Q class SPBM(Packet): name = "SPBM" @@ -35,4 +35,4 @@ class SPBM(Packet): return self.sprintf("SPBM (isid=%SPBM.isid%") bind_layers(Dot1Q, SPBM, type=0x88e7) -bind_layers(SPBM, Ether) \ No newline at end of file +bind_layers(SPBM, Ether) diff --git a/scapy/contrib/vtp.py b/scapy/contrib/vtp.py index af5c282366a9a6a812f7f8b9e79c4793bdbc29e0..0ebb17d8227a1a570d604e1aac7cfc01fefe9b67 100644 --- a/scapy/contrib/vtp.py +++ b/scapy/contrib/vtp.py @@ -42,7 +42,9 @@ http://www.cisco.com/en/US/tech/tk389/tk689/technologies_tech_note09186a0080094c52.shtml """ -from scapy.all import * +from scapy.packet import * +from scapy.fields import * +from scapy.layers.l2 import * _VTP_VLAN_TYPE = { 1 : 'Ethernet', @@ -168,4 +170,5 @@ class VTP(Packet): bind_layers(SNAP, VTP, code=0x2003) if __name__ == '__main__': + from scapy.main import interact interact(mydict=globals(), mybanner="VTP") diff --git a/scapy/dadict.py b/scapy/dadict.py index f50ccfb1134f10bfa221bc3685c34c1491fae59e..62addb31057236b65c59aee7eda798910a31e9ca 100644 --- a/scapy/dadict.py +++ b/scapy/dadict.py @@ -7,7 +7,7 @@ Direct Access dictionary. """ -from error import Scapy_Exception +from scapy.error import Scapy_Exception ############################### ## Direct Access dictionnary ## diff --git a/scapy/data.py b/scapy/data.py index 643ba964471b0fe3cae442236042e7069da69a75..890b00af731584df723823f7204c031948edf29b 100644 --- a/scapy/data.py +++ b/scapy/data.py @@ -8,8 +8,8 @@ Global variables and functions for handling external data sets. """ import os,sys,re -from dadict import DADict -from error import log_loading +from scapy.dadict import DADict +from scapy.error import log_loading ############ ## Consts ## diff --git a/scapy/error.py b/scapy/error.py index 29ebc1ba036c60485723fb9793e416a30f15dd3e..ee879d53c6a7fcf1393018bc7d1deb1b5420f239 100644 --- a/scapy/error.py +++ b/scapy/error.py @@ -21,7 +21,7 @@ class ScapyFreqFilter(logging.Filter): logging.Filter.__init__(self) self.warning_table = {} def filter(self, record): - from config import conf + from scapy.config import conf wt = conf.warning_threshold if wt > 0: stk = traceback.extract_stack() diff --git a/scapy/fields.py b/scapy/fields.py index e7a2ed5593ae8ae6e6a0b08242796456c67b4764..0a92cef86350ea464e0f3b0ee45a9e6f7c509068 100644 --- a/scapy/fields.py +++ b/scapy/fields.py @@ -8,11 +8,11 @@ Fields: basic data structures that make up parts of packets. """ import struct,copy,socket -from config import conf -from volatile import * -from data import * -from utils import * -from base_classes import BasePacket, Gen, Net, Field_metaclass +from scapy.config import conf +from scapy.volatile import * +from scapy.data import * +from scapy.utils import * +from scapy.base_classes import BasePacket, Gen, Net, Field_metaclass ############ @@ -630,7 +630,7 @@ class FieldLenField(Field): self.count_of = count_of self.adjust = adjust if fld is not None: - FIELD_LENGTH_MANAGEMENT_DEPRECATION(self.__class__.__name__) + #FIELD_LENGTH_MANAGEMENT_DEPRECATION(self.__class__.__name__) self.length_of = fld def i2m(self, pkt, x): if x is None: diff --git a/scapy/layers/bluetooth.py b/scapy/layers/bluetooth.py index db91e5dad9700bde5e6086987fe7c3d004656e30..9d7e496365caee7f02fabadc9e144625a9c6c596 100644 --- a/scapy/layers/bluetooth.py +++ b/scapy/layers/bluetooth.py @@ -10,13 +10,14 @@ Bluetooth layers, sockets and send/receive functions. import socket,struct,array from ctypes import * +from select import select from scapy.config import conf from scapy.packet import * from scapy.fields import * from scapy.supersocket import SuperSocket +from scapy.sendrecv import sndrcv from scapy.data import MTU -from select import select ########## # Fields # diff --git a/scapy/layers/dhcp.py b/scapy/layers/dhcp.py index ebd8f67c50e3d87965c13e701dad0223a5b26b5b..612d72f75cff832285058f295756e39b78258e7b 100644 --- a/scapy/layers/dhcp.py +++ b/scapy/layers/dhcp.py @@ -12,13 +12,14 @@ import struct from scapy.packet import * from scapy.fields import * from scapy.ansmachine import * +from scapy.data import * from scapy.layers.inet import UDP,IP from scapy.layers.l2 import Ether from scapy.base_classes import Net from scapy.volatile import RandField from scapy.arch import get_if_raw_hwaddr -from scapy.sendrecv import srp1 +from scapy.sendrecv import * dhcpmagic="c\x82Sc" diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py index 32f28d6ebf2f31b398239c1f6cc89c2f4990b324..40ecedc1f551666185997ce53f8b3863239ed78b 100644 --- a/scapy/layers/dhcp6.py +++ b/scapy/layers/dhcp6.py @@ -11,11 +11,15 @@ DHCPv6: Dynamic Host Configuration Protocol for IPv6. [RFC 3315] """ import socket + from scapy.packet import * from scapy.fields import * +from scapy.data import * from scapy.utils6 import * +from scapy.themes import Color from scapy.layers.inet6 import * from scapy.ansmachine import AnsweringMachine +from scapy.sendrecv import * ############################################################################# # Helpers ## @@ -657,57 +661,6 @@ class DHCP6OptReconfAccept(_DHCP6OptGuessPayload): # RFC sect 22.20 fields_desc = [ ShortEnumField("optcode", 20, dhcp6opts), ShortField("optlen", 0)] -# As required in Sect 8. of RFC 3315, Domain Names must be encoded as -# described in section 3.1 of RFC 1035 -# XXX Label should be at most 63 octets in length : we do not enforce it -# Total length of domain should be 255 : we do not enforce it either -class DomainNameListField(StrLenField): - __slots__ = ["padded"] - islist = 1 - padded_unit = 8 - - def __init__(self, name, default, fld=None, length_from=None, padded=False): - self.padded = padded - StrLenField.__init__(self, name, default, fld, length_from) - - def i2len(self, pkt, x): - return len(self.i2m(pkt, x)) - - def m2i(self, pkt, x): - res = [] - while x: - # Get a name until \x00 is reached - cur = [] - while x and x[0] != '\x00': - l = ord(x[0]) - cur.append(x[1:l+1]) - x = x[l+1:] - if self.padded: - # Discard following \x00 in padded mode - if len(cur): - res.append(".".join(cur) + ".") - else: - # Store the current name - res.append(".".join(cur) + ".") - if x and x[0] == '\x00': - x = x[1:] - return res - - def i2m(self, pkt, x): - def conditionalTrailingDot(z): - if z and z[-1] == '\x00': - return z - return z+'\x00' - # Build the encode names - tmp = map(lambda y: map((lambda z: chr(len(z))+z), y.split('.')), x) - ret_string = "".join(map(lambda x: conditionalTrailingDot("".join(x)), tmp)) - - # In padded mode, add some \x00 bytes - if self.padded and not len(ret_string) % self.padded_unit == 0: - ret_string += "\x00" * (self.padded_unit - len(ret_string) % self.padded_unit) - - return ret_string - class DHCP6OptSIPDomains(_DHCP6OptGuessPayload): #RFC3319 name = "DHCP6 Option - SIP Servers Domain Name List" fields_desc = [ ShortEnumField("optcode", 21, dhcp6opts), diff --git a/scapy/layers/dns.py b/scapy/layers/dns.py index ac7d4ad58124eed26dd141583f968b0a11234e86..2532633a41d2e005bce4282c78ba3c576bbe5f99 100644 --- a/scapy/layers/dns.py +++ b/scapy/layers/dns.py @@ -9,9 +9,11 @@ DNS: Domain Name System. import socket,struct +from scapy.config import conf from scapy.packet import * from scapy.fields import * from scapy.ansmachine import * +from scapy.sendrecv import sr1 from scapy.layers.inet import IP, DestIPField, UDP from scapy.layers.inet6 import DestIP6Field diff --git a/scapy/layers/dot11.py b/scapy/layers/dot11.py index df91e104516b7a1ff5307e72852107d75bbca622..27e84dbcff885b21df9b99f908da64fb6dba0b73 100644 --- a/scapy/layers/dot11.py +++ b/scapy/layers/dot11.py @@ -8,11 +8,16 @@ Wireless LAN according to IEEE 802.11. """ import re,struct +from zlib import crc32 +from scapy.config import conf +from scapy.data import * from scapy.packet import * from scapy.fields import * +from scapy.ansmachine import * from scapy.plist import PacketList from scapy.layers.l2 import * +from scapy.layers.inet import IP, TCP try: @@ -441,11 +446,11 @@ iwconfig wlan0 mode managed p /= self.replace q.ID += 1 q.getlayer(TCP).flags="RA" - q.getlayer(TCP).seq+=len(replace) + q.getlayer(TCP).seq+=len(self.replace) return [p,q] def print_reply(self): - print p.sprintf("Sent %IP.src%:%IP.sport% > %IP.dst%:%TCP.dport%") + print self.sprintf("Sent %IP.src%:%IP.sport% > %IP.dst%:%TCP.dport%") def send_reply(self, reply): sendp(reply, iface=self.ifto, **self.optsend) diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py index cf5cbbff4a962753fb6489e4e40bc20d88f809f0..7f080acb20d0f258ef392085a05ad03bba2a09d3 100644 --- a/scapy/layers/inet.py +++ b/scapy/layers/inet.py @@ -11,7 +11,9 @@ import os,time,struct,re,socket,new from select import select from collections import defaultdict -from scapy.utils import checksum +from scapy.utils import checksum,inet_aton,inet_ntoa +from scapy.base_classes import Gen +from scapy.data import * from scapy.layers.l2 import * from scapy.config import conf from scapy.fields import * @@ -20,6 +22,7 @@ from scapy.volatile import * from scapy.sendrecv import sr,sr1,srp1 from scapy.plist import PacketList,SndRcvList from scapy.automaton import Automaton,ATMT +from scapy.error import warning import scapy.as_resolvers diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py index d64496cc9880f47ab90e78ee0065ab55e6728b4b..ec2c94a13c25aed548cfb8c3fec87173599a5922 100644 --- a/scapy/layers/inet6.py +++ b/scapy/layers/inet6.py @@ -24,7 +24,9 @@ IPv6 (Internet Protocol v6). """ +import random import socket +import sys if not socket.has_ipv6: raise socket.error("can't use AF_INET6, IPv6 is disabled") if not hasattr(socket, "IPPROTO_IPV6"): @@ -35,8 +37,8 @@ if not hasattr(socket, "IPPROTO_IPIP"): socket.IPPROTO_IPIP = 4 from scapy.config import conf -from scapy.layers.l2 import * -from scapy.layers.inet import * +from scapy.base_classes import * +from scapy.data import * from scapy.fields import * from scapy.packet import * from scapy.volatile import * @@ -45,6 +47,10 @@ from scapy.as_resolvers import AS_resolver_riswhois from scapy.supersocket import SuperSocket,L3RawSocket from scapy.arch import * from scapy.utils6 import * +from scapy.layers.l2 import * +from scapy.layers.inet import * +from scapy.utils import inet_pton, inet_ntop, strxor +from scapy.error import warning ############################################################################# @@ -1649,7 +1655,7 @@ class ICMPv6NDOptMAP(_ICMPv6NDGuessPayload, Packet): # RFC 4140 IP6Field("addr", "::") ] -class IP6PrefixField(IP6Field): +class _IP6PrefixField(IP6Field): __slots__ = ["length_from"] def __init__(self, name, default): IP6Field.__init__(self, name, default) @@ -1696,7 +1702,7 @@ class ICMPv6NDOptRouteInfo(_ICMPv6NDGuessPayload, Packet): # RFC 4191 BitField("prf",0,2), BitField("res2",0,3), IntField("rtlifetime", 0xffffffff), - IP6PrefixField("prefix", None) ] + _IP6PrefixField("prefix", None) ] class ICMPv6NDOptRDNSS(_ICMPv6NDGuessPayload, Packet): # RFC 5006 name = "ICMPv6 Neighbor Discovery Option - Recursive DNS Server Option" @@ -1714,7 +1720,57 @@ class ICMPv6NDOptEFA(_ICMPv6NDGuessPayload, Packet): # RFC 5175 (prev. 5075) ByteField("len", 1), BitField("res", 0, 48) ] -from scapy.layers.dhcp6 import DomainNameListField +# As required in Sect 8. of RFC 3315, Domain Names must be encoded as +# described in section 3.1 of RFC 1035 +# XXX Label should be at most 63 octets in length : we do not enforce it +# Total length of domain should be 255 : we do not enforce it either +class DomainNameListField(StrLenField): + __slots__ = ["padded"] + islist = 1 + padded_unit = 8 + + def __init__(self, name, default, fld=None, length_from=None, padded=False): + self.padded = padded + StrLenField.__init__(self, name, default, fld, length_from) + + def i2len(self, pkt, x): + return len(self.i2m(pkt, x)) + + def m2i(self, pkt, x): + res = [] + while x: + # Get a name until \x00 is reached + cur = [] + while x and x[0] != '\x00': + l = ord(x[0]) + cur.append(x[1:l+1]) + x = x[l+1:] + if self.padded: + # Discard following \x00 in padded mode + if len(cur): + res.append(".".join(cur) + ".") + else: + # Store the current name + res.append(".".join(cur) + ".") + if x and x[0] == '\x00': + x = x[1:] + return res + + def i2m(self, pkt, x): + def conditionalTrailingDot(z): + if z and z[-1] == '\x00': + return z + return z+'\x00' + # Build the encode names + tmp = map(lambda y: map((lambda z: chr(len(z))+z), y.split('.')), x) + ret_string = "".join(map(lambda x: conditionalTrailingDot("".join(x)), tmp)) + + # In padded mode, add some \x00 bytes + if self.padded and not len(ret_string) % self.padded_unit == 0: + ret_string += "\x00" * (self.padded_unit - len(ret_string) % self.padded_unit) + + return ret_string + class ICMPv6NDOptDNSSL(_ICMPv6NDGuessPayload, Packet): # RFC 6106 name = "ICMPv6 Neighbor Discovery Option - DNS Search List Option" fields_desc = [ ByteField("type", 31), diff --git a/scapy/layers/isakmp.py b/scapy/layers/isakmp.py index 4d96a6268cdebf20885769c25232854179719f09..17e538ddcdc91229fb464c0bfc713e4f3680f06a 100644 --- a/scapy/layers/isakmp.py +++ b/scapy/layers/isakmp.py @@ -8,6 +8,7 @@ ISAKMP (Internet Security Association and Key Management Protocol). """ import struct +from scapy.config import conf from scapy.packet import * from scapy.fields import * from scapy.ansmachine import * diff --git a/scapy/layers/l2.py b/scapy/layers/l2.py index 5ddc803b47d6a4a9c5f3f21c153f91245e425949..db4793141c9f7b8fe9979067b7ad989e0f8c4cab 100644 --- a/scapy/layers/l2.py +++ b/scapy/layers/l2.py @@ -11,12 +11,14 @@ import os, struct, time, socket from scapy.base_classes import Net from scapy.config import conf +from scapy.data import * from scapy.packet import * from scapy.ansmachine import * from scapy.plist import SndRcvList from scapy.fields import * -from scapy.sendrecv import srp,srp1 +from scapy.sendrecv import * from scapy.arch import get_if_hwaddr +from scapy.utils import inet_ntoa, inet_aton diff --git a/scapy/layers/sctp.py b/scapy/layers/sctp.py index 49d441226ca2b0230fd7356a1c09662a540da411..ff0b0946efe0bf8355be7d5b7af04807b3d7b8bc 100644 --- a/scapy/layers/sctp.py +++ b/scapy/layers/sctp.py @@ -10,6 +10,7 @@ SCTP (Stream Control Transmission Protocol). import struct +from scapy.config import conf from scapy.packet import * from scapy.fields import * from scapy.layers.inet import IP diff --git a/scapy/layers/snmp.py b/scapy/layers/snmp.py index 2c58825036b0351a94e187aba23db7cd43127d69..37bcdfe13d0ade11ff70f7a43c44f26e81cff4f9 100644 --- a/scapy/layers/snmp.py +++ b/scapy/layers/snmp.py @@ -7,9 +7,14 @@ SNMP (Simple Network Management Protocol). """ +from scapy.packet import * from scapy.asn1packet import * from scapy.asn1fields import * -from scapy.layers.inet import UDP +from scapy.asn1.asn1 import * +from scapy.asn1.ber import * +from scapy.sendrecv import sr1 +from scapy.volatile import * +from scapy.layers.inet import UDP, IP, ICMP ########## ## SNMP ## diff --git a/scapy/layers/tftp.py b/scapy/layers/tftp.py index 9a2aa0a5c21f4a4ae06bab9171770f147f1a27ce..4727108b2190afd0b52aaed88ebf2a702a4f223b 100644 --- a/scapy/layers/tftp.py +++ b/scapy/layers/tftp.py @@ -11,7 +11,7 @@ import os,random from scapy.packet import * from scapy.fields import * from scapy.automaton import * -from scapy.layers.inet import UDP +from scapy.layers.inet import UDP, IP diff --git a/scapy/layers/x509.py b/scapy/layers/x509.py index a5ca38ccbeb6253c9f577e869f0fbcd1fe2e0812..ee14bc43d24ced4e00f6551d64bcb1df30e07171 100644 --- a/scapy/layers/x509.py +++ b/scapy/layers/x509.py @@ -8,9 +8,13 @@ X.509 certificates. """ +from scapy.asn1.asn1 import * +from scapy.asn1.ber import * from scapy.asn1packet import * from scapy.asn1fields import * +from scapy.packet import Packet from scapy.fields import PacketField +from scapy.volatile import * class ASN1P_OID(ASN1_Packet): ASN1_codec = ASN1_Codecs.BER diff --git a/scapy/main.py b/scapy/main.py index 63c615c11db1ad1efd7b1ebdce314257163aa217..4337cdd5ebf8547b2504bc2df326b4cfc07d3257 100644 --- a/scapy/main.py +++ b/scapy/main.py @@ -10,9 +10,13 @@ Main module for interactive startup. from __future__ import generators import os,sys import glob +import types +import gzip +import cPickle import __builtin__ -from error import * -import utils + +from scapy.error import * +from scapy import utils def _probe_config_file(cf): @@ -44,8 +48,8 @@ def _usage(): sys.exit(0) -from config import conf -from themes import DefaultTheme +from scapy.config import conf +from scapy.themes import DefaultTheme ###################### @@ -178,8 +182,8 @@ def scapy_write_history_file(readline): def interact(mydict=None,argv=None,mybanner=None,loglevel=20): global session - import code,sys,cPickle,os,getopt,re - from config import conf + import code,sys,os,getopt,re + from scapy.config import conf conf.interactive = True if loglevel is not None: conf.logLevel=loglevel @@ -220,6 +224,7 @@ def interact(mydict=None,argv=None,mybanner=None,loglevel=20): object = eval(expr) except: object = eval(expr, session) + from scapy.packet import Packet, Packet_metaclass if isinstance(object, Packet) or isinstance(object, Packet_metaclass): words = filter(lambda x: x[0]!="_",dir(object)) words += [x.name for x in object.fields_desc] diff --git a/scapy/modules/nmap.py b/scapy/modules/nmap.py index 4ff1a56a68c22b2c82cc6a4fac1992a6315d59cb..0eeafdbdaa171df98b97e7323f4d60fbbca0c15c 100644 --- a/scapy/modules/nmap.py +++ b/scapy/modules/nmap.py @@ -12,6 +12,9 @@ import os from scapy.data import KnowledgeBase from scapy.config import conf from scapy.arch import WINDOWS +from scapy.error import warning +from scapy.layers.inet import IP, TCP, UDP, ICMP, UDPerror, IPerror +from scapy.sendrecv import sr if WINDOWS: diff --git a/scapy/modules/p0f.py b/scapy/modules/p0f.py index 2585adb6bc418ea8a17e6837a293f8aaa476131a..a93482d78bc7cd0a5a13f76e1874ea84647dfb3f 100644 --- a/scapy/modules/p0f.py +++ b/scapy/modules/p0f.py @@ -7,10 +7,19 @@ Clone of p0f passive OS fingerprinting """ +import time +import struct +import os +import socket +import random + from scapy.data import KnowledgeBase from scapy.config import conf from scapy.layers.inet import IP, TCP, TCPOptions -from scapy.packet import NoPayload +from scapy.packet import NoPayload, Packet +from scapy.error import warning, Scapy_Exception, log_runtime +from scapy.volatile import RandInt, RandByte, RandChoice, RandNum, RandShort, RandString +from scapy.sendrecv import sniff conf.p0f_base ="/etc/p0f/p0f.fp" conf.p0fa_base ="/etc/p0f/p0fa.fp" diff --git a/scapy/modules/queso.py b/scapy/modules/queso.py index ebc5486e13878b1a853612707ae910c5db0264e4..9c38f42735e3c27a6b92186d7b3e5755b162164d 100644 --- a/scapy/modules/queso.py +++ b/scapy/modules/queso.py @@ -10,6 +10,9 @@ Clone of queso OS fingerprinting from scapy.data import KnowledgeBase from scapy.config import conf from scapy.layers.inet import IP,TCP +from scapy.error import warning +from scapy.volatile import RandInt +from scapy.sendrecv import sr #from conf.queso_base ="/etc/queso.conf" diff --git a/scapy/modules/voip.py b/scapy/modules/voip.py index de9ed1d3553b4ce679314f6d169285e13d0a2e99..52c7893daee017d738e8f6c076df6122ab2e8d3b 100644 --- a/scapy/modules/voip.py +++ b/scapy/modules/voip.py @@ -94,6 +94,7 @@ def voip_play1(s1,list=None,**kargs): return ip=pkt.getlayer(IP) if s1 in [ip.src, ip.dst]: + from scapy.config import conf dsp.write(pkt.getlayer(conf.raw_layer).load[12:]) try: if list is None: @@ -137,6 +138,7 @@ def voip_play3(lst=None,**kargs): dsp,rd = os.popen2("sox -t .ul - -t ossdsp /dev/dsp") try: def play(pkt, dsp=dsp): + from scapy.config import conf if pkt and pkt.haslayer(UDP) and pkt.haslayer(conf.raw_layer): dsp.write(pkt.getlayer(RTP).load) if lst is None: diff --git a/scapy/packet.py b/scapy/packet.py index 611c373e5f7acfaef9da4fb1c9f8f3d43e81e2f5..f3739c8f2d0090a9da157a5b183a23406b36a32a 100644 --- a/scapy/packet.py +++ b/scapy/packet.py @@ -10,16 +10,16 @@ Packet class. Binding mechanism. fuzz() method. import re import time,itertools import copy -from fields import StrField, ConditionalField, Emph, PacketListField, BitField, \ - MultiEnumField, EnumField, FlagsField -from themes import AnsiColorTheme -from config import conf -from base_classes import BasePacket, Gen, SetGen, Packet_metaclass -from volatile import VolatileValue -from utils import import_hexcap,tex_escape,colgen,get_temp_file -from error import Scapy_Exception,log_runtime import subprocess +from scapy.fields import StrField, ConditionalField, Emph, PacketListField, BitField, \ + MultiEnumField, EnumField, FlagsField +from scapy.config import conf +from scapy.base_classes import BasePacket, Gen, SetGen, Packet_metaclass +from scapy.volatile import VolatileValue +from scapy.utils import import_hexcap,tex_escape,colgen,get_temp_file +from scapy.error import Scapy_Exception,log_runtime + try: import pyx except ImportError: @@ -845,6 +845,7 @@ Creates an EPS file describing a packet. If filename is not provided a temporary """ if dump: + from scapy.themes import AnsiColorTheme ct = AnsiColorTheme() # No color for dump output else: ct = conf.color_theme diff --git a/scapy/pipetool.py b/scapy/pipetool.py index 7b85dd7830104e430ca183769f2a4a4eebda6d7c..fb6f6179549e04dc510138f27a46acec91854a39 100644 --- a/scapy/pipetool.py +++ b/scapy/pipetool.py @@ -7,15 +7,16 @@ from __future__ import with_statement -import scapy.utils -from scapy.config import conf import os,thread,select import subprocess import itertools import collections import time -from scapy.error import log_interactive,warning import Queue +import scapy.utils + +from scapy.error import log_interactive,warning +from scapy.config import conf class PipeEngine: pipes = {} @@ -262,6 +263,7 @@ class Source(Pipe): Pipe.__init__(self, name=name) self.is_exhausted = False def _read_message(self): + from scapy.automaton import Message return Message() def deliver(self): msg = self._read_message diff --git a/scapy/plist.py b/scapy/plist.py index 5e3fdea5afc679e58b990de8ad403bd6890c3fb1..9c754f411e9df61294f0942827b714204e42e7cb 100644 --- a/scapy/plist.py +++ b/scapy/plist.py @@ -9,11 +9,11 @@ PacketList: holds several packets and allows to do operations on them. import os,subprocess -from config import conf -from base_classes import BasePacket,BasePacketList from collections import defaultdict -from utils import do_graph,hexdump,make_table,make_lined_table,make_tex_table,get_temp_file +from scapy.config import conf +from scapy.base_classes import BasePacket,BasePacketList +from scapy.utils import do_graph,hexdump,make_table,make_lined_table,make_tex_table,get_temp_file from scapy.arch import plt, MATPLOTLIB_INLINED, MATPLOTLIB_DEFAULT_PLOT_KARGS @@ -293,10 +293,10 @@ lfilter: truth function to apply to each packet to decide whether it will be dis prog: which graphviz program to use""" if getsrcdst is None: def getsrcdst(pkt): - if IP in pkt: - return (pkt[IP].src, pkt[IP].dst) - if ARP in pkt: - return (pkt[ARP].psrc, pkt[ARP].pdst) + if 'IP' in pkt: + return (pkt['IP'].src, pkt['IP'].dst) + if 'ARP' in pkt: + return (pkt['ARP'].psrc, pkt['ARP'].pdst) raise TypeError() conv = {} for p in self.res: @@ -546,10 +546,3 @@ class SndRcvList(PacketList): return elt[1] def _elt2sum(self, elt): return "%s ==> %s" % (elt[0].summary(),elt[1].summary()) - - - - - - - diff --git a/scapy/pton_ntop.py b/scapy/pton_ntop.py index 1bd88920e15f939725030eed1e22ce366b7e7dae..ce93b6768b75520bfcc32a2355c0724fc833f75d 100644 --- a/scapy/pton_ntop.py +++ b/scapy/pton_ntop.py @@ -15,7 +15,7 @@ import socket,struct def inet_pton(af, addr): """Convert an IP address from text representation into binary form""" if af == socket.AF_INET: - return inet_aton(addr) + return socket.inet_aton(addr) elif af == socket.AF_INET6: # IPv6: The use of "::" indicates one or more groups of 16 bits of zeros. # We deal with this form of wildcard using a special marker. @@ -63,7 +63,7 @@ def inet_pton(af, addr): def inet_ntop(af, addr): """Convert an IP address from binary form into text represenation""" if af == socket.AF_INET: - return inet_ntoa(addr) + return socket.inet_ntoa(addr) elif af == socket.AF_INET6: # IPv6 addresses have 128bits (16 bytes) if len(addr) != 16: diff --git a/scapy/route.py b/scapy/route.py index 170de483303696c8f2300a8433bfd2bea3400b6e..1e426a7a0b45f2f9f0168afbc63f138f72ae048c 100644 --- a/scapy/route.py +++ b/scapy/route.py @@ -8,10 +8,10 @@ Routing and handling of network interfaces. """ import socket -from arch import read_routes,get_if_addr,LOOPBACK_NAME -from utils import atol,ltoa,itom -from config import conf -from error import Scapy_Exception,warning +from scapy.arch import read_routes,get_if_addr,LOOPBACK_NAME +from scapy.utils import atol,ltoa,itom +from scapy.config import conf +from scapy.error import Scapy_Exception,warning ############################## ## Routing/Interfaces stuff ## diff --git a/scapy/route6.py b/scapy/route6.py index 341a7c3ee6a2d3daa0d6b27f4dc003d5893657c0..82c6f8f350ea13d621d24775660775df42140012 100644 --- a/scapy/route6.py +++ b/scapy/route6.py @@ -17,9 +17,11 @@ Routing and network interface handling for IPv6. ############################################################################# import socket -from config import conf -from utils6 import * -from arch import * +from scapy.config import conf +from scapy.utils6 import * +from scapy.arch import * +from scapy.pton_ntop import * +from scapy.error import warning, log_loading class Route6: diff --git a/scapy/scapypipes.py b/scapy/scapypipes.py index 94bd401abc990ec2c6a2f5be1e5af14af30f5547..9af8193e4da5e76d8f70ba1b563547989c5dd191 100644 --- a/scapy/scapypipes.py +++ b/scapy/scapypipes.py @@ -3,8 +3,9 @@ ## Copyright (C) Philippe Biondi <phil@secdev.org> ## This program is published under a GPLv2 license -from pipetool import Source,Drain,Sink -from config import conf +from scapy.pipetool import Source,Drain,Sink +from scapy.config import conf +from scapy.utils import PcapReader, PcapWriter class SniffSource(Source): @@ -114,10 +115,12 @@ class UDPDrain(Drain): self.port = port def push(self, msg): + from scapy.layers.inet import IP, UDP if IP in msg and msg[IP].proto == 17 and UDP in msg: payload = msg[UDP].payload self._high_send(str(payload)) def high_push(self, msg): + from scapy.layers.inet import IP, UDP p = IP(dst=self.ip)/UDP(sport=1234,dport=self.port)/msg self._send(p) diff --git a/scapy/sendrecv.py b/scapy/sendrecv.py index 292274099bfc9ac4a59a0ab3e75e7249b076400a..474bcccd50dc7867efc452f93e69fbf805d939ad 100644 --- a/scapy/sendrecv.py +++ b/scapy/sendrecv.py @@ -11,15 +11,15 @@ import errno import cPickle,os,sys,time,subprocess import itertools from select import select -from data import * -import arch -from config import conf -from packet import Gen -from utils import warning,get_temp_file,PcapReader,wrpcap -import plist -from error import log_runtime,log_interactive -from base_classes import SetGen -from supersocket import StreamSocket +from scapy.data import * +from scapy import arch +from scapy.config import conf +from scapy.packet import Gen +from scapy.utils import warning,get_temp_file,PcapReader,wrpcap +from scapy import plist +from scapy.error import log_runtime,log_interactive +from scapy.base_classes import SetGen +from scapy.supersocket import StreamSocket ################# ## Debug class ## diff --git a/scapy/supersocket.py b/scapy/supersocket.py index 6e84419796346cb9f3287c2576bd3d538dad459f..3fd0fef5f08402d038c94f3c3d55ec2feadbe6bd 100644 --- a/scapy/supersocket.py +++ b/scapy/supersocket.py @@ -8,8 +8,9 @@ SuperSocket. """ import socket,time -from config import conf -from data import * + +from scapy.config import conf +from scapy.data import * from scapy.error import warning, log_runtime class _SuperSocket_metaclass(type): @@ -47,14 +48,17 @@ class SuperSocket: if self.ins and self.ins.fileno() != -1: self.ins.close() def sr(self, *args, **kargs): + from scapy import sendrecv return sendrecv.sndrcv(self, *args, **kargs) def sr1(self, *args, **kargs): + from scapy import sendrecv a,b = sendrecv.sndrcv(self, *args, **kargs) if len(a) > 0: return a[0][1] else: return None def sniff(self, *args, **kargs): + from scapy import sendrecv return sendrecv.sniff(opened_socket=self, *args, **kargs) class L3RawSocket(SuperSocket): @@ -92,7 +96,7 @@ class L3RawSocket(SuperSocket): pkt = pkt.payload if pkt is not None: - from arch import get_last_packet_timestamp + from scapy.arch import get_last_packet_timestamp pkt.time = get_last_packet_timestamp(self.ins) return pkt def send(self, x): @@ -127,6 +131,7 @@ class StreamSocket(SimpleSocket): pad = pkt.getlayer(conf.padding_layer) if pad is not None and pad.underlayer is not None: del(pad.underlayer.payload) + from scapy.packet import NoPayload while pad is not None and not isinstance(pad, NoPayload): x -= len(pad.load) pad = pad.payload @@ -137,6 +142,3 @@ class StreamSocket(SimpleSocket): if conf.L3socket is None: conf.L3socket = L3RawSocket - -import arch -import sendrecv diff --git a/scapy/themes.py b/scapy/themes.py index 188fd5470b75f6b98b86f7ad0a070219139d7f4b..a0529d7006b51c8e0640833295b4fc771bc2346b 100644 --- a/scapy/themes.py +++ b/scapy/themes.py @@ -264,6 +264,7 @@ class ColorPrompt: __prompt = ">>> " def __str__(self): try: + from scapy import config ct = config.conf.color_theme if isinstance(ct, AnsiColorTheme): ## ^A and ^B delimit invisible caracters for readline to count right @@ -272,6 +273,3 @@ class ColorPrompt: return ct.prompt(config.conf.prompt) except: return self.__prompt - - -import config diff --git a/scapy/tools/UTscapy.py b/scapy/tools/UTscapy.py index 7753e1a1dec2bdbd452a8c5a01b79204fed89106..c6401468aac4be76e3f9e71491a25dea55a846e4 100755 --- a/scapy/tools/UTscapy.py +++ b/scapy/tools/UTscapy.py @@ -38,7 +38,7 @@ class File: def get_local(self): return bz2.decompress(base64.decodestring(self.local)) def get_URL(self): - return URL + return self.URL def write(self, dir): if dir: dir += "/" diff --git a/scapy/utils.py b/scapy/utils.py index 211185610594104ca118add41be1187a46a0013f..c8daa522ceda44e655d904b5fe5b49ed3ebe8ea0 100644 --- a/scapy/utils.py +++ b/scapy/utils.py @@ -17,10 +17,10 @@ import subprocess import warnings warnings.filterwarnings("ignore","tempnam",RuntimeWarning, __name__) -from config import conf -from data import MTU -from error import log_runtime,log_loading,log_interactive, Scapy_Exception -from base_classes import BasePacketList +from scapy.config import conf +from scapy.data import MTU +from scapy.error import log_runtime,log_loading,log_interactive, Scapy_Exception +from scapy.base_classes import BasePacketList WINDOWS=sys.platform.startswith("win32") @@ -215,9 +215,6 @@ def hexdiff(x,y): else: i += 16 - -crc32 = zlib.crc32 - if struct.pack("H",1) == "\x00\x01": # big endian def checksum(pkt): if len(pkt) % 2 == 1: @@ -592,7 +589,7 @@ class PcapReader_metaclass(type): i.__init__(filename, fdesc, magic) except Scapy_Exception: try: - self.f.seek(-4, 1) + i.f.seek(-4, 1) except: pass raise Scapy_Exception("Not a supported capture file") @@ -730,7 +727,7 @@ class PcapReader(RawPcapReader): return p def read_all(self,count=-1): res = RawPcapReader.read_all(self, count) - import plist + from scapy import plist return plist.PacketList(res,name = os.path.basename(self.filename)) def recv(self, size=MTU): return self.read_packet(size=size) @@ -829,7 +826,7 @@ class PcapNgReader(RawPcapNgReader): return p def read_all(self,count=-1): res = RawPcapNgReader.read_all(self, count) - import plist + from scapy import plist return plist.PacketList(res, name=os.path.basename(self.filename)) def recv(self, size=MTU): return self.read_packet() diff --git a/scapy/utils6.py b/scapy/utils6.py index 6a2ae83da17f61b303e31ace1a09c7f6248d40ba..eb4ecb5aa07472fa6b267d2f5c18b6b2a1af26b5 100644 --- a/scapy/utils6.py +++ b/scapy/utils6.py @@ -9,10 +9,14 @@ """ Utility functions for IPv6. """ - -from config import conf -from data import * -from utils import * +import random +import socket +import struct + +from scapy.config import conf +from scapy.data import * +from scapy.utils import * +from scapy.pton_ntop import * def construct_source_candidate_set(addr, plen, laddr, loname): diff --git a/scapy/volatile.py b/scapy/volatile.py index a870b23c656fddd3ff87824cde832839100fcfe1..f59e9ecfef5d4ffaf901f690cb1427772dbfbab7 100644 --- a/scapy/volatile.py +++ b/scapy/volatile.py @@ -8,8 +8,8 @@ Fields that hold random numbers. """ import random,time,math -from base_classes import Net -from utils import corrupt_bits,corrupt_bytes +from scapy.base_classes import Net +from scapy.utils import corrupt_bits,corrupt_bytes #################### ## Random numbers ## diff --git a/test/ipsec.uts b/test/ipsec.uts index 01f13571417ecfc6aef0a2bcd0d306ca4a2de6d2..bf13075ae9b39b4517b3bba7aeada2d29b27491e 100644 --- a/test/ipsec.uts +++ b/test/ipsec.uts @@ -8,6 +8,8 @@ ####################################### = IPv4 / ESP - Transport - AES-CBC - NULL +import socket + p = IP(src='1.1.1.1', dst='2.2.2.2') p /= TCP(sport=45012, dport=80) p /= Raw('testdata') diff --git a/test/regression.uts b/test/regression.uts index 849fb80ccd68e49e0402756b4ce3fe6f44eed18c..ff454d7164d24749b41f034dfd2f6f1a6087845b 100644 --- a/test/regression.uts +++ b/test/regression.uts @@ -46,7 +46,7 @@ routes6 = read_routes6() if len(routes6): iflist = get_if_list() - if iflist == [scapy.arch.LOOPBACK_NAME]: + if iflist == [LOOPBACK_NAME]: len(routes6) == 1 elif len(iflist) >= 2: len(routes6) >= 3 @@ -358,10 +358,12 @@ a = TestFLF() a.lst = [7,65539] ls(a) str(a) +import struct _ == struct.pack("!BII", 2,7,65539) = Disassemble ~ field +import struct TestFLF("\x00\x11\x12") assert(_.len == 0 and Raw in _ and _[Raw].load == "\x11\x12") TestFLF(struct.pack("!BIII",3,1234,2345,12345678)) @@ -900,6 +902,8 @@ assert( _ == "Saturn" ) = Automaton test io event from external fd ~ automaton +import os + class ATMT8(Automaton): @ATMT.state(initial=1) def BEGIN(self): @@ -1257,6 +1261,8 @@ in6_addrtomac("FE80::" + in6_mactoifaceid("FF:00:00:00:00:00", ulbit=0)) == 'ff: ########### RFC 3041 related function ############################### = Test in6_getRandomizedIfaceId +import socket + res=True for _ in xrange(10): s1,s2 = in6_getRandomizedIfaceId('20b:93ff:feeb:2d3')