From d88f0f11dea1e9f05b91b1fa2eb1eb4163a731fc Mon Sep 17 00:00:00 2001 From: Phil <phil@secdev.org> Date: Sun, 14 Jun 2009 01:26:18 +0200 Subject: [PATCH] Changed default MTU to be 32767 and made supersocket.recv() argument optional --- scapy/arch/linux.py | 4 ++-- scapy/arch/pcapdnet.py | 4 ++-- scapy/automaton.py | 2 +- scapy/data.py | 2 +- scapy/layers/bluetooth.py | 3 ++- scapy/supersocket.py | 4 ++-- scapy/utils.py | 16 ++++++++-------- 7 files changed, 18 insertions(+), 17 deletions(-) diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py index 41514766..76a46fb0 100644 --- a/scapy/arch/linux.py +++ b/scapy/arch/linux.py @@ -333,7 +333,7 @@ class L3PacketSocket(SuperSocket): for i in self.iff: set_promisc(self.ins, i, 0) SuperSocket.close(self) - def recv(self, x): + def recv(self, x=MTU): pkt, sa_ll = self.ins.recvfrom(x) if sa_ll[2] == socket.PACKET_OUTGOING: return None @@ -419,7 +419,7 @@ class L2Socket(SuperSocket): self.LL = conf.default_l2 warning("Unable to guess type (interface=%s protocol=%#x family=%i). Using %s" % (sa_ll[0],sa_ll[1],sa_ll[3],self.LL.name)) - def recv(self, x): + def recv(self, x=MTU): pkt, sa_ll = self.ins.recvfrom(x) if sa_ll[2] == socket.PACKET_OUTGOING: return None diff --git a/scapy/arch/pcapdnet.py b/scapy/arch/pcapdnet.py index d5b70d54..b062c8ae 100644 --- a/scapy/arch/pcapdnet.py +++ b/scapy/arch/pcapdnet.py @@ -101,7 +101,7 @@ if conf.use_pcap: def close(self): del(self.ins) - def recv(self, x): + def recv(self, x=MTU): ll = self.ins.datalink() if ll in conf.l2types: cls = conf.l2types[ll] @@ -291,7 +291,7 @@ if conf.use_pcap and conf.use_dnet: if filter: self.ins.setfilter(filter) self.outs = dnet.eth(iface) - def recv(self,x): + def recv(self,x=MTU): ll = self.ins.datalink() if ll in conf.l2types: cls = conf.l2types[ll] diff --git a/scapy/automaton.py b/scapy/automaton.py index 62ce7523..66cf0cf9 100644 --- a/scapy/automaton.py +++ b/scapy/automaton.py @@ -187,7 +187,7 @@ class _ATMT_supersocket(SuperSocket): if type(s) is not str: s = str(s) return self.spa.send(s) - def recv(self, n=None): + def recv(self, n=MTU): r = self.spa.recv(n) if self.proto is not None: r = self.proto(r) diff --git a/scapy/data.py b/scapy/data.py index 018b0629..fe4751d9 100644 --- a/scapy/data.py +++ b/scapy/data.py @@ -44,7 +44,7 @@ IPV6_ADDR_UNSPECIFIED = 0x10000 -MTU = 1600 +MTU = 0x7fff # a.k.a give me all you have # file parsing to get some values : diff --git a/scapy/layers/bluetooth.py b/scapy/layers/bluetooth.py index 86b9b277..89757a98 100644 --- a/scapy/layers/bluetooth.py +++ b/scapy/layers/bluetooth.py @@ -9,6 +9,7 @@ from scapy.config import conf from scapy.packet import * from scapy.fields import * from scapy.supersocket import SuperSocket +from scapy.data import MTU class HCI_Hdr(Packet): @@ -163,7 +164,7 @@ class BluetoothL2CAPSocket(SuperSocket): self.ins = self.outs = s - def recv(self, x): + def recv(self, x=MTU): return L2CAP_CmdHdr(self.ins.recv(x)) diff --git a/scapy/supersocket.py b/scapy/supersocket.py index 10a32de9..8afca6cf 100644 --- a/scapy/supersocket.py +++ b/scapy/supersocket.py @@ -27,7 +27,7 @@ class SuperSocket: sx = str(x) x.sent_time = time.time() return self.outs.send(sx) - def recv(self, x): + def recv(self, x=MTU): return conf.raw_layer(self.ins.recv(x)) def fileno(self): return self.ins.fileno() @@ -55,7 +55,7 @@ class L3RawSocket(SuperSocket): self.outs = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW) self.outs.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1) self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type)) - def recv(self, x): + def recv(self, x=MTU): return Ether(self.ins.recv(x)).payload def send(self, x): try: diff --git a/scapy/utils.py b/scapy/utils.py index 960dfb71..6d43a7a9 100644 --- a/scapy/utils.py +++ b/scapy/utils.py @@ -484,7 +484,7 @@ class RawPcapReader: return pkt - def read_packet(self): + def read_packet(self, size=MTU): """return a single packet read from the file returns None when no more packets are available @@ -493,7 +493,7 @@ class RawPcapReader: if len(hdr) < 16: return None sec,usec,caplen,wirelen = struct.unpack(self.endian+"IIII", hdr) - s = self.f.read(caplen) + s = self.f.read(caplen)[:MTU] return s,(sec,usec,wirelen) # caplen = len(s) @@ -519,10 +519,10 @@ class RawPcapReader: res.append(p) return res - def recv(self, size): + def recv(self, size=MTU): """ Emulate a socket """ - return self.read_packet()[0] + return self.read_packet(size)[0] def fileno(self): return self.f.fileno() @@ -540,8 +540,8 @@ class PcapReader(RawPcapReader): except KeyError: warning("PcapReader: unknown LL type [%i]/[%#x]. Using Raw packets" % (self.linktype,self.linktype)) self.LLcls = conf.raw_layer - def read_packet(self): - rp = RawPcapReader.read_packet(self) + def read_packet(self, size=MTU): + rp = RawPcapReader.read_packet(self,size) if rp is None: return None s,(sec,usec,wirelen) = rp @@ -560,8 +560,8 @@ class PcapReader(RawPcapReader): res = RawPcapReader.read_all(self, count) import plist return plist.PacketList(res,name = os.path.basename(self.filename)) - def recv(self, size): - return self.read_packet() + def recv(self, size=MTU): + return self.read_packet(size) -- GitLab