diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py index 41514766da06dc6b7d42a136c6758d415d9f4a8d..76a46fb02254a8d2838c0da55146a9227757e258 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 d5b70d5433e4f329a615525587ba6a0d71c04816..b062c8aef5f6ec0e303a656105aa66439c32d59d 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 62ce75238ee6bbf9fe4e472460366c35694d9b6c..66cf0cf9cffe21f7f00e60eab3fe96c95f3e0975 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 018b06297e8e1308dc9b5a36ba66474ff28eea72..fe4751d9363e5f0bbe6bd07f76aef48e0da162f2 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 86b9b277a1b50e42b06cec5da0cbca787ed56764..89757a98daeb7901c65e25148bd20d8aa8c858a0 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 10a32de951d4f2742e1736ade3e26544cc24a6ca..8afca6cf85a1d7457c7266535ac93973e081c17c 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 960dfb71f4128f2cfd8864b7425086a72366c5dd..6d43a7a97437f227b061addedca96a85d8ff58d3 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)