How to send an IP packet in Python?

Y

yegorov-p

Hello.

I have sniffed some packet and now I would like to send it with the
help of python. It's some simple IGMP packet with VLAN tag.
(01 00 5E 00 43 67 00 02 B3 C8 7F 44 81 00 00 DE 08 00 46 00 00 20 00
01 00 00 01 02 36 4C C0 A8 00 7B EA 00 43 67 94 04 00 00 16 00 BC 97
EA 00 43 67)

At first I wrote that:

dst = '234.0.67.103'
# Open a raw socket.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW,2)
res=''
temp='01 00 5E 00 43 67 00 02 B3 C8 7F 44 81 00 00 DE 08 00 46 00 00
20 00 01 00 00 01 02 36 4C C0 A8 00 7B EA 00 43 67 94 04 00 00 16 00
BC 97 EA 00 43 67'
for i in temp.split(' '):
res+=chr(int(i, 16))
print res
s.sendto(res, (dst, 0))

But for some reason python send that:
0x0000 01 00 5E 00 43 67 00 02-B3 C8 7F 44 08 00 45
00 ..^.Cg..іИD..E.
0x0010 00 46 07 06 00 00 01 02-C4 25 C0 A8 00 7B EA 00 .F......Д
%ÐÐ.{к.
0x0020 43 67 01 00 5E 00 43 67-00 02 B3 C8 7F 44 81 00
Cg..^.Cg..іИDЃ.
0x0030 00 DE 08 00 46 00 00 20-00 01 00 00 01 02 36
4C .Ю..F.. ......6L
0x0040 C0 A8 00 7B EA 00 43 67-94 04 00 00 16 00 BC 97 ÐÐ.
{к.Cgâ€.....ј—
0x0050 EA 00 43
67 к.Cg

As you can see, python ignores my headers and creates its own.

I discussed that problem on stackoverflow.com and one user told me to
try that:

import socket

s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, 0x8100)
s.bind(('eth0', 0x8100))

res=''
temp='01 00 5E 00 43 67 00 02 B3 C8 7F 44 81 00 00 DE 08 00 46 00 00
20 00 01 00 00 01 02 36 4C C0 A8 00 7B EA 00 43 67 94 04 00 00 16 00
BC 97 EA 00 43 67'
for i in temp.split(' '):
res+=chr(int(i, 16))
s.send(res)

But under Windows, AF_PACKET is said to be undefined. =( I tried to
replace it with AF_INET, but now python tells me that that protocol
(0x8100) is not supported. 0x8100 is IEEE 802.1Q and I just don't
understand, why it isn't supported. I can generate packet with VLAN
tag inside and send it with the help of pierf, for example. In fact, I
can generate and send the packet from my example with pierf and it
runs just fine. =) I've found a topic with the same problem (http://
www.computing.net/answers/programming/python-windows-sockets/11884.html)

So, is there any way to somehow send a packet with ready headers and
data under Windows with the help of python?
 
N

Nobody

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,049
Latest member
Allen00Reed

Latest Threads

Top