title: Exception IP6 has no attribute
body: <p>I'm programming in python and i have a problem, indeed when i throw my script it end some seconds after when he detect an IP6 packet. Apparently i have to filter packets and take only IP4 packet to avoid this problem and i would like to know how can i use it with the library dpkt if possible as i started. 
  I tried something but i'm a beginner and it don't work as you can see in this line:</p>
  
  <pre><code>#Select Ipv4 packets because of problem with the .p in Ipv6
              if ip.p == dpkt.ip6:
                  return`
  </code></pre>
  
  <p>The error encountered say: "AttributeError: 'IP6' object has no attribute 'p'". This is the traceback:
  <img src="https://i.stack.imgur.com/EOxtv.png" alt="traceback"></p>
  
  <p>This is my code if you want to have a look :) 
  Thanks for your time :) </p>
  
  <pre><code>import pcapy
  import dpkt
  from threading import Thread
  import re
  import binascii
  
  liste=[]
  listip=[]
  piece_request_handshake = re.compile('13426974546f7272656e742070726f746f636f6c(?P&lt;reserved&gt;\w{8})(?P&lt;info_hash&gt;\w{20})(?P&lt;peer_id&gt;\w{20})')
  piece_request_tcpclose = re.compile('(?P&lt;start&gt;\w{12})5011')
  
  
  class PieceRequestSniffer(Thread):
      def __init__(self, dev='eth0'):
          Thread.__init__(self)
  
          self.expr = 'udp or tcp'
  
          self.maxlen = 65535  # max size of packet to capture
          self.promiscuous = 1  # promiscuous mode?
          self.read_timeout = 100  # in milliseconds
          self.max_pkts = -1  # number of packets to capture; -1 =&gt; no limit
  
          self.active = True
          self.p = pcapy.open_live(dev, self.maxlen, self.promiscuous, self.read_timeout)
          self.p.setfilter(self.expr)
  
      @staticmethod
      def cb(hdr, data):
  
          eth = dpkt.ethernet.Ethernet(str(data))
          ip = eth.data
  
          #Select only TCP protocols
          if ip.p == dpkt.ip.IP_PROTO_TCP:
              tcp = ip.data
  
              #Select Ipv4 packets because of problem with the .p in Ipv6
              if ip.p == dpkt.ip6:
                  return
              else:
                  try:
                      #Return hexadecimal representation
                      hex_data = binascii.hexlify(tcp.data)
                  except:
                      return                
  
                  handshake = piece_request_handshake.findall(hex_data)
                  if handshake:
                      print "-----------handsheck filtered-------------"
                      liste.append(handshake)
                      print "\n"
                      #for element in zip(liste,"123456789abcdefghijklmnopqrstuvwxyz"):
                      #    print(element)
  
  
  
      def stop(self):
          self.active = False
  
      def run(self):
          while self.active:
              self.p.dispatch(0, PieceRequestSniffer.cb)
  
  
  sniffer = PieceRequestSniffer()
  sniffer.start()
  </code></pre>