Como faço para enviar um quadro ethernet raw em python
Eu preciso ter um projeto feito em poucos dias, é uma interface básica de cliente e servidor. O problema é que ele precisa ser todo soquete bruto. Eu não tenho nenhum problema em criar isso, estou apenas preso ao enviar os pacotes.
Primeiro eu tentei ligá-lo a uma interface 'en1', mas ele continua me dando um erronodename not known
. Quando eu o vinculo ao meu endereço IP local, ele funciona bem. Depois de concluir isso, criei uma classe de pacote bruta, tudo em hexadecimal. Eu então fiz um chamado para enviar para o fio.
O problema é que quando eu capturar o pacote usando wireshark ele aparece como sendo a carga útil de um pacote ipv4. Eu não quero que ele faça os cabeçalhos automaticamente, é para isso que minha classe de pacotes brutos era de qualquer maneira. Você sabe de alguma maneira eu posso tirar esses cabeçalhos?
Aqui está o meu código - apenas a função raw:
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 e aqui está o pacote capturado com um olá no 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 é o começo da carga mesmo que deveria ser o início do pacote também não vou usar nenhum outro módulo que eu tenha que usar o socket.