¿Cómo envío un marco de Ethernet sin procesar en python
Necesito tener un proyecto hecho en unos pocos días, es una interfaz básica de cliente y servidor. El problema es que tiene que ser todos los enchufes en bruto. No tengo ningún problema con la creación de eso, simplemente estoy atascado en el envío de paquetes.
Primero intenté enlazarlo a una interfaz 'en1' pero me sigue dando un errornodename not known
. Cuando lo vinculo a mi dirección IP local funciona bien. Después de completar esto, creé una clase de paquete sin procesar, todo está en hexadecimal. Entonces hice un llamado para enviarlo por el cable.
El problema es que cuando capturo el paquete utilizando wireshark, aparece como la carga útil de un paquete ipv4. No quiero que los encabezados se realicen de forma automática, para eso fue mi clase de paquete sin formato. ¿Sabes de alguna manera puedo sacar estos encabezados?
Aquí está mi código - sólo la función en bruto:
def raw():
HOST = gethostbyname('192.168.1.10')
s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)
s.bind((HOST, 0))
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 0) #no headers - it wont work!!
pckt = packet("\x68\x65\x6c\x6c\x6f")
netpacket = pckt.getpacket()
print "Sending.. "
print ""
s.sendto(netpacket, ('192.168.1.1', 80))
data = s.recv(4096)
print data
o y aquí está el paquete capturado con un hola al final:
007f 2809 6da2 28cf daee 2156 0800 4500 004d 1bfc 0000 4000 db59 c0a8 010a c0a8 0101* 007f
2809 6da2 28cf daee 2156 0800 4500 0036 2352 4000 4006 0000 c0a8 010a c0a8 0101 15c0 0050
0000 0000 0000 0000 8010 813b 0000 68656c6c6f -hello
* Este es el inicio de la carga útil, aunque se suponía que debía ser el inicio del paquete. No voy a usar ningún otro módulo que tenga que usar socket.