Sniffer de paquetes sin procesar simple en Python

Primero, soy un principiante en Python. Desarrollé un simple sniffer de paquetes sin procesar utilizando elPF_PACKET interfaz que opera en la capa 2.

El sniffer simplemente descubre lo siguiente ... - Encabezado de Ethernet (Origen - Destino - Protocolo) - Encabezado de IP (IP de origen - IP de destino) - Encabezado de TCP (Puerto de origen - Puerto de destino)

Aquí está el código que he escrito hasta ahora ...

#!/usr/bin/env python
import struct
import socket
import binascii

rawSocket=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800))
#ifconfig eth0 promisc up
receivedPacket=rawSocket.recv(2048)

#Ethernet Header...
ethernetHeader=receivedPacket[0][0:14]
ethrheader=struct.unpack("!6s6s2s",ethernetHeader)
destinationIP= binascii.hexlify(ethrheader[0])
sourceIP= binascii.hexlify(ethrheader[1])
protocol= binascii.hexlify(ethrheader[2])
print "Destinatiom: " + destinationIP
print "Souce: " + sourceIP
print "Protocol: "+ protocol

#IP Header... 
ipHeader=receivedPacket[0][14:34]
ipHdr=struct.unpack("!12s4s4s",ipHeader)
destinationIP=socket.inet_ntoa(ipHdr[2])
print "Source IP: " +sourceIP
print "Destination IP: "+destinationIP

#TCP Header...
tcpHeader=receivedPacket[0][34:54]
tcpHdr=struct.unpack("!2s2s16s",tcpHeader)
sourcePort=socket.inet_ntoa(tcpHdr[0])
destinationPort=socket.inet_ntoa(tcpHdr[1])
print "Source Port: " + sourcePort
print "Destination Port: " + destinationPort

Parece que encuentro un problema en la parte del encabezado de Ethernet y el método de desempaquetado que no puedo entender. Gracias por adelantado :)

Respuestas a la pregunta(2)

Su respuesta a la pregunta