Python 3.4: Código de formato desconocido 'x'

Tengo un problema con el sniffer de paquetes en Python3.

versión de python: 3.4

Seguí un tutorial que funciona, pero no en mi computadora. Este código tiene que obtener la dirección de mac, convertirla a cadena y en el método main () debería imprimirme el mac de destino, el mac de origen y el protocolo.

código: sniffer_demo.py

import socket
import struct
import textwrap

def main():
    conn = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(3))

    while True:
        raw_data, addr = conn.recvfrom(65536)
        # one's and zero's put to the method ehternet_frame
        dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data)
        print('\nEthernet Frame:')
        print('Destination: {}, Source: {}, Protocol: {}'.format(dest_mac, src_mac, eth_proto))


# Unpack ethernet frame
def ethernet_frame(data):
    dest_mac, src_mac, proto = struct.unpack('! 6s 6s H', data[:14])
    return get_mac_addr(dest_mac), get_mac_addr(src_mac), sock,et.htons(proto), data[14:]


# Return properly formatted MAC address: (ie AA:BB:CC:DD:EE:FF)
def get_mac_addr(bytes_addr):
    bytes_str = map('{:02x}'.format, bytes_addr)
    return ':'.join(bytes_str).upper()

main()

El error es:

Traceback (most recent call last):
  File "sniffer_demo.py", line 28, in <module>
    main()
  File "sniffer_demo.py", line 11, in main
    dest_mac, src_mac, eth_proto, data = ethernet_frame(raw_data)
  File "sniffer_demo.py", line 19, in ethernet_frame
    return get_mac_addr(dest_mac), get_mac_addr(src_mac), socket.htons(proto), data[14:]
  File "sniffer_demo.py", line 24, in get_mac_addr
    bytes_str = map('{:02x}'.format, bytes_addr)
ValueError: Unknown format code 'x' for object of type 'str'

¿Cómo arreglar eso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta