diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py
index 28e5db9b686502dee9130ebde94b77e29b431ef1..f153caeeec67bfce759db656e62eff1ab1d241e0 100644
--- a/scapy/arch/linux.py
+++ b/scapy/arch/linux.py
@@ -146,7 +146,7 @@ def attach_filter(s, bpf_filter, iface):
     nb = int(lines[0])
     bpf = ""
     for l in lines[1:]:
-        bpf += struct.pack("HBBI",*map(long,l.split()))
+        bpf += struct.pack("HBBI", *(int(e) for e in l.split()))
 
     # XXX. Argl! We need to give the kernel a pointer on the BPF,
     # python object header seems to be 20 bytes. 36 bytes for x86 64bits arch.
diff --git a/scapy/arch/pcapdnet.py b/scapy/arch/pcapdnet.py
index d7b42e75f708bdd03c041c1e70b56b45a1bab3ec..415cf86b2f381983ef3053115a7a1a67e6cd2340 100644
--- a/scapy/arch/pcapdnet.py
+++ b/scapy/arch/pcapdnet.py
@@ -103,8 +103,7 @@ if conf.use_winpcapy:
             if a.contents.addr.contents.sa_family == socket.AF_INET:
               ap = a.contents.addr
               val = cast(ap, POINTER(sockaddr_in))
-              #ret = bytes(val.contents.sin_addr[:4])
-              ret = "".join([chr(x) for x in val.contents.sin_addr[:4]])
+              ret = "".join(chr(x) for x in val.contents.sin_addr[:4])
             a = a.contents.next
           break
         p = p.contents.next
@@ -151,8 +150,7 @@ if conf.use_winpcapy:
           if not c > 0:
               return
           ts = self.header.contents.ts.tv_sec
-          pkt = "".join([ chr(i) for i in self.pkt_data[:self.header.contents.len] ])
-          #pkt = bytes(self.pkt_data[:self.header.contents.len])
+          pkt = "".join(chr(i) for i in self.pkt_data[:self.header.contents.len])
           return ts, pkt
       def datalink(self):
           return pcap_datalink(self.pcap)
diff --git a/scapy/as_resolvers.py b/scapy/as_resolvers.py
index da4df117e7053a802a974ece6b99a9a8eb2e74a1..606d3c4d942cd0658251e5ba105c5496645533fe 100644
--- a/scapy/as_resolvers.py
+++ b/scapy/as_resolvers.py
@@ -88,7 +88,7 @@ class AS_resolver_cymru(AS_resolver):
         for l in r.splitlines()[1:]:
             if "|" not in l:
                 continue
-            asn,ip,desc = map(str.strip, l.split("|"))
+            asn, ip, desc = [elt.strip() for elt in l.split('|')]
             if asn == "NA":
                 continue
             asn = "AS" + str(int(asn))
diff --git a/scapy/asn1/ber.py b/scapy/asn1/ber.py
index 97fc4a0267c65b2b50c378342affceca330b3c38..42d61ccfeb645e4480e7ddeb13bb360ecc4a6556 100644
--- a/scapy/asn1/ber.py
+++ b/scapy/asn1/ber.py
@@ -88,7 +88,7 @@ def BER_num_enc(l, size=1):
                 x[0] |= 0x80
             l >>= 7
             size -= 1
-        return "".join([chr(k) for k in x])
+        return "".join(chr(k) for k in x)
 def BER_num_dec(s, cls_id=0):
         if len(s) == 0:
             raise BER_Decoding_Error("BER_num_dec: got empty string", remaining=s)
@@ -282,7 +282,7 @@ class BERcodec_INTEGER(BERcodec_Object):
             i >>= 8
             if not i:
                 break
-        s = map(chr, s)
+        s = [chr(c) for c in s]
         s.append(BER_len_enc(len(s)))
         s.append(chr(cls.tag))
         s.reverse()
@@ -357,7 +357,7 @@ class BERcodec_OID(BERcodec_Object):
         if len(lst) >= 2:
             lst[1] += 40*lst[0]
             del(lst[0])
-        s = "".join([BER_num_enc(k) for k in lst])
+        s = "".join(BER_num_enc(k) for k in lst)
         return chr(cls.tag)+BER_len_enc(len(s))+s
     @classmethod
     def do_dec(cls, s, context=None, safe=False):
@@ -369,7 +369,7 @@ class BERcodec_OID(BERcodec_Object):
         if (len(lst) > 0):
             lst.insert(0,lst[0]/40)
             lst[1] %= 40
-        return cls.asn1_object(".".join([str(k) for k in lst])), t
+        return cls.asn1_object(".".join(str(k) for k in lst)), t
 
 class BERcodec_ENUMERATED(BERcodec_INTEGER):
     tag = ASN1_Class_UNIVERSAL.ENUMERATED
@@ -406,7 +406,7 @@ class BERcodec_SEQUENCE(BERcodec_Object):
     @classmethod
     def enc(cls, l):
         if type(l) is not str:
-            l = "".join(map(lambda x: x.enc(cls.codec), l))
+            l = "".join(x.enc(cls.codec) for x in l)
         return chr(cls.tag)+BER_len_enc(len(l))+l
     @classmethod
     def do_dec(cls, s, context=None, safe=False):
