From 172b14d865ae5df82eeb1a5cd46f8a96d5b9d879 Mon Sep 17 00:00:00 2001
From: Pierre LALET <pierre.lalet@cea.fr>
Date: Mon, 9 Mar 2015 08:18:00 +0100
Subject: [PATCH] Fixes the _write_header() call to make it possible to write
 from a generator

Thanks @yoeld for reporting and proposing a solution.

--HG--
branch : issue-5111
---
 scapy/utils.py | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/scapy/utils.py b/scapy/utils.py
index e4613094..98fd6376 100644
--- a/scapy/utils.py
+++ b/scapy/utils.py
@@ -704,11 +704,19 @@ class RawPcapWriter:
         written to the dumpfile
 
         """
-        if not self.header_present:
-            self._write_header(pkt)
         if type(pkt) is str:
+            if not self.header_present:
+                self._write_header(pkt)
             self._write_packet(pkt)
         else:
+            pkt = pkt.__iter__()
+            if not self.header_present:
+                try:
+                    p = pkt.next()
+                except StopIteration:
+                    return
+                self._write_header(p)
+                self._write_packet(p)
             for p in pkt:
                 self._write_packet(p)
 
@@ -746,8 +754,6 @@ class RawPcapWriter:
 class PcapWriter(RawPcapWriter):
     def _write_header(self, pkt):
         if self.linktype == None:
-            if type(pkt) is list or type(pkt) is tuple or isinstance(pkt,BasePacketList):
-                pkt = pkt[0]
             try:
                 self.linktype = conf.l2types[pkt.__class__]
             except KeyError:
-- 
GitLab