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