Reading packets from a tun device.

A

Andre

I'm trying to read packets from a tun device in Python, the code I used
for this is the following:

f = file( '/dev/tun0', 'r+' )
pkt = f.read( 1500 )

The problem is that the f.read() call doesn't return. When I used a small
value in the f.read() call instead of the 1500, like 1 or 5, it did
return the first bytes of the packet.
I then went to the manuals and found that file() uses stdio's fopen, so I
changed my code to make file() not do any buffering, like this:

f = file( '/dev/tun0', 'r+', 0 )
pkt = f.read( 1500 )

But the behavior of the program is the same as the one above.

What I'm looking for is a way to open a file in Python without using
stdio, or a way to read from a tun device using it.
I also tried google'ing for another Python program that uses a tun device,
but couldn't find any yet, so if you know of a Python program that uses a
tun device, that'd be enough for me to figure out what I'm doing wrong.

Thank you for reading all this!
 
N

Noah

Andre said:
I'm trying to read packets from a tun device in Python, the code I used
for this is the following:
f = file( '/dev/tun0', 'r+' )
pkt = f.read( 1500 )

The problem is that the f.read() call doesn't return. When I used a small
value in the f.read() call instead of the 1500, like 1 or 5, it did
return the first bytes of the packet.
I then went to the manuals and found that file() uses stdio's fopen, so I
changed my code to make file() not do any buffering, like this:

f = file( '/dev/tun0', 'r+', 0 )
pkt = f.read( 1500 )
But the behavior of the program is the same as the one above.
What I'm looking for is a way to open a file in Python without using
stdio, or a way to read from a tun device using it.

I'm not sure if this problem is due to buffering on your client side, but
you can open plain file descriptors in Python. The buffering could also
be on the server side of the tun device. What is connected to the other
side of the tun? Is that code that you wrote too? If so then send a copy
of that and I can understand better what is going on.

The 'os' package supports raw file descriptor file IO which is below stdio.

import os
fd_tun = os.open ('/dev/tun0', os.O_RDWR)
data = os.read (fd_tun, 1500)
os.close (fd_tun)

Let me know how this goes.

Yours,
Noah
 

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

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top