diff --git a/scapy/base_classes.py b/scapy/base_classes.py
index a97e58221256d6c83bd330aaf95c8edcdd4fc154..8dfb967fff0a563d54b76c0aa6b5c4804a4e8f4c 100644
--- a/scapy/base_classes.py
+++ b/scapy/base_classes.py
@@ -57,7 +57,7 @@ class Net(Gen):
         if a == "*":
             a = (0,256)
         elif a.find("-") >= 0:
-            x,y = map(int,a.split("-"))
+            x, y = [int(d) for d in a.split('-')]
             if x > y:
                 y = x
             a = (x &  (0xff<<netmask) , max(y, (x | (0xff>>(8-netmask))))+1)
@@ -71,7 +71,8 @@ class Net(Gen):
         if not cls.ipaddress.match(net):
             tmp[0]=socket.gethostbyname(tmp[0])
         netmask = int(tmp[1])
-        return map(lambda x,y: cls._parse_digit(x,y), tmp[0].split("."), map(lambda x,nm=netmask: x-nm, (8,16,24,32))),netmask
+        ret_list = [cls._parse_digit(x, y-netmask) for (x, y) in zip(tmp[0].split('.'), [8, 16, 24, 32])]
+        return ret_list, netmask
 
     def __init__(self, net):
         self.repr=net
diff --git a/scapy/contrib/dtp.py b/scapy/contrib/dtp.py
index 9996118aa0a91c1d1e5d53dae9ad078615c34130..5e69f6cf832a9a532a37ba87e46d59035524503f 100644
--- a/scapy/contrib/dtp.py
+++ b/scapy/contrib/dtp.py
@@ -50,7 +50,7 @@ class RepeatedTlvListField(PacketListField):
         return remain,lst
 
     def addfield(self, pkt, s, val):
-        return s+reduce(str.__add__, map(str, val),"")
+        return s + ''.join(str(v) for v in val)
 
 _DTP_TLV_CLS = {
                     0x0001 : "DTPDomain",
diff --git a/scapy/contrib/eigrp.py b/scapy/contrib/eigrp.py
index 55b48f8d4f14846f24590babc4e376daf7a525d4..866a39f84fb30cb9320acba42c0a433080f7e7c7 100644
--- a/scapy/contrib/eigrp.py
+++ b/scapy/contrib/eigrp.py
@@ -431,7 +431,7 @@ class RepeatedTlvListField(PacketListField):
         return remain,lst
 
     def addfield(self, pkt, s, val):
-        return s + reduce(str.__add__, map(str, val), "")
+        return s + ''.join(str(v) for v in val)
 
 def _EIGRPGuessPayloadClass(p, **kargs):
     cls = conf.raw_layer
diff --git a/scapy/contrib/http2.py b/scapy/contrib/http2.py
index 7c632856a3821cb91058b6905afa5f3c9438f472..f934da45c22376f039aea69cac3b759496e2e404 100644
--- a/scapy/contrib/http2.py
+++ b/scapy/contrib/http2.py
@@ -2409,7 +2409,7 @@ class HPackHdrTable(Sized):
         # type: () -> int
         """ __len__ returns the summed length of all dynamic entries
         """
-        return sum([len(x) for x in self._dynamic_table])
+        return sum(len(x) for x in self._dynamic_table)
 
     def gen_txt_repr(self, hdrs, register=True):
         # type: (Union[H2Frame, List[HPackHeaders]], Optional[bool]) -> str
diff --git a/scapy/contrib/send.py b/scapy/contrib/send.py
index 676158a4373d2bec7443984cde3f90afe4897966..02746b7728866c1827bed5d05ede3771628c9b96 100644
--- a/scapy/contrib/send.py
+++ b/scapy/contrib/send.py
@@ -31,7 +31,7 @@ class HashField(Field):
             except socket.error:
                 x = Net6(x)
         elif type(x) is list:
-            x = map(Net6, x)
+            x = [Net6(e) for e in x]
         return x
     def i2m(self, pkt, x):
         return inet_pton(socket.AF_INET6, x)
diff --git a/scapy/data.py b/scapy/data.py
index 33712533b70d180113cb8184e98a14cdf2e220f5..6189b4671f4f48eeeea3f7077e63ba552280ae43 100644
--- a/scapy/data.py
+++ b/scapy/data.py
@@ -152,7 +152,7 @@ class ManufDA(DADict):
             return ":".join([self[oui][0]]+ mac.split(":")[3:])
         return mac
     def __repr__(self):
-        return "\n".join(["<%s %s, %s>" % (i[0], i[1][0], i[1][1]) for i in self.__dict__.items()])
+        return "\n".join("<%s %s, %s>" % (i[0], i[1][0], i[1][1]) for i in self.__dict__.items())
         
         
 
diff --git a/scapy/fields.py b/scapy/fields.py
index 7e2c4e2ab94b6f7db7c2b030e346bf33829136b4..140dc92a0136c63457febe4ec3ee8ffdc93d2e1e 100644
--- a/scapy/fields.py
+++ b/scapy/fields.py
@@ -489,7 +489,7 @@ class PacketListField(PacketField):
             lst.append(p)
         return remain+ret,lst
     def addfield(self, pkt, s, val):
-        return s+"".join(map(str, val))
+        return s + "".join(str(v) for v in val)
 
 
 class StrFixedLenField(StrField):
@@ -539,7 +539,7 @@ class NetBIOSNameField(StrFixedLenField):
             x = ""
         x += " "*(l)
         x = x[:l]
-        x = "".join(map(lambda x: chr(0x41+(ord(x)>>4))+chr(0x41+(ord(x)&0xf)), x))
+        x = "".join(chr(0x41 + ord(b)>>4) + chr(0x41 + ord(b)&0xf) for b in x)
         x = " "+x
         return x
     def m2i(self, pkt, x):
@@ -621,7 +621,7 @@ class FieldListField(Field):
         if type(x) is not list:
             return [self.field.any2i(pkt, x)]
         else:
-            return map(lambda e, pkt=pkt: self.field.any2i(pkt, e), x)
+            return [self.field.any2i(pkt, e) for e in x]
     def i2repr(self, pkt, x):
         res = []
         for v in x:
@@ -863,13 +863,13 @@ class _EnumField(Field):
 
     def any2i(self, pkt, x):
         if type(x) is list:
-            return map(lambda z,pkt=pkt:self.any2i_one(pkt,z), x)
+            return [self.any2i_one(pkt, z) for z in x]
         else:
             return self.any2i_one(pkt,x)
 
     def i2repr(self, pkt, x):
         if type(x) is list:
-            return map(lambda z,pkt=pkt:self.i2repr_one(pkt,z), x)
+            return [self.i2repr_one(pkt, z) for z in x]
         else:
             return self.i2repr_one(pkt,x)
 
diff --git a/scapy/layers/dhcp6.py b/scapy/layers/dhcp6.py
index f40f0caad972d008de75536fe8dfd12fbb5fd49b..57deef952bcab9ef21ed2f15480cdaf5781cb004 100644
--- a/scapy/layers/dhcp6.py
+++ b/scapy/layers/dhcp6.py
@@ -319,7 +319,7 @@ class _IANAOptField(PacketListField):
     def i2len(self, pkt, z):
         if z is None or z == []:
             return 0
-        return sum(map(lambda x: len(str(x)) ,z))
+        return sum(len(str(x)) for x in z)
 
     def getfield(self, pkt, s):
         l = self.length_from(pkt)
@@ -395,7 +395,7 @@ class _OptReqListField(StrLenField):
         return r
     
     def i2m(self, pkt, x):
-        return "".join(map(lambda y: struct.pack("!H", y), x))
+        return "".join(struct.pack('!H', y) for y in x)
 
 # A client may include an ORO in a solicit, Request, Renew, Rebind,
 # Confirm or Information-request
@@ -547,7 +547,7 @@ class _UserClassDataField(PacketListField):
     def i2len(self, pkt, z):
         if z is None or z == []:
             return 0
-        return sum(map(lambda x: len(str(x)) ,z))
+        return sum(len(str(x)) for x in z)
 
     def getfield(self, pkt, s):
         l = self.length_from(pkt)
@@ -747,7 +747,7 @@ class DomainNameField(StrLenField):
     def i2m(self, pkt, x):
         if not x:
             return ""
-        tmp = "".join(map(lambda z: chr(len(z))+z, x.split('.')))
+        tmp = "".join(chr(len(z)) + z for z in x.split('.'))
         return tmp
 
 class DHCP6OptNISDomain(_DHCP6OptGuessPayload):             #RFC3898
@@ -1271,7 +1271,7 @@ dhcp6d( dns="2001:500::1035", domain="localdomain, local", duid=None)
                 return val
             elif type(val) is str:
                 l = val.split(',')
-                return map(lambda x: x.strip(), l)
+                return [x.strip() for x in l]
             else:
                 print "Bad '%s' parameter provided." % param_name
                 self.usage()
@@ -1337,7 +1337,7 @@ dhcp6d( dns="2001:500::1035", domain="localdomain, local", duid=None)
 
             # Mac Address
             rawmac = get_if_raw_hwaddr(iface)[1]
-            mac = ":".join(map(lambda x: "%.02x" % ord(x), list(rawmac)))
+            mac = ":".join("%.02x" % ord(x) for x in rawmac)
 
             self.duid = DUID_LLT(timeval = timeval, lladdr = mac)
             
@@ -1447,12 +1447,10 @@ dhcp6d( dns="2001:500::1035", domain="localdomain, local", duid=None)
                 elif isinstance(it, DHCP6OptIA_TA):
                     l = it.iataopts
 
-                opsaddr = filter(lambda x: isinstance(x, DHCP6OptIAAddress),l)
-                a=map(lambda x: x.addr,  opsaddr)
-                addrs += a
+                addrs += [x.addr for x in l if isinstance(x, DHCP6OptIAAddress)]
                 it = it.payload
                     
-            addrs = map(lambda x: bo + x + n, addrs)
+            addrs = [bo + x + n for x in addrs]
             if debug:
                 msg = r + "[DEBUG]" + n + " Received " + g + "Decline" + n 
                 msg += " from " + bo + src + vendor + " for "
diff --git a/scapy/layers/dns.py b/scapy/layers/dns.py
index cd116d48e71200ae13b52ca8c8ce1b19be0b3b03..945b085ee85c5f20ab360580ae6d08cdce1d0c3b 100644
--- a/scapy/layers/dns.py
+++ b/scapy/layers/dns.py
@@ -29,8 +29,8 @@ class DNSStrField(StrField):
         if x == ".":
           return b"\x00"
 
-        x = [k[:63] for k in x.split(".")] # Truncate chunks that cannot be encoded (more than 63 bytes..)
-        x = map(lambda y: chr(len(y))+y, x)
+        # Truncate chunks that cannot be encoded (more than 63 bytes..)
+        x = "".join(chr(len(y)) + y for y in (k[:63] for k in x.split(".")))
         x = "".join(x)
         if x[-1] != b"\x00":
             x += b"\x00"
@@ -201,7 +201,7 @@ class RDataField(StrLenField):
             if s:
                 s = inet_aton(s)
         elif pkt.type in [2, 3, 4, 5, 12]: # NS, MD, MF, CNAME, PTR
-            s = "".join(map(lambda x: chr(len(x))+x, s.split(".")))
+            s = "".join(chr(len(x)) + x for x in s.split('.'))
             if ord(s[-1]):
                 s += b"\x00"
         elif pkt.type == 16: # TXT
@@ -431,8 +431,7 @@ def RRlist2bitmap(lst):
     lst = list(set(lst))
     lst.sort()
 
-    lst = filter(lambda x: x <= 65535, lst)
-    lst = map(lambda x: abs(x), lst)
+    lst = [abs(x) for x in lst if x <= 65535]
 
     # number of window blocks
     max_window_blocks = int(math.ceil(lst[-1] / 256.))
@@ -465,11 +464,10 @@ def RRlist2bitmap(lst):
             v = 0
             # Remove out of range Resource Records
             tmp_rrlist = filter(lambda x: 256 * wb + 8 * tmp <= x < 256 * wb + 8 * tmp + 8, rrlist)
-            if not tmp_rrlist == []:
+            if tmp_rrlist:
                 # 1. rescale to fit into 8 bits
-                tmp_rrlist = map(lambda x: (x-256*wb)-(tmp*8), tmp_rrlist)
                 # 2. x gives the bit position ; compute the corresponding value
-                tmp_rrlist = map(lambda x: 2**(7-x) , tmp_rrlist)
+                tmp_rrlist = [2 ** (7 - (x - 256 * wb) + (tmp * 8)) for x in tmp_rrlist]
                 # 3. sum everything
                 v = reduce(lambda x,y: x+y, tmp_rrlist)
             bitmap += struct.pack("B", v)
diff --git a/scapy/layers/dot11.py b/scapy/layers/dot11.py
index 1d4a1b1218e82f067322c369ac60f2ecea838e3c..7f7caff3460255da524159a619b254d256cb1f4b 100644
--- a/scapy/layers/dot11.py
+++ b/scapy/layers/dot11.py
@@ -509,7 +509,7 @@ class Dot11PacketList(PacketList):
 
         PacketList.__init__(self, res, name, stats)
     def toEthernet(self):
-        data = map(lambda x:x.getlayer(Dot11), filter(lambda x : x.haslayer(Dot11) and x.type == 2, self.res))
+        data = [x[Dot11] for x in self.res if Dot11 in x and x.type == 2]
         r2 = []
         for p in data:
             q = p.copy()
diff --git a/scapy/layers/inet.py b/scapy/layers/inet.py
index 146b42ea7e4933fc66732489a5d5ca89f73c6fd3..26b476e0401ae7e2bbcade3166e5f0539f05b60d 100644
--- a/scapy/layers/inet.py
+++ b/scapy/layers/inet.py
@@ -1004,7 +1004,7 @@ def _packetlist_timeskew_graph(self, ip, **kargs):
     """Tries to graph the timeskew between the timestamps and real time for a given ip"""
 
     # Filter TCP segments which source address is 'ip'
-    res = map(lambda x: self._elt2pkt(x), self.res)
+    res = [self._elt2pkt(x) for x in self.res]
     b = filter(lambda x:x.haslayer(IP) and x.getlayer(IP).src == ip and x.haslayer(TCP), res)
 
     # Build a list of tuples (creation_time, replied_timestamp)
@@ -1034,7 +1034,7 @@ def _packetlist_timeskew_graph(self, ip, **kargs):
 
         return X, Y
 
-    data = map(_wrap_data, c)
+    data = [_wrap_data(e) for e in c]
 
     # Mimic the default gnuplot output
     if kargs == {}:
@@ -1642,10 +1642,10 @@ def IPID_count(lst, funcID=lambda x:x[1].id, funcpres=lambda x:x[1].summary()):
 lst:      a list of packets
 funcID:   a function that returns IP id values
 funcpres: a function used to summarize packets"""
-    idlst = map(funcID, lst)
+    idlst = [funcID(e) for e in lst]
     idlst.sort()
-    classes = [idlst[0]]+map(lambda x:x[1],filter(lambda (x,y): abs(x-y)>50, map(lambda x,y: (x,y),idlst[:-1], idlst[1:])))
-    lst = map(lambda x:(funcID(x), funcpres(x)), lst)
+    classes = [idlst[0]] + [x[1] for x in zip(idlst[:-1], idlst[1:]) if abs(x[0] - x[1]) > 50]
+    lst = [(funcID(x), funcpres(x)) for x in lst]
     lst.sort()
     print "Probably %i classes:" % len(classes), classes
     for id,pr in lst:
diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py
index 20afedf8308e556f02d793231271852556753b7a..b628e389b864db8a3583d9e3fa7402fea25000e5 100644
--- a/scapy/layers/inet6.py
+++ b/scapy/layers/inet6.py
@@ -166,7 +166,7 @@ class Net6(Gen): # syntax ex. fec0::/126
         tuple = filter(lambda x: m8(x), xrange(8, 129))
 
         a = in6_and(self.net, self.mask)
-        tmp = map(lambda x:  x, struct.unpack('16B', a))
+        tmp = [x for x in struct.unpack("16B", a)]
 
         def parse_digit(a, netmask):
             netmask = min(8,max(netmask,0))
@@ -214,7 +214,7 @@ class IP6Field(Field):
             except socket.error:
                 x = Net6(x)
         elif type(x) is list:
-            x = map(Net6, x)
+            x = [Net6(a) for a in x]
         return x
     def i2m(self, pkt, x):
         return inet_pton(socket.AF_INET6, x)
@@ -1915,8 +1915,8 @@ class DomainNameListField(StrLenField):
                 return z
             return z+b'\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))
+        tmp = [[chr(len(z)) + z for z in y.split('.')] for y in x]
+        ret_string  = "".join(conditionalTrailingDot("".join(x)) for x in tmp)
 
         # In padded mode, add some \x00 bytes
         if self.padded and not len(ret_string) % self.padded_unit == 0:
@@ -2159,7 +2159,7 @@ def names2dnsrepr(x):
         termin = b"\x00"
         if n.count('.') == 0: # single-component gets one more
             termin += b'\x00'
-        n = "".join(map(lambda y: chr(len(y))+y, n.split("."))) + termin
+        n = "".join(chr(len(y)) + y for y in n.split('.')) + termin
         res.append(n)
     return "".join(res)
 
@@ -2389,7 +2389,7 @@ class NIReplyDataField(StrField):
                     return (0, x)
                 return x
 
-            return (qtype, map(addttl, x))
+            return (qtype, [addttl(d) for d in x])
 
         return (qtype, x)
 
diff --git a/scapy/layers/isakmp.py b/scapy/layers/isakmp.py
index 74d97781965f58ba8cc7cf2f9bfc5f38ff424012..cf8083fd4aeb01bee3c731b81df8297a62250f59 100644
--- a/scapy/layers/isakmp.py
+++ b/scapy/layers/isakmp.py
@@ -124,7 +124,7 @@ class ISAKMPTransformSetField(StrLenField):
     def i2m(self, pkt, i):
         if i is None:
             return ""
-        i = map(self.type2num, i)
+        i = [self.type2num(e) for e in i]
         return "".join(i)
     def m2i(self, pkt, m):
         # I try to ensure that we don't read off the end of our packet based
diff --git a/scapy/layers/l2.py b/scapy/layers/l2.py
index 1f60256615c181d9366bc05c3cfaa168f45778a5..ea9e6e07dd4d9678ed8cc58ab799104cfbf654d7 100644
--- a/scapy/layers/l2.py
+++ b/scapy/layers/l2.py
@@ -59,7 +59,7 @@ def getmacbyip(ip, chainCC=0):
     if isinstance(ip,Net):
         ip = iter(ip).next()
     ip = inet_ntoa(inet_aton(ip))
-    tmp = map(ord, inet_aton(ip))
+    tmp = [ord(e) for e in inet_aton(ip)]
     if (tmp[0] & 0xf0) == 0xe0: # mcast @
         return "01:00:5e:%.2x:%.2x:%.2x" % (tmp[1]&0x7f,tmp[2],tmp[3])
     iff,a,gw = conf.route.route(ip)
diff --git a/scapy/layers/sctp.py b/scapy/layers/sctp.py
index 94b3f4b398c3ef096cb66a1c1c125403efd17eed..96ae3e261d5fe4e5ae9c6bfd5c519aa972453463 100644
--- a/scapy/layers/sctp.py
+++ b/scapy/layers/sctp.py
@@ -470,7 +470,7 @@ class GapAckField(Field):
     def i2m(self, pkt, x):
         if x is None:
             return b"\0\0\0\0"
-        sta, end = map(int, x.split(":"))
+        sta, end = [int(e) for e in x.split(':')]
         args = tuple([">HH", sta, end])
         return struct.pack(*args)
     def m2i(self, pkt, x):
diff --git a/scapy/layers/tls/cert.py b/scapy/layers/tls/cert.py
index 13f23675377ea59c001cda1425ededc0f2c0f11d..c5dcd54b03e460c94d69c9a6ed786746787e1ec4 100644
--- a/scapy/layers/tls/cert.py
+++ b/scapy/layers/tls/cert.py
@@ -706,11 +706,9 @@ class Cert(object):
             if (self.authorityKeyID is not None and
                 c.authorityKeyID is not None and
                 self.authorityKeyID == c.authorityKeyID):
-                return self.serial in map(lambda x: x[0],
-                                                    c.revoked_cert_serials)
+                return self.serial in (x[0] for x in c.revoked_cert_serials)
             elif self.issuer == c.issuer:
-                return self.serial in map(lambda x: x[0],
-                                                    c.revoked_cert_serials)
+                return self.serial in (x[0] for x in c.revoked_cert_serials)
         return False
 
     def export(self, filename, fmt="DER"):
diff --git a/scapy/layers/tls/crypto/pkcs1.py b/scapy/layers/tls/crypto/pkcs1.py
index eee8f52ac20c6320db544ed77d5920b88f9a1c69..d4172a8b241e53f862de37e3311f4122b761f5e7 100644
--- a/scapy/layers/tls/crypto/pkcs1.py
+++ b/scapy/layers/tls/crypto/pkcs1.py
@@ -220,7 +220,7 @@ def pkcs_emsa_pss_encode(M, emBits, h, mgf, sLen):
     rem = 8*emLen - emBits - 8*l # additionnal bits
     andMask = l*b'\x00'
     if rem:
-        j = chr(reduce(lambda x,y: x+y, map(lambda x: 1<<x, range(8-rem))))
+        j = sum(1 << x for x in range(8 - rem))
         andMask += j
         l += 1
     maskedDB = strand(maskedDB[:l], andMask) + maskedDB[l:]
@@ -262,7 +262,7 @@ def pkcs_emsa_pss_verify(M, EM, emBits, h, mgf, sLen):
     rem = 8*emLen - emBits - 8*l # additionnal bits
     andMask = l*b'\xff'
     if rem:
-        val = reduce(lambda x,y: x+y, map(lambda x: 1<<x, range(8-rem)))
+        val = sum(1 << x for x in range(8 - rem))
         j = chr(~val & 0xff)
         andMask += j
         l += 1
@@ -274,7 +274,7 @@ def pkcs_emsa_pss_verify(M, EM, emBits, h, mgf, sLen):
     rem = 8*emLen - emBits - 8*l # additionnal bits
     andMask = l*b'\x00'
     if rem:
-        j = chr(reduce(lambda x,y: x+y, map(lambda x: 1<<x, range(8-rem))))
+        j = chr(sum(1 << x for x in range(8 - rem)))
         andMask += j
         l += 1
     DB = strand(DB[:l], andMask) + DB[l:]
diff --git a/scapy/layers/tls/handshake.py b/scapy/layers/tls/handshake.py
index 1783ada7e79a8e50dcd98b25ba1db66b61366f53..fb3edac72a580d3df29c586e1a2d84520f078d54 100644
--- a/scapy/layers/tls/handshake.py
+++ b/scapy/layers/tls/handshake.py
@@ -155,12 +155,12 @@ class _CipherSuitesField(StrLenField):
     def any2i(self, pkt, x):
         if type(x) is not list:
             x = [x]
-        return map(lambda z,pkt=pkt:self.any2i_one(pkt,z), x)
+        return [self.any2i_one(pkt, z) for z in x]
 
     def i2repr(self, pkt, x):
         if x is None:
             return "None"
-        l = map(lambda z,pkt=pkt:self.i2repr_one(pkt,z), x)
+        l = [self.i2repr_one(pkt, z) for x in x]
         if len(l) == 1:
             l = l[0]
         else:
@@ -170,7 +170,7 @@ class _CipherSuitesField(StrLenField):
     def i2m(self, pkt, val):
         if val is None:
             val = []
-        return "".join(map(lambda x: struct.pack(self.itemfmt, x), val))
+        return "".join(struct.pack(self.itemfmt, x) for x in val)
 
     def m2i(self, pkt, m):
         res = []
@@ -959,7 +959,7 @@ class _ASN1CertListField(StrLenField):
             return i
         if isinstance(i, Cert):
             i = [i]
-        return "".join(map(lambda x: i2m_one(x), i))
+        return "".join(i2m_one(x) for x in i)
 
     def any2i(self, pkt, x):
         return x
@@ -979,9 +979,9 @@ class TLSCertificate(_TLSHandshake):
     def post_dissection_tls_session_update(self, msg_str):
         connection_end = self.tls_session.connection_end
         if connection_end == "client":
-            self.tls_session.server_certs = map(lambda x: x[1], self.certs)
+            self.tls_session.server_certs = [x[1] for x in self.certs]
         else:
-            self.tls_session.client_certs = map(lambda x: x[1], self.certs)
+            self.tls_session.client_certs = [x[1] for x in self.certs]
         self.tls_session.handshake_messages.append(msg_str)
         self.tls_session.handshake_messages_parsed.append(self)
 
diff --git a/scapy/layers/tls/session.py b/scapy/layers/tls/session.py
index 0c781552ccf1ef65e86f5465250331a4ca1c4019..a7951e07fb52d2c3a6f10effc61910de9957250f 100644
--- a/scapy/layers/tls/session.py
+++ b/scapy/layers/tls/session.py
@@ -208,7 +208,7 @@ class connState(object):
         def indent(s):
             if s and s[-1] == '\n':
                 s = s[:-1]
-            s = '\n'.join(map(lambda x: '\t'+x, s.split('\n')) + [''])
+            s = '\n'.join('\t' + x for x in s.split('\n')) + '\n'
             return s
 
         res =  "Connection end : %s\n" % self.connection_end.upper()
@@ -566,8 +566,7 @@ class _tls_sessions(object):
                 if len(sid) > 12:
                     sid = sid[:11] + "..."
                 res.append((src, dst, sid))
-        colwidth = map(lambda x: max(map(lambda y: len(y), x)),
-                       apply(zip, res))
+        colwidth = map(lambda x: max(map(lambda y: len(y), x)), apply(zip, res))
         fmt = "  ".join(map(lambda x: "%%-%ds"%x, colwidth))
         return "\n".join(map(lambda x: fmt % x, res))
 
diff --git a/scapy/modules/p0f.py b/scapy/modules/p0f.py
index 499aea695879db0ca35815704dec2ec5f5453f2d..6953dea42dc010c2fc366f4ff4b248e8e5119e32 100644
--- a/scapy/modules/p0f.py
+++ b/scapy/modules/p0f.py
@@ -69,7 +69,7 @@ class p0fKnowledgeBase(KnowledgeBase):
                     if x.isdigit():
                         return int(x)
                     return x
-                li = map(a2i, l[1:4])
+                li = [a2i(e) for e in l[1:4]]
                 #if li[0] not in self.ttl_range:
                 #    self.ttl_range.append(li[0])
                 #    self.ttl_range.sort()
@@ -530,7 +530,9 @@ interface and may (are likely to) be different than those generated on
         # XXX are the packets also seen twice on non Linux systems ?
         count=14
         pl = sniff(iface=iface, filter='tcp and port ' + str(port), count = count, timeout=3)
-        map(addresult, map(packet2p0f, pl))
+        for pkt in pl:
+            for elt in packet2p0f(pkt):
+                addresult(elt)
         os.waitpid(pid,0)
     elif pid < 0:
         log_runtime.error("fork error")
diff --git a/scapy/tools/UTscapy.py b/scapy/tools/UTscapy.py
index 63fe42a526cc28bb03bc6283e44c1273d693ecf6..11ee4fdd5faa71baf4f5203957d34020a3903681 100755
--- a/scapy/tools/UTscapy.py
+++ b/scapy/tools/UTscapy.py
@@ -751,7 +751,7 @@ def main(argv):
                     try:
                         NUM.append(int(v))
                     except ValueError:
-                        v1, v2 = map(int, v.split("-", 1))
+                        v1, v2 = [int(e) for e in v.split('-', 1)]
                         NUM.extend(xrange(v1, v2 + 1))
             elif opt == "-m":
                 MODULES.append(optarg)
diff --git a/scapy/utils.py b/scapy/utils.py
index 7dd8f9fb04e0bd0ce3582180da067170734d5599..7c2bc23d31dab52c7d0674dae55a0f9f46fe6ae5 100644
--- a/scapy/utils.py
+++ b/scapy/utils.py
@@ -137,7 +137,7 @@ def chexdump(x, dump=False):
     :returns: a String only if dump=True
     """
     x = str(x)
-    s = str(", ".join(map(lambda x: "%#04x"%ord(x), x)))
+    s = str(", ".join("%#04x" % ord(x) for x in x))
     if dump:
         return s
     else:
@@ -147,14 +147,14 @@ def chexdump(x, dump=False):
 def hexstr(x, onlyasc=0, onlyhex=0):
     s = []
     if not onlyasc:
-        s.append(" ".join(map(lambda x:"%02x"%ord(x), x)))
+        s.append(" ".join("%02x" % ord(b) for b in x))
     if not onlyhex:
         s.append(sane(x)) 
     return "  ".join(s)
 
 def repr_hex(s):
     """ Convert provided bitstring to a simple string of hex digits """
-    return "".join(map(lambda x: "%02x" % ord(x),s))
+    return "".join("%02x" % ord(x) for x in s)
 
 @conf.commands.register
 def hexdiff(x,y):
@@ -339,7 +339,7 @@ def fletcher16_checkbytes(binbuf, offset):
 
 
 def mac2str(mac):
-    return "".join(map(lambda x: chr(int(x,16)), mac.split(":")))
+    return "".join(chr(int(x, 16)) for x in mac.split(':'))
 
 def str2mac(s):
     return ("%02x:"*6)[:-1] % tuple(map(ord, s)) 
@@ -348,15 +348,13 @@ def randstring(l):
     """
     Returns a random string of length l (l >= 0)
     """
-    tmp = map(lambda x: struct.pack("B", random.randrange(0, 256, 1)), [""]*l)
-    return "".join(tmp)
+    return b"".join(struct.pack('B', random.randint(0, 255)) for _ in xrange(l))
 
 def zerofree_randstring(l):
     """
     Returns a random string of length l (l >= 0) without zero in it.
     """
-    tmp = map(lambda x: struct.pack("B", random.randrange(1, 256, 1)), [""]*l)
-    return "".join(tmp)
+    return b"".join(struct.pack('B', random.randint(1, 255)) for _ in xrange(l))
 
 def strxor(s1, s2):
     """
@@ -1317,7 +1315,7 @@ def __make_table(yfmtfunc, fmtfunc, endline, list, fxyz, sortx=None, sorty=None,
     vyf = {}
     l = 0
     for e in list:
-        xx,yy,zz = map(str, fxyz(e))
+        xx, yy, zz = [str(s) for s in fxyz(e)]
         l = max(len(yy),l)
         vx[xx] = max(vx.get(xx,0), len(xx), len(zz))
         vy[yy] = None
@@ -1348,7 +1346,7 @@ def __make_table(yfmtfunc, fmtfunc, endline, list, fxyz, sortx=None, sorty=None,
 
 
     if seplinefunc:
-        sepline = seplinefunc(l, map(lambda x:vx[x],vxk))
+        sepline = seplinefunc(l, [vx[x] for x in vxk])
         print sepline
 
     fmt = yfmtfunc(l)
@@ -1372,7 +1370,7 @@ def make_table(*args, **kargs):
     
 def make_lined_table(*args, **kargs):
     __make_table(lambda l:"%%-%is |" % l, lambda l:"%%-%is |" % l, "",
-                 seplinefunc=lambda a,x:"+".join(map(lambda y:"-"*(y+2), [a-1]+x+[-2])),
+                 seplinefunc=lambda a,x:"+".join('-'*(y+2) for y in [a-1]+x+[-2]),
                  *args, **kargs)
 
 def make_tex_table(*args, **kargs):
diff --git a/scapy/utils6.py b/scapy/utils6.py
index 99292911dfdb6513e0387542848d92e8e370f323..1c5a679df5ec04a586e4d18514a12dcd8a43139d 100644
--- a/scapy/utils6.py
+++ b/scapy/utils6.py
@@ -66,7 +66,7 @@ def construct_source_candidate_set(addr, plen, laddr, loiface):
             cset = filter(lambda x: x[1] == IPV6_ADDR_SITELOCAL, laddr)
     elif addr == '::' and plen == 0:
         cset = filter(lambda x: x[1] == IPV6_ADDR_GLOBAL, laddr)
-    cset = map(lambda x: x[0], cset)
+    cset = [x[0] for x in cset]
     cset.sort(cmp=cset_sort) # Sort with global addresses first
     return cset            
 
@@ -222,7 +222,7 @@ def in6_ifaceidtomac(ifaceid): # TODO: finish commenting function behavior
     first = struct.pack("B", ((first & 0xFD) | ulbit))
     oui = first + ifaceid[1:3]
     end = ifaceid[5:]
-    l = map(lambda x: "%.02x" % struct.unpack("B", x)[0], list(oui+end))
+    l = ["%.02x" % struct.unpack('B', x)[0] for x in list(oui + end)]
     return ":".join(l)
 
 def in6_addrtomac(addr):
@@ -523,10 +523,9 @@ def _in6_bitops(a1, a2, operator=0):
     fop = [ lambda x,y: x | y,
             lambda x,y: x & y,
             lambda x,y: x ^ y
-          ]  
+          ]
     ret = map(fop[operator%len(fop)], a1, a2)
-    t = ''.join(map(lambda x: struct.pack('I', x), ret))
-    return t
+    return ''.join(struct.pack('I', x) for x in ret)
 
 def in6_or(a1, a2):
     """
@@ -567,7 +566,7 @@ def in6_cidr2mask(m):
         t.append(max(0, 2**32  - 2**(32-min(32, m))))
         m -= 32
 
-    return ''.join(map(lambda x: struct.pack('!I', x), t))
+    return ''.join(struct.pack('!I', x) for x in t)
 
 def in6_getnsma(a): 
     """
@@ -588,7 +587,7 @@ def in6_getnsmac(a): # return multicast Ethernet address associated with multica
 
     a = struct.unpack('16B', a)[-4:]
     mac = '33:33:'
-    mac += ':'.join(map(lambda x: '%.2x' %x, a))
+    mac += ':'.join("%.2x" %x for x in a)
     return mac
 
 def in6_getha(prefix): 
diff --git a/scapy/volatile.py b/scapy/volatile.py
index 230470bc9ea3c7fc57b2f80f9b93ea9f420f2247..3158258dcf06d928e94d417c041e181d202ea9a7 100644
--- a/scapy/volatile.py
+++ b/scapy/volatile.py
@@ -341,7 +341,7 @@ class RandOID(RandString):
                 if i == "*":
                     oid.append(str(self.idnum))
                 elif i == "**":
-                    oid += map(str, [self.idnum for i in xrange(1+self.depth)])
+                    oid += [str(self.idnum) for i in xrange(1 + self.depth)]
                 elif type(i) is tuple:
                     oid.append(str(random.randrange(*i)))
                 else:
@@ -375,7 +375,7 @@ class RandRegExp(RandField):
                 s = s[:p-1]+rng+s[p+1:]
         res = m+s
         if invert:
-            res = "".join([chr(x) for x in xrange(256) if chr(x) not in res])
+            res = "".join(chr(x) for x in xrange(256) if chr(x) not in res)
         return res
 
     @staticmethod