diff --git a/doc/notebooks/HTTP_2_Tuto.ipynb b/doc/notebooks/HTTP_2_Tuto.ipynb
index 9b3885c6661c4f9be4e3931bd582229288ff3903..bb2a23aa652fe588883ffae69209bb1b418e8697 100644
--- a/doc/notebooks/HTTP_2_Tuto.ipynb
+++ b/doc/notebooks/HTTP_2_Tuto.ipynb
@@ -1651,8 +1651,8 @@
      "cell_type": "code",
      "collapsed": false,
      "input": [
-      "import StringIO\n",
-      "sio = StringIO.StringIO(stream_txt[1])\n",
+      "from io import BytesIO\n",
+      "sio = BytesIO(stream_txt[1])\n",
       "cookie = [val[len('set-cookie: '):].strip() for val in sio if val.startswith('set-cookie: ')]\n",
       "print(cookie)"
      ],
diff --git a/scapy/contrib/http2.py b/scapy/contrib/http2.py
index 83b65493161a7236942a1e20a74c0f84c069e978..8cfe66dd77809dd76f99899dda65e96d6e3357a1 100644
--- a/scapy/contrib/http2.py
+++ b/scapy/contrib/http2.py
@@ -30,7 +30,7 @@ from __future__ import print_function
 import abc
 import types
 import re
-import StringIO
+from io import BytesIO
 import struct
 import scapy.modules.six as six
 from scapy.modules.six.moves import range
@@ -2625,7 +2625,7 @@ class HPackHdrTable(Sized):
         @raise Exception
         """
 
-        sio = StringIO.StringIO(s)
+        sio = BytesIO(s)
 
         base_frm_len = len(str(H2Frame()))
 
@@ -2681,7 +2681,7 @@ class HPackHdrTable(Sized):
 
         if body:
             base_data_frm_len = len(str(H2DataFrame()))
-            sio = StringIO.StringIO(body)
+            sio = BytesIO(body)
             frgmt = sio.read(max_frm_sz - base_data_frm_len - base_frm_len)
             while frgmt:
                 nxt_frgmt = sio.read(max_frm_sz - base_data_frm_len - base_frm_len)
diff --git a/test/mock_windows.uts b/test/mock_windows.uts
index 1af99f5051a126bba074694419ea7814b7b6f42a..e18af8382b5347c489afc5d46a1982681a5b2ed8 100644
--- a/test/mock_windows.uts
+++ b/test/mock_windows.uts
@@ -203,9 +203,9 @@ conf.prog._reload()
 = show_interfaces
 
 from scapy.arch import show_interfaces
-from StringIO import StringIO
+from io import BytesIO
 
-@mock.patch('sys.stdout', new_callable=StringIO)
+@mock.patch('sys.stdout', new_callable=BytesIO)
 def test_show_interfaces(mock_stdout):
     show_interfaces()
     lines = mock_stdout.getvalue().split("\n")[1:]
diff --git a/test/regression.uts b/test/regression.uts
index f53d415cd8c4999558e34a4323ac574101764875..4c80e2543ef8c6154a6abe453739a038965bceca 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -5143,10 +5143,10 @@ nf5.version == 5 and nf5[NetflowHeaderV5].count == 2 and isinstance(nf5[NetflowR
 + pcap / pcapng format support
 
 = Variable creations
-import cStringIO
-pcapfile = cStringIO.StringIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00')
-pcapngfile = cStringIO.StringIO(b'\n\r\r\n\\\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00,\x00File created by merging: \nFile1: test.pcap \n\x04\x00\x08\x00mergecap\x00\x00\x00\x00\\\x00\x00\x00\x01\x00\x00\x00\\\x00\x00\x00e\x00\x00\x00\xff\xff\x00\x00\x02\x006\x00Unknown/not available in original file format(libpcap)\x00\x00\t\x00\x01\x00\x06\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00\x06\x00\x00\x00H\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00/\xfc[\xcd(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00H\x00\x00\x00\x06\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00\x1f\xff[\xcd\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r<\x00\x00\x00\x06\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00\xb9\x02\\\xcd\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00<\x00\x00\x00')
-pcapnanofile = cStringIO.StringIO(b"M<\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacV\xc9\xc1\xb5'(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV-;\xc1'\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\x9aL\xcf'\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00")
+from io import BytesIO
+pcapfile = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00')
+pcapngfile = BytesIO(b'\n\r\r\n\\\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00,\x00File created by merging: \nFile1: test.pcap \n\x04\x00\x08\x00mergecap\x00\x00\x00\x00\\\x00\x00\x00\x01\x00\x00\x00\\\x00\x00\x00e\x00\x00\x00\xff\xff\x00\x00\x02\x006\x00Unknown/not available in original file format(libpcap)\x00\x00\t\x00\x01\x00\x06\x00\x00\x00\x00\x00\x00\x00\\\x00\x00\x00\x06\x00\x00\x00H\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00/\xfc[\xcd(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00H\x00\x00\x00\x06\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00\x1f\xff[\xcd\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r<\x00\x00\x00\x06\x00\x00\x00<\x00\x00\x00\x00\x00\x00\x00\x8d*\x05\x00\xb9\x02\\\xcd\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00<\x00\x00\x00')
+pcapnanofile = BytesIO(b"M<\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacV\xc9\xc1\xb5'(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV-;\xc1'\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\x9aL\xcf'\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00")
 
 = Read a pcap file
 pktpcap = rdpcap(pcapfile)
@@ -5207,7 +5207,7 @@ os.unlink(filename)
 
 = Check PcapNg with nanosecond precision using obsolete packet block
 * first packet from capture file icmp2.ntar -- https://wiki.wireshark.org/Development/PcapNg?action=AttachFile&do=view&target=icmp2.ntar
-pcapngfile = cStringIO.StringIO(b'\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xa8\x03\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\xff\xff\x00\x00\r\x00\x01\x00\x04\x04K\x00\t\x00\x01\x00\tK=N\x00\x00\x00\x00(\x00\x00\x00\x02\x00\x00\x00n\x00\x00\x00\x00\x00\x00\x00e\x14\x00\x00)4\'ON\x00\x00\x00N\x00\x00\x00\x00\x12\xf0\x11h\xd6\x00\x13r\t{\xea\x08\x00E\x00\x00<\x90\xa1\x00\x00\x80\x01\x8e\xad\xc0\xa8M\x07\xc0\xa8M\x1a\x08\x00r[\x03\x00\xd8\x00abcdefghijklmnopqrstuvwabcdefghi\xeay$\xf6\x00\x00n\x00\x00\x00')
+pcapngfile = BytesIO(b'\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xa8\x03\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\xff\xff\x00\x00\r\x00\x01\x00\x04\x04K\x00\t\x00\x01\x00\tK=N\x00\x00\x00\x00(\x00\x00\x00\x02\x00\x00\x00n\x00\x00\x00\x00\x00\x00\x00e\x14\x00\x00)4\'ON\x00\x00\x00N\x00\x00\x00\x00\x12\xf0\x11h\xd6\x00\x13r\t{\xea\x08\x00E\x00\x00<\x90\xa1\x00\x00\x80\x01\x8e\xad\xc0\xa8M\x07\xc0\xa8M\x1a\x08\x00r[\x03\x00\xd8\x00abcdefghijklmnopqrstuvwabcdefghi\xeay$\xf6\x00\x00n\x00\x00\x00')
 pktpcapng = rdpcap(pcapngfile)
 assert len(pktpcapng) == 1
 pkt = pktpcapng[0]
@@ -5227,7 +5227,7 @@ assert isinstance(pkt, NoPayload)
 
 = Check PcapNg using Simple Packet Block
 * previous file with the (obsolete) packet block replaced by a Simple Packet Block
-pcapngfile = cStringIO.StringIO(b'\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xa8\x03\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\xff\xff\x00\x00\r\x00\x01\x00\x04\x04K\x00\t\x00\x01\x00\tK=N\x00\x00\x00\x00(\x00\x00\x00\x03\x00\x00\x00`\x00\x00\x00N\x00\x00\x00\x00\x12\xf0\x11h\xd6\x00\x13r\t{\xea\x08\x00E\x00\x00<\x90\xa1\x00\x00\x80\x01\x8e\xad\xc0\xa8M\x07\xc0\xa8M\x1a\x08\x00r[\x03\x00\xd8\x00abcdefghijklmnopqrstuvwabcdefghi\xeay$\xf6\x00\x00`\x00\x00\x00')
+pcapngfile = BytesIO(b'\n\r\r\n\x1c\x00\x00\x00M<+\x1a\x01\x00\x00\x00\xa8\x03\x00\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x01\x00\x00\x00(\x00\x00\x00\x01\x00\x00\x00\xff\xff\x00\x00\r\x00\x01\x00\x04\x04K\x00\t\x00\x01\x00\tK=N\x00\x00\x00\x00(\x00\x00\x00\x03\x00\x00\x00`\x00\x00\x00N\x00\x00\x00\x00\x12\xf0\x11h\xd6\x00\x13r\t{\xea\x08\x00E\x00\x00<\x90\xa1\x00\x00\x80\x01\x8e\xad\xc0\xa8M\x07\xc0\xa8M\x1a\x08\x00r[\x03\x00\xd8\x00abcdefghijklmnopqrstuvwabcdefghi\xeay$\xf6\x00\x00`\x00\x00\x00')
 pktpcapng = rdpcap(pcapngfile)
 assert len(pktpcapng) == 1
 pkt = pktpcapng[0]
@@ -5246,7 +5246,7 @@ assert isinstance(pkt, NoPayload)
 = Check tcpdump()
 ~ tcpdump
 * No very specific tests because we do not want to depend on tcpdump output
-pcapfile = cStringIO.StringIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00')
+pcapfile = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00')
 data = tcpdump(pcapfile, dump=True, args=['-n']).split('\n')
 print data
 assert 'IP 127.0.0.1.20 > 127.0.0.1.80:' in data[0]
@@ -5255,7 +5255,7 @@ assert 'IP 127.0.0.1 > 127.0.0.1:' in data[2]
 
 = Check tcpdump() command with tshark
 ~ tshark
-pcapfile = cStringIO.StringIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00')
+pcapfile = BytesIO(b'\xd4\xc3\xb2\xa1\x02\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00e\x00\x00\x00\xcf\xc5\xacVo*\n\x00(\x00\x00\x00(\x00\x00\x00E\x00\x00(\x00\x01\x00\x00@\x06|\xcd\x7f\x00\x00\x01\x7f\x00\x00\x01\x00\x14\x00P\x00\x00\x00\x00\x00\x00\x00\x00P\x02 \x00\x91|\x00\x00\xcf\xc5\xacV_-\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x11|\xce\x7f\x00\x00\x01\x7f\x00\x00\x01\x005\x005\x00\x08\x01r\xcf\xc5\xacV\xf90\n\x00\x1c\x00\x00\x00\x1c\x00\x00\x00E\x00\x00\x1c\x00\x01\x00\x00@\x01|\xde\x7f\x00\x00\x01\x7f\x00\x00\x01\x08\x00\xf7\xff\x00\x00\x00\x00')
 values = [tuple(int(val) for val in line[:-1].split('\t')) for line in tcpdump(pcapfile, prog=conf.prog.tshark, getfd=True, args=['-T', 'fields', '-e', 'ip.ttl', '-e', 'ip.proto'])]
 assert values == [(64, 6), (64, 17), (64, 1)]
 
@@ -5613,7 +5613,7 @@ assert isinstance(pkt, DNS) and isinstance(pkt.payload, NoPayload)
 ~ mock_read_routes6_bsd
 
 import mock
-import StringIO
+from io import BytesIO
 
 @mock.patch("scapy.arch.unix.get_if_addr")
 @mock.patch("scapy.arch.unix.os")
@@ -5635,9 +5635,9 @@ default            link#11            UCSI            1        0 bridge1
     def se_popen(command):
         """Perform specific side effects"""
         if command.startswith("netstat -rn"):
-            return StringIO.StringIO(netstat_output)
+            return BytesIO(netstat_output)
         elif command == "ifconfig -l":
-            ret = StringIO.StringIO(ifconfig_output)
+            ret = BytesIO(ifconfig_output)
             def unit():
                 return ret
             ret.__call__ = unit
@@ -5673,7 +5673,7 @@ test_osx_netstat_truncated()
 ~ mock_read_routes6_bsd
 
 import mock
-import StringIO
+from io import BytesIO
 
 def valid_output_read_routes6(routes):
     """"Return True if 'routes' contains correctly formatted entries, False otherwise"""
@@ -5724,7 +5724,7 @@ ff02::%lo0/32                           ::1                             UmCI
 ff02::%en0/32                           link#4                          UmCI            en0
 """
     # Mocked file descriptor
-    strio = StringIO.StringIO(netstat_output)
+    strio = BytesIO(netstat_output)
     mock_os.popen = mock.MagicMock(return_value=strio)
     # Mocked in6_getifaddr() output
     mock_in6_getifaddr.return_value = [("::1", IPV6_ADDR_LOOPBACK, "lo0"),
@@ -5771,7 +5771,7 @@ ff01::%en0/32                           link#4                          UmCI
 ff02::%lo0/32                           ::1                             UmCI            lo
 """
     # Mocked file descriptor
-    strio = StringIO.StringIO(netstat_output)
+    strio = BytesIO(netstat_output)
     mock_os.popen = mock.MagicMock(return_value=strio)
     # Mocked in6_getifaddr() output
     mock_in6_getifaddr.return_value = [("::1", IPV6_ADDR_LOOPBACK, "lo0"),
@@ -5812,7 +5812,7 @@ ff02::%lo0/32                           ::1                             UmCI
 ff02::%en0/32                           link#4                          UmCI            en0
 """
     # Mocked file descriptor
-    strio = StringIO.StringIO(netstat_output)
+    strio = BytesIO(netstat_output)
     mock_os.popen = mock.MagicMock(return_value=strio)
     # Mocked in6_getifaddr() output
     mock_in6_getifaddr.return_value = [("::1", IPV6_ADDR_LOOPBACK, "lo0"),
@@ -5852,7 +5852,7 @@ ff02::/16                         ::1                           UGRS        lo0
 ff02::%lo0/32                     ::1                           U           lo0
 """
     # Mocked file descriptor
-    strio = StringIO.StringIO(netstat_output)
+    strio = BytesIO(netstat_output)
     mock_os.popen = mock.MagicMock(return_value=strio)
     # Mocked in6_getifaddr() output
     mock_in6_getifaddr.return_value = [("::1", IPV6_ADDR_LOOPBACK, "lo0")]
@@ -5906,7 +5906,7 @@ ff02::%em0/32                      link#1                         UC         0
 ff02::%lo0/32                      fe80::1%lo0                    UC         0        0     -     4 lo0 
 """
     # Mocked file descriptor
-    strio = StringIO.StringIO(netstat_output)
+    strio = BytesIO(netstat_output)
     mock_os.popen = mock.MagicMock(return_value=strio)
     
     # Mocked in6_getifaddr() output
@@ -5962,7 +5962,7 @@ ff02::%wm0/32                      link#1                         UC          -
 ff02::%lo0/32                      ::1                            UC          -        -      -  lo0
 """
     # Mocked file descriptor
-    strio = StringIO.StringIO(netstat_output)
+    strio = BytesIO(netstat_output)
     mock_os.popen = mock.MagicMock(return_value=strio)
     # Mocked in6_getifaddr() output
     mock_in6_getifaddr.return_value = [("::1", IPV6_ADDR_LOOPBACK, "lo0"),
diff --git a/test/tls/travis_test_server.py b/test/tls/travis_test_server.py
index ba24403f77989ecaaad6a27201f9632cc36ec97d..e8321cc0773140ab0bafe9e050a72a8aafa5a63e 100755
--- a/test/tls/travis_test_server.py
+++ b/test/tls/travis_test_server.py
@@ -15,7 +15,7 @@ If no expected_data was provided and the handshake was ok, we exit with 0.
 import os
 import sys
 from contextlib import contextmanager
-from StringIO import StringIO
+from io import BytesIO
 
 basedir = os.path.abspath(os.path.join(os.path.dirname(__file__),"../../"))
 sys.path=[basedir]+sys.path
@@ -25,7 +25,7 @@ from scapy.layers.tls.automaton import TLSServerAutomaton
 
 @contextmanager
 def captured_output():
-    new_out, new_err = StringIO(), StringIO()
+    new_out, new_err = BytesIO(), BytesIO()
     old_out, old_err = sys.stdout, sys.stderr
     try:
         sys.stdout, sys.stderr = new_out, new_